CISSP domän 8: Säkerhet i mjukvaruutveckling med exempel

  • CISSP Domain 8 Software Development Security
  • Published by: André Hammer on feb. 19, 2024
Blog Alt SE

Säker mjukvaruutveckling innebär att risker hanteras genom hela livscykeln, även när releasefönstret är nära. Ett utvecklingsteam kan till exempel hitta en osäker beroendekedja eller en injektionsrisk under sista acceptanstestet, när produktägaren redan har kommunicerat lanseringsdatum och varje ändring känns dyr.

CISSP domän 8, Software Development Security, handlar om hur säkerhet byggs in i programvarans livscykel från krav och design till kod, test, release och underhåll. Domänen är särskilt relevant för säkerhetsarkitekter, utvecklingsledare, DevOps-team och CISSP-kandidater som behöver förstå hur säkra utvecklingsprinciper fungerar i verkliga miljöer, inte enbart som teori inför ett prov.

Den praktiska poängen är att säkerhet inte kan placeras längst bak i processen. När kontroller införs sent skapas ofta en konflikt mellan leveranstakt och riskreducering. När samma kontroller i stället kopplas till krav, kodgranskning, pipeline-regler och driftövervakning blir de en del av teamets normala arbetssätt.

Vad domän 8 betyder i en modern utvecklingsmiljö

Domän 8 täcker säker programvaruutveckling, säker kodning, applikationssäkerhetstestning, livscykelstyrning och risker med anskaffad programvara. Den berör även hur team hanterar öppen källkod, kommersiell standardprogramvara, API:er, metadata, felhantering och säker konfiguration.

I praktiken innebär detta att arkitekturbeslut, kodmönster och leveransprocesser måste kunna granskas ur ett säkerhetsperspektiv. Ett team som bygger ett kundnära API behöver till exempel kunna visa hur autentisering, auktorisering, indatavalidering, utdata-kodning, loggning och beroendehantering fungerar tillsammans. En ensam skanner kan hitta vissa problem, men den kan inte ersätta tydliga säkerhetskrav, hotmodellering och ansvarsfulla releasebeslut.

En undersökning från Secure Code Warrior har tidigare pekat på att applikationssäkerhet inte alltid prioriteras i utvecklingsarbetet, vilket gör frågan relevant långt utanför certifieringssammanhanget. Den bakomliggande lärdomen är mindre att enskilda utvecklare skulle sakna vilja, och mer att organisationer ofta saknar tydliga förväntningar, mätbara kontroller och tid i sprinten för säkerhetsarbete. Secure Code Warriors undersökning om utvecklares syn på applikationssäkerhet illustrerar denna organisatoriska utmaning.

Från säker SDLC till konkreta pipeline-kontroller

En säker SDLC blir användbar först när den översätts till arbetsmoment som teamet faktiskt utför. Kravfasen bör få säkerhetsacceptanskriterier, designfasen bör inkludera hotmodellering, kodfasen bör ha granskning och automatiserade kontroller, och releasefasen bör kräva spårbarhet för artefakter och beroenden.

I en modern CI/CD-miljö kan domän 8 omsättas genom branch-skydd, obligatorisk kodgranskning och säkerhetskontroller som körs innan kod får slås samman. SAST passar tidigt i byggflödet eftersom det analyserar koden innan applikationen körs. SCA bör kontrollera tredjepartsberoenden vid pull request och vid release, eftersom sårbarheter i beroenden ofta förändras över tid. Secrets-skanning bör ske både lokalt och i pipeline för att minska risken att nycklar, tokens eller anslutningssträngar hamnar i Git-historiken.

DAST lämpar sig bättre när applikationen kan köras i en testmiljö, eftersom tekniken analyserar beteendet hos en fungerande tjänst. Artefaktsignering hör hemma nära paketering och publicering, där teamet kan säkerställa att rätt byggresultat distribueras. En SBOM, Software Bill of Materials, bör skapas vid release och göras tillgänglig för sårbarhetshantering, riskregister och incidentrespons.

  • Före merge: branch-skydd, kodgranskning, SAST, SCA och secrets-skanning bör fånga fel innan kod blir en del av huvudgrenen.
  • Under build: reproducerbara byggen, testning och policykontroller bör skapa förtroende för artefakten.
  • Före release: DAST, konfigurationskontroll, artefaktsignering och SBOM bör stödja ett medvetet releasebeslut.
  • Efter release: beroendeövervakning, logggranskning och sårbarhetsrespons bör hålla produkten säker när hotbilden förändras.

Den vanligaste fallgropen är att pipeline-kontroller införs som hårda stopp utan riskklassning. Då lär sig team snabbt att kringgå reglerna, eller så fastnar releaser på lågprioriterade fynd. Ett bättre arbetssätt är att definiera vilka fynd som alltid stoppar release, vilka som måste hanteras i en riskbaserad backlog och vilka som kan accepteras med beslutslogg, tidsgräns och ansvarig ägare.

Säker kodning kräver mer än skanning

Säker kodning börjar med enkla principer: minsta privilegium, säkra standardinställningar, försvar i flera lager, tydlig felhantering och kontrollerad åtkomst till data. Men principerna behöver konkretiseras i kodmönster, ramverk och kodgranskningar. Annars blir de formuleringar i en policy snarare än beteenden i utvecklingsarbetet.

En vanlig missuppfattning är att indatavalidering och utdata-kodning löser samma problem. Indatavalidering kontrollerar att data har förväntat format, längd, typ och intervall innan den används. Utdata-kodning skyddar däremot den kontext där data presenteras, till exempel HTML, JavaScript, SQL eller en loggrad. Ett fält kan vara giltigt som namn men fortfarande behöva kodas innan det visas i en webbsida.

För databasanrop är parameteriserade frågor ett grundläggande skydd mot SQL-injektion. Exemplet nedan visar inte en fullständig applikation, utan det kodmönster som bör granskas när användarinmatning används i frågor mot en databas.

Example — parameteriserad fråga i C#

using Microsoft.Data.SqlClient;

public async Task<Customer?> GetCustomerAsync(SqlConnection connection, string customerId)
{
    const string sql = "SELECT CustomerId, DisplayName FROM Customers WHERE CustomerId = @CustomerId";

    await using var command = new SqlCommand(sql, connection);
    command.Parameters.AddWithValue("@CustomerId", customerId);

    await using var reader = await command.ExecuteReaderAsync();
    if (!await reader.ReadAsync())
    {
        return null;
    }

    return new Customer(
        reader.GetString(0),
        reader.GetString(1));
}

Koden binder användarvärdet som en parameter i stället för att bygga SQL med strängkonkatenering. Vid granskning bör teamet även kontrollera behörigheter för databasrollen, felhantering, loggning och om kund-ID:t valideras mot ett förväntat format innan anropet görs.

Loggning är ett annat område där säkra kodningsprinciper ofta brister. Loggar behövs för felsökning, säkerhetsövervakning och incidentutredning, men de får inte bli en sekundär databas för personuppgifter, tokens, sessionsvärden eller interna hemligheter. Domän 8 bör därför kopplas till tydliga loggningsstandarder: vad som får loggas, vad som ska maskeras, hur länge loggar sparas och vem som får läsa dem.

Mini-case: när en sen sårbarhet blir en processfråga

Ett vanligt scenario är att ett team inför en ny betalningsrelaterad funktion och använder ett populärt bibliotek för filtolkning. Några dagar före release flaggar säkerhetsteamet att biblioteksversionen har en känd sårbarhet. Utvecklarna har redan byggt funktionalitet ovanpå bibliotekets API, testningen är klar och kunden väntar på leverans.

Om organisationen saknar beslutsmodell blir diskussionen lätt polariserad: antingen stoppa allt eller skicka ändå. Ett Domain 8-orienterat arbetssätt ger fler alternativ. Teamet kan kontrollera om den sårbara funktionen faktiskt används, om kompensationskontroller finns, om uppdatering är möjlig utan större regressionsrisk och om exponeringen kan begränsas genom konfiguration. Beslutet bör dokumenteras med riskägare, åtgärdsdatum och kriterier för om risken måste omprövas.

Samma situation hade sannolikt blivit billigare om SCA körts redan vid pull request, om beroendepolicyn hade definierat godkända versioner och om SBOM hade gjort det enkelt att se var komponenten användes. Detta är kärnan i domän 8 i praktiken: att upptäcka och hantera risk när den fortfarande är möjlig att påverka utan krisläge.

Programvaruförsörjningskedjan och tredjepartsrisk

Mycket modern programvara består av kod som organisationen inte själv har skrivit. Öppen källkod, containeravbildningar, SaaS-komponenter, SDK:er och COTS-produkter kan minska utvecklingstid men samtidigt introducera beroenden som måste styras. Domain 8 kräver därför en realistisk syn på programvaruförsörjningskedjan.

En fungerande policy bör beskriva hur nya beroenden godkänns, vilka licens- och säkerhetskrav som gäller, hur versioner låses, hur ofta patchar utvärderas och vad som händer när en kritisk sårbarhet publiceras. För COTS-programvara behöver inköp och säkerhet samarbeta kring leverantörens patchrutiner, säkerhetsdokumentation, åtkomstmodell, loggningsmöjligheter och eventuell SBOM. För öppen källkod behöver teamet bedöma projektets underhållsstatus, releasehistorik, beroendeträd och om komponenten verkligen behövs.

Det är också viktigt att skilja mellan uppdateringstakt och uppdateringsdisciplin. Att alltid uppdatera direkt kan skapa driftstörningar, medan att aldrig uppdatera skapar ackumulerad risk. Ett mer hållbart arbetssätt är att ha normala patchfönster för låg och medelhög risk, snabbspår för kritiska sårbarheter och en tydlig process för undantag när en patch inte kan införas direkt.

Ramverk som gör domän 8 användbar i vardagen

Domän 8 blir lätt abstrakt om den inte kopplas till etablerade ramverk. OWASP ASVS kan användas för att definiera verifierbara säkerhetskrav för applikationer. ASVS nivå 1 passar ofta som basnivå för många webbapplikationer, medan högre nivåer blir mer relevanta när applikationen hanterar känsliga transaktioner, starka identitetskrav eller högre hotexponering. OWASP SAMM hjälper i stället organisationer att bedöma och förbättra mognaden i sitt program för mjukvarusäkerhet.

NIST SP 800-218, även kallad Secure Software Development Framework eller SSDF, är användbar när säker utveckling ska mappas mot återkommande teamrutiner. Krav kan kopplas till backloggrooming, hotmodellering till designarbete, säker kodning till definition of done och verifiering till pipeline-kontroller. ISO/IEC 27034 ger ett bredare ramverk för applikationssäkerhet på organisationsnivå, särskilt där styrning, roller och återanvändbara säkerhetskontroller behöver formaliseras.

I svensk kontext bör team även beakta vägledning från MSB kring systematiskt informationssäkerhetsarbete och riskhantering. MSB ersätter inte tekniska ramverk som OWASP eller NIST SSDF, men myndighetens vägledning kan hjälpa organisationer att koppla applikationssäkerhet till styrning, kontinuitet, incidenthantering och ledningens riskansvar.

Ramverk eller källa Praktisk användning i teamet
OWASP ASVS Formulerar testbara säkerhetskrav och acceptanskriterier för applikationer.
OWASP SAMM Bedömer mognad i organisationens program för mjukvarusäkerhet.
NIST SP 800-218 SSDF Kopplar säker utveckling till arbetssätt, roller, verktyg och verifiering.
ISO/IEC 27034 Stödjer styrning av applikationssäkerhet och återanvändbara kontroller.
MSB:s vägledning Sätter applikationsrisk i relation till informationssäkerhet, styrning och incidentberedskap.

Roller och ansvar under de första veckorna

Domän 8 påverkar flera roller samtidigt. En utvecklingsledare behöver se till att säkerhetskrav får plats i sprintplaneringen och att kritiska fynd inte försvinner i en generell teknisk skuld-lista. En arkitekt behöver tydliggöra hotmodeller, dataflöden, trust boundaries och val av säkerhetskontroller. DevOps eller plattformsteamet behöver göra kontrollerna repeterbara i pipeline, inte beroende av manuella punktinsatser.

Under den första veckan kan teamet välja ett repo med aktiv utveckling och identifiera de viktigaste riskerna: känsliga data, externa API:er, autentisering, beroenden och releasevägar. Under de följande veckorna kan teamet införa branch-skydd, lägga till grundläggande SAST och SCA, definiera vilka fynd som blockerar merge och skapa en enkel beslutslogg för accepterad risk. När detta fungerar kan samma mönster återanvändas i fler repos.

Den praktiska kompromissen mellan leveranstakt och säkerhet bör inte hanteras informellt. En defektbudget kan hjälpa teamet att avgöra när ackumulerad säkerhetsrisk måste prioriteras före ny funktionalitet. Riskacceptans kan vara rimlig när exponeringen är låg, kompensationskontroller finns och åtgärdsplanen är tidsatt, men beslutet måste vara synligt för rätt riskägare.

Vanliga implementeringsfällor

Det första misstaget är att förlita sig på skanners som om de vore ett komplett säkerhetsprogram. Automatiserade verktyg är nödvändiga, men de missar ofta logiska auktoriseringsfel, bristande affärsregler och felaktiga antaganden i designen. Därför behövs kodgranskning, hotmodellering och säkerhetstestning som kompletterar verktygen.

Det andra misstaget är svag hantering av hemligheter. Secrets i källkod, byggloggar, lokala konfigurationsfiler eller delade dokument är svåra att sanera i efterhand. En mogen process använder hemlighetshanterare, kortlivade autentiseringsuppgifter där det är möjligt, rotationsrutiner och automatisk skanning av repositoryhistorik.

Det tredje misstaget är att säkerhetsarbete saknar ägarskap efter release. Sårbarheter publiceras kontinuerligt, leverantörer ändrar sina produkter och beroenden får nya versioner. Om inget team äger uppföljning efter driftsättning blir applikationen gradvis svagare även om den var välgranskad vid första release.

Att bygga kunskap utan att tappa fokus

CISSP-kandidater behöver förstå domän 8 på en nivå som går bortom minneslistor. Det innebär att kunna resonera om varför en kontroll hör hemma i en viss fas, hur en sårbarhet kan förebyggas tidigare i livscykeln och hur tekniska beslut påverkar verksamhetsrisk. För säkerhetsarkitekter och tekniska ledare blir samma kunskap ett sätt att ställa bättre frågor till utvecklingsteam och leverantörer.

Readynez kan vara ett stöd för den som vill strukturera sin CISSP-förberedelse, men den största nyttan uppstår när teorin kopplas till ett faktiskt repo, en faktisk pipeline och verkliga releasebeslut. Domän 8 blir begriplig när begrepp som secure SDLC, SAST, SCA, hotmodellering och programvaruförsörjningskedja syns i teamets dagliga arbete.

En praktisk metod för att omsätta råden

Ett lämpligt sätt att börja är att välja ett begränsat pilotrepo snarare än att införa alla kontroller överallt samtidigt. Teamet kan först dokumentera nuvarande flöde från krav till release, identifiera var säkerhetsbeslut fattas och välja ett fåtal mätetal: antal kritiska fynd före merge, tid till åtgärd för sårbara beroenden, andel releaser med SBOM och antal riskacceptanser med tydlig ägare.

Därefter bör teamet införa en förbättringscykel där kontroller justeras efter faktiska resultat. Om SAST ger för många irrelevanta fynd behöver reglerna trimmas. Om SCA blockerar releaser sent bör kontrollen flyttas tidigare. Om riskacceptanser saknar uppföljning behöver beslutsloggen bli en del av ordinarie riskhantering. Denna typ av iterativt införande ligger nära hur domän 8 bör användas i praktiken: som ett arbetssätt för säkrare programvara, inte som ett separat dokument vid sidan av utvecklingen.

FAQ

Vad ingår i CISSP domän 8?

CISSP domän 8 omfattar säkerhet i mjukvaruutveckling, inklusive säker SDLC, säkra kodningsprinciper, applikationssäkerhetstestning, programvaruförsörjningskedja och säker hantering av anskaffad programvara. Fokus ligger på hur programvara designas, byggs, verifieras och underhålls på ett säkert sätt.

Hur skiljer sig SAST, DAST och SCA?

SAST analyserar källkod eller kompilerad kod utan att applikationen behöver köras. DAST testar en körande applikation och kan hitta beteenden som uppstår i driftliknande miljöer. SCA granskar tredjepartsberoenden och används för att identifiera kända sårbarheter, licensrisker och föråldrade komponenter.

Vilka är de vanligaste säkerhetsbristerna i mjukvaruutveckling?

Vanliga brister är injektionsrisker, svag autentisering, felaktig auktorisering, exponerade hemligheter, känsliga data i loggar, osäkra standardinställningar och föråldrade beroenden. Många av dessa kan minska genom säkra kodmönster, tydliga krav, kodgranskning och kontroller i CI/CD-flödet.

Hur används OWASP ASVS tillsammans med domän 8?

OWASP ASVS kan användas för att göra säkerhetskrav testbara. I stället för att skriva att en applikation ska vara säker kan teamet välja relevanta ASVS-krav och omvandla dem till acceptanskriterier, testfall och granskningspunkter i utvecklingsprocessen.

Vad är ett rimligt första steg för ett team som vill förbättra sin mjukvarusäkerhet?

Ett rimligt första steg är att välja ett aktivt repo och införa några få kontroller med tydlig effekt: branch-skydd, obligatorisk kodgranskning, SCA för beroenden, secrets-skanning och en enkel beslutslogg för accepterad risk. När teamet ser hur kontrollerna påverkar flödet kan arbetssättet förbättras och spridas till fler projekt.

Två personer övervakar system för säkerhetsintrång

Unlimited Security Training

obegränsad tillgång till ALLA LIVE instruktörsledda säkerhetskurser du vill ha - allt till priset av mindre än en kurs.

  • 60+ LIVE instruktörsledda kurser
  • Money-back Garanti
  • Tillgång till 50+ erfarna instruktörer
  • Utbildad 50 000+ IT-proffs

Varukorg

{{item.CourseTitle}}

Pris: {{item.ItemPriceExVatFormatted}} {{item.Currency}}