4.9

Se på engelsk

4.9 Sikker softwareudviklingslivscyklus

Overblik og motivation

De fleste sikkerhedsdefekter er ikke eksotiske. De er almindelige fejl: et manglende autorisationstjek, et input, der blev stolet på, en afhængighed, ingen opdaterede, en hemmelighed indsat i en konfigurationsfil. Det, der gør dem dyre, er, hvornår de bliver fanget. En fejl fundet, mens man skriver et krav, koster en samtale. Den samme fejl fundet i en penetrationstest ugen før lancering koster en panik, og fundet i produktion koster den en hændelse, en offentliggørelse og tab af tillid. Den sikre softwareudviklingslivscyklus (SSDLC) er disciplinen at fange disse fejl tidligt og kontinuerligt ved at bygge sikkerhed ind i hver fase af, hvordan I planlægger, designer, bygger, gennemgår, leverer og driver software, frem for at skrue en sikkerhedstest på til sidst.

Dette kapitel er procesryggen i del 4. Det binder applikationsforsvaret i kapitel 4.2 (hvordan du skriver kode, der modstår angreb) sammen med driftsdisciplinen i kapitel 4.4 (hvordan du opdager og reagerer, når forsvar testes), arver sin tankegang fra kapitel 4.1 (sikkerhedsgrundlag og kultur) og producerer den dokumentation, som kapitel 4.6 (compliance og styring) omsætter til revisionsartefakter. Hvor de kapitler dækker hvad og hvorfor, dækker dette kapitel hvornår og hvordan: på hvilket punkt i jeres leveringsflow hver kontrol hører hjemme, hvem der ejer den, og hvilken port den vogter.

For store teams er gevinsten løftestang. Når hundredvis af ingeniører hver især afgør uafhængigt, hvor meget sikkerhed de gør, sætter det svageste led jeres reelle eksponering. En defineret livscyklus gør den sikre sti til standardstien, så en gennemsnitlig ingeniør leverer rimeligt sikker software uden heltemod. For virksomheder sænker den ensartethed omkostningen ved hver revision og integration. For det offentlige, hvor borgere ikke kan vælge en anden udbyder af deres skatte- eller ydelsesdata, er en dokumenteret livscyklus ofte en juridisk forudsætning for at drive tjenesten, og rammeværkerne i dette kapitel afbildes på den forpligtelse.

Grundprincipper

  • Skift sikkerhed til venstre: find og ret fejl i den billigste fase, som altid er den tidligste.
  • Gør sikkerhed til en egenskab ved pipelinen, ikke en person: automatisér porte, så den sikre sti er den lette sti.
  • Giv hver fase en ejer og en port, fra krav til drift, med klare beståelsesbetingelser.
  • Styr risiko, ikke afkrydsningsfelter: prioritér de fejl, der betyder noget, efter udnyttelighed og konsekvens, og foretræk mange små kontinuerlige tjek frem for én langsom revision til sidst i cyklussen.
  • Behandl afhængigheder og byggesystemer som en del af jeres angrebsflade, for det gør angriberne.
  • Mål programmet, for en livscyklus, I ikke kan måle, er en livscyklus, I ikke kan forbedre.

Anbefalinger

Skift sikkerhed til venstre på tværs af hele livscyklussen

Shift-left-test betyder at flytte verifikation tidligere i leveringsflowet, mod det øjeblik, en beslutning træffes, frem for øjeblikket før udgivelse. Anvendt på sikkerhed omformulerer det målet: I tester ikke sikkerhed ind til sidst, I designer og bygger den ind fra starten og verificerer så kontinuerligt. Økonomien er markant. Et krav omskrevet i en planlægningssession er næsten gratis; en designfejl omarbejdet, efter koden findes, koster dage; en sårbarhed patchet i produktion koster en hændelse. Shift-left har dog en fejlform: at dumpe en bunke sikkerhedsværktøjer på udviklere og kalde det færdigt. Gjort godt parrer det hvert tidligt tjek med støtten til at handle på det, så et fund kommer med kontekst, et rettelsesforslag og en ejer.

Skriv sikkerhedskrav og misbrugstilfælde

Sikkerhed begynder før nogen kode, i hvordan I rammer arbejdet ind. Skriv ved siden af de funktionelle krav, der siger, hvad systemet skal gøre, sikkerhedskrav, der siger, hvad det aldrig må gøre, og hvad det skal garantere: hvilke data der er følsomme, hvem der er autoriseret, hvad der skal logges, hvilke reguleringer der gælder. Suppler så jeres brugerhistorier med misbrugstilfælde og misbrugsscenarier: korte fortællinger om, hvordan en fjendtlig aktør ville forsøge at slå hver funktion. Hvor en brugerhistorie siger “en kunde nulstiller sin adgangskode,” spørger misbrugstilfældet “en angriber nulstiller en andens adgangskode,” og det spørgsmål driver et reelt krav om hastighedsgrænser, tokenudløb og verifikation. Det afdækker hele klasser af fejl, mens de stadig er ord på en skærm. Hold misbrugstilfældene knyttet til historien, så de rejser med ind i design, gennemgang og definition af færdig.

Sæt en trusselsmodelleringsport ind i designet

Trusselsmodellering er den strukturerede praksis at undersøge et design for at finde, hvad der kan gå galt, før I bygger det: at identificere aktiver, kortlægge hvordan data flyder på tværs af tillidsgrænser, opregne trusler og beslutte afbødninger. Det er den sikkerhedsaktivitet med højest løftestang, I kan udføre, fordi den virker på et design, når det stadig er billigt at ændre. Gør den til en let port for enhver funktion, der rører autentificering, følsomme data, penge eller en ny tillidsgrænse, og gå gennem trusselskategorier som spoofing, tampering, repudiation, information disclosure, denial of service og elevation of privilege, en tjekliste kendt under akronymet STRIDE. Hold ceremonien proportional: en session på en time med et whiteboard, et dataflowdiagram og misbrugstilfældene fanger det meste af, hvad et formelt dokument ville. Registrér de fundne trusler, de valgte afbødninger og de bevidst accepterede risici; den registrering bliver designfasedokumentationen for kapitel 4.6 og startkortet for det sikre design i kapitel 4.2. Bind den til væsentlige designændringer, ellers henfalder den til et dokument skrevet én gang og aldrig genbesøgt.

Adoptér standarder for sikker kodning og sikre standarder

Giv ingeniører en konkret standard for sikker kodning for hvert sprog og framework, I bruger: hvordan man parametriserer forespørgsler, hvordan man koder output, hvordan man validerer input, hvordan man håndterer hemmeligheder, hvilket kryptografibibliotek man kalder, og hvilket man aldrig selv ruller. Par den med sikre byggeklodser som standard: fælles biblioteker, der gør det sikre valg til standarden og det usikre svært, så en ingeniør får outputkodning eller parametriserede forespørgsler gratis frem for ved at huske det. Den bedste standard er en, jeres værktøj håndhæver, så overtrædelser fejler et tjek frem for at afhænge af, at en gennemgår lægger mærke til dem. Kurér den mod et velkendt katalog af svagheder, så I dækker de klasser, der faktisk forårsager brud, og beskær regler, der genererer mere støj end værdi.

Gør sikkerhed eksplicit i kodegennemgang

Kodegennemgang (kapitel 2.5) er en naturlig sikkerhedsport, fordi en anden person, der læser ændringen, er godt placeret til at få øje på et manglende autorisationstjek eller et input, der er stolet på. Gør sikkerhedsdimensionen eksplicit frem for at håbe, at gennemgåere husker den: tilføj en kort sikkerhedstjekliste til jeres gennemgangsskabelon, knyttet til de risikable områder inputhåndtering, autorisation, hemmeligheder, kryptografi og afhængighedsændringer. Dirigér ændringer til følsom kode, såsom autentificerings- eller betalingsstier, til gennemgåere med sikkerhedsdybde, og flag disse stier, så routingen er automatisk. Kør automatiserede tjek før menneskelig gennemgang, så gennemgåere bruger deres opmærksomhed på logik og designintention (det kontekstuelle og nye) frem for lintniveaufund, et værktøj allerede fangede.

Placér den rette automatiserede port på det rette punkt i pipelinen

Flere kategorier af sikkerhedsværktøj hører hjemme i jeres pipeline for kontinuerlig integration og levering (kapitel 8.1), og at vide, hvor hver passer, forhindrer jer i at forvente, at ét værktøj gør et andets job. Statisk applikationssikkerhedstest (SAST) analyserer kildekode uden at køre den og fanger fejl som injektion og usikker API-brug ved hver commit. Software composition analysis (SCA) inspicerer jeres tredjeparts- og open source-afhængigheder for kendte sårbarheder og licensproblemer, pipelinens arm af afhængigheds- og forsyningskædestyringen i kapitel 2.18. Scanning efter hemmeligheder leder efter legitimationer, tokens og nøgler ved et uheld committet og hører hjemme både ved commit (via en pre-commit-hook) og i pipelinen som sikkerhedsnet. Scanning af infrastruktur som kode (IaC) tjekker jeres Terraform-, CloudFormation- eller Kubernetes-manifester for usikker konfiguration og fanger en åben lagerspand, mens den stadig er en diff.

Dynamisk applikationssikkerhedstest (DAST) udøver en kørende applikation udefra, som en angriber der undersøger endepunkter, og passer senere mod et udrullet test- eller staging-miljø. Interaktiv applikationssikkerhedstest (IAST) instrumenterer den kørende applikation for at observere den indefra under funktionelle tests og kombinerer statisk indsigt med dynamisk dækning og reducerer falske positiver. Som regel: SAST, SCA, scanning efter hemmeligheder og IaC-scanning lukker porten for buildet; DAST og IAST verificerer det kørende system. Justér hver af dem til at fejle på det, der betyder noget, og advare om resten, for en port, der råber ulv, er en port, teams slår fra.

Indlejr sikkerhedsambassadører i leveringsteams

Et centralt sikkerhedsteam kan ikke gennemgå hver ændring for hundredvis af ingeniører, og en sikkerhedsfunktion, der fungerer som en fjern portvagt, bliver en flaskehals, teams går uden om. Modellen med sikkerhedsambassadører løser dette ved at indlejre en sikkerhedsbevidst ingeniør i hvert leveringsteam: ikke en fuldtidsspecialist, men en udvikler, der får ekstra træning, en direkte linje til det centrale team og eksplicit tid til at løfte sikkerhedsbarren lokalt. Ambassadører kører trusselsmodelleringssessionerne, kuraterer kodestandarden for deres stak, triagerer værktøjsfund og oversætter central politik til deres teams virkelighed og skalerer det centrale teams rækkevidde uden at skalere dets antal lineært. Invester i ambassadørerne med et praksisfællesskab, anerkendelse og reelle timer, ellers henfalder rollen til et navn i et organisationsdiagram.

Forankr programmet i et etableret rammeværk

I behøver ikke opfinde en livscyklus fra bunden, for modne rammeværker koder årtiers læring og giver revisorer et fælles ordforråd. Microsoft Security Development Lifecycle (SDL) er en praksisbaseret model, født af Microsofts egne hårde lektier, der foreskriver konkrete aktiviteter pr. fase. OWASP SAMM (Software Assurance Maturity Model) og BSIMM (Building Security In Maturity Model) er vurderingsmodeller: SAMM er præskriptiv og giver jer et modenhedsmål at bygge mod, mens BSIMM er deskriptiv og fortæller jer, hvad en stor stikprøve af reelle firmaer faktisk gør, så I kan benchmarke. NIST Secure Software Development Framework (SSDF), udgivet som Special Publication 800-218, er et kortfattet sæt udfaldsfokuserede praksisser, der i stigende grad understøtter amerikanske offentlige krav til softwareforsyningskæden. Vælg ét som rygrad frem for at blande alle fire til forvirring. Rammeværket er et kort, ikke terrænet: adoptér de praksisser, der passer til jeres risiko, og registrér hvilke I implementerede, for den registrering er præcis det, kapitel 4.6 og kapitel 10.2 (risiko, revision og assurance) har brug for.

Sæt sikkerhed i definitionen af færdig, og kør udbedring efter SLA’er

En port holder kun, hvis den er en del af, hvad “færdig” betyder. Udvid jeres teams definition af færdig, så en ændring ikke er komplet, før dens sikkerhedsbetingelser er opfyldt: ingen uadresserede scannerfund med høj alvorlighed, en trusselsmodel opdateret, hvis designet ændrede sig, hemmeligheder styret korrekt og afhængigheder uden kendte kritiske sårbarheder. Det gør sikkerhed til et rutinemæssigt acceptkriterium, ikke en særlig begivenhed. For fund, der slipper ud i produktion, så kør en sårbarhedsstyringsproces med eksplicitte udbedrings-serviceniveauaftaler (SLA’er): en maksimal tid til at rette, sat efter alvorlighed, så en kritisk fejl måles i dage og en med lav alvorlighed i et længere, sporet vindue. Prioritér efter reel risiko, og bland alvorlighedsscores med udnyttelighed og eksponering, så I retter den internetvendte udnyttelige fejl før den teoretiske bag tre firewalls. Følg hvert fund til lukning i ét system, og rapportér ældning som enhver anden driftsmåling. En SLA, ingen måler, er et ønske.

Beskyt forsyningskædens integritet fra ende til anden

Angribere retter sig i stigende grad ikke mod jeres kode, men mod den vej, den rejser: en kompromitteret afhængighed, et forgiftet byggetrin, et usigneret artefakt byttet ud under transport. Dette er et forsyningskædeangreb, og at forsvare sig mod det rører flere faser. Generér en softwarestykliste (SBOM), så I ved præcis, hvad der er i hver udgivelse. Fastlås og verificér afhængigheder, og træk dem gennem et kontrolleret internt register frem for direkte fra det offentlige internet. Hærd selve byggesystemet, fordi en byggeserver med brede tilladelser er et højværdimål, og producér signerede, verificerbare artefakter med proveniens, så en forbruger kan bekræfte, at det, de kører, er det, I byggede. Disse berøringspunkter hænger sammen med afhængighedsdisciplinen i kapitel 2.18 og assuranceforpligtelserne i kapitel 10.2. Behandl jeres bygge- og udgivelsespipeline som produktionsinfrastruktur, fordi et brud dér kompromitterer alt nedstrøms på én gang.

Mål programmet, og før resultaterne tilbage

I forbedrer det, I måler. Følg ledende indikatorer, der fortæller jer, om livscyklussen virker: dækning af trusselsmodeller for væsentlige ændringer, procentdelen af pipelines med de forventede porte slået til, gennemsnitlig tid til at udbedre efter alvorlighed, rate af undslupne defekter (fejl fundet i produktion, som en port burde have fanget) og rater af falske positiver, der forudsiger, om teams bliver ved med at stole på et værktøj. Før resultaterne tilbage: undslupne defekter justerer jeres porte, støjende værktøjer justeres eller erstattes, og tilbagevendende fejlklasser driver nye sikre standarder og træning. En livscyklus uden måling driver ind i ceremoni.

Afvejninger: fordele og ulemper

TilgangFordeleUlemper
Shift-left-porte i pipelinenBilligste rettelser; hurtig, kontinuerlig feedbackVærktøjsvildtvækst og alarmtræthed, hvis ujusteret
Trusselsmodelleringsport i designFanger designfejl, mens de er billige at retteKræver færdigheder og tid; henfalder, hvis ikke genbesøgt
Sikkerhedsambassadører indlejret i teamsSkalerer sikkerhed; lokalt ejerskab og kontekstUdvandes, hvis underressourcet eller uanerkendt
Central sikkerhedsportvagtEnsartet barre; klar ansvarlighedBliver en flaskehals, teams går uden om
Rammeværksforankret program (SDL, SAMM, SSDF)Gennemprøvede praksisser; revisionsklart ordforrådRisiko for ceremoni; cargo-kult uden dømmekraft
Strenge udbedrings-SLA’erAfgrænset eksponering; målbar ansvarlighedSpil og afkrydsning, hvis alvorlighed scores forkert
Blokerende porte (fejl buildet)Stærk garanti for, at intet dårligt leveresStandser levering ved falske positiver; pres for at omgå

Den centrale spænding er mellem stringens og flow. Skub for lidt ind i pipelinen, og fejl slipper ud, hvor de er dyre; skub for meget ind, ujusteret, og I enten blokerer leveringen på støj eller træner teams til at klikke forbi advarsler, til portene intet betyder. Løs det ved at justere ubarmhjertigt og ved at afstemme styrken af hver port med den risiko, den vogter: bloker buildet på en lækket legitimation eller en kendt kritisk sårbarhed, men advar blot om et stilfund med lav alvorlighed. Når den gnidning, et team mærker, er proportional med faren, forbliver den sikre sti stien med mindst modstand.

Spørgsmål til drøftelse med dit team

  1. I hvilke faser sker sikkerhed faktisk i vores leveringsflow i dag, og hvor foregiver den kun? De fleste organisationer opdager, at deres reelle sikkerhedsindsats klumper sig sammen til sidst, i en scanning før udgivelse eller en årlig penetrationstest, mens krav-, design- og gennemgangsfaserne kun nævner sikkerhed som ønske. Kortlæg jeres nuværende flow ærligt, fase for fase, og markér, hvor en sikkerhedsaktivitet har en reel ejer og en reel port versus hvor den er en parole. Tag en nylig funktion med og spor, hvilket sikkerhedsarbejde der reelt skete for den, fra dens første krav til dens udrulning. De huller, I finder, er jeres shift-left-backlog, og de faser, der er alt parole og ingen port, er, hvor fejl stille kommer ind i jeres produkt.

  2. Når en scanner rapporterer et fund, hvad sker der så, og kan vi bevise det? Værdien af hver port i dette kapitel afgøres i arbejdsgangen, efter et fund opstår. Gå et reelt eksempel igennem: et SAST- eller SCA-værktøj flager noget, og hvem underrettes så, hvordan vurderes alvorlighed og udnyttelighed, hvad er SLA’en, hvor spores det, og hvordan ved I, at det blev rettet frem for udskudt? Mange teams har imponerende værktøj og intet svar, hvilket betyder, at deres fund hober sig op i en kø, alle har lært at ignorere. Hvis I ikke kan fremlægge, for sidste kvartal, listen over fund og deres tid til udbedring efter alvorlighed, har I en scanningsvane, men ikke et sårbarhedsstyringsprogram, og den forskel er præcis, hvad både en revisor og en angriber vil undersøge.

  3. Hvilket enkelt rammeværk forankrer vores program, og kan hvert team sige, hvad “sikkert færdigt” betyder for deres arbejde? Uden en fælles rygrad improviserer hvert team sin egen definition af sikkert nok, og organisationens reelle holdning bliver gennemsnittet af hundrede private skøn. Beslut sammen, hvilket etableret rammeværk (Microsoft SDL, OWASP SAMM, BSIMM eller NIST SSDF) der er jeres reference, og tjek så, om det valg er nået ned på jorden: kan et leveringsteam fremsige sikkerhedsbetingelserne i deres definition af færdig og pege på den port, der håndhæver hver enkelt? Sammenlign definitionen af færdig fra tre forskellige teams. Konvergens betyder, at livscyklussen er reel; divergens betyder, at I har et rammeværk på et slide og improvisation i pipelines.

  4. Hvilke fund blokerer buildet, hvilke advarer kun, og hvem besluttede, hvor linjen går? Styrken af hver port er et politikvalg, og at få det forkert i begge retninger er dyrt: bloker på støj, og teams lærer at omgå eller deaktivere porte under leveringspres; advar om alt, og kritiske fund glider forbi ulæste. For en stor organisation er faren drift, hvor hvert team stille justerer sine egne tærskler, til “pipelinen er grøn” betyder noget forskelligt i hver gruppe, og jeres reelle eksponering er uigennemskuelig fra centrum. Tag den nuværende bestå/fejl-politik for hvert værktøj, den rate af falske positiver, teams faktisk oplever, og et nyligt eksempel på et fund, der blev tilsidesat, og hvorfor, med. I virksomheds- og offentlige sammenhænge så tilføj, hvem der har autoritet til at acceptere en risiko, og hvor den accept registreres, for en ublokeret kritisk uden navngiven ejer og skriftlig begrundelse er præcis det hul, en revisor vil kritisere, og en angriber vil finde.

  5. Er vores sikkerhedsambassadører en reel evne eller et navn i et organisationsdiagram, og hvad er den ærlige omkostning ved at holde dem reelle? Ambassadørmodellen er, hvordan et lille centralt team når hundredvis af ingeniører, men den fejler stille: rollen tildeles, ingen timer beskyttes, ingen træning kommer, og inden for et kvartal er den en titel, ingen handler på. Det modstridende træk er altid leveringspres, da en ambassadørs sikkerhedstimer er det første, der ofres, når en deadline nærmer sig, så spørgsmålet er, om ledelsen reelt har ringfenced den tid eller blot ønsket den. Tag listen over navngivne ambassadører, de timer de faktisk brugte på sikkerhedsarbejde sidste kvartal, den træning og det fællesskabsstøtte de modtager, og de trusselsmodelleringssessioner de kørte, med. For en stor virksomhed eller et offentligt agentur spredt over mange teams og langlivede systemer er denne evne det, der holder livscyklussen i live mellem revisioner, så behandl underressourcering af den som en beslutning om at lade programmet henfalde frem for en forglemmelse.

  6. Hvis en kritisk sårbarhed landede i en bredt brugt afhængighed i eftermiddag, hvor hurtigt kunne vi finde hver berørt tjeneste og bevise, at vi rettede den? Forsyningskædeeksponering er fejlformen, der forvandler én opstrøms fejl til en organisationsdækkende hændelse, og svaret afhænger helt af fundamenter, I enten byggede tidligere eller ikke: en softwarestykliste (SBOM) pr. udgivelse, fastlåste og verificerede afhængigheder trukket gennem et kontrolleret internt register og et hærdet byggesystem. Spændingen er investering mod hastighed, fordi generering og forespørgsel af SBOM’er og routing af hver afhængighed gennem et register tilføjer gnidning, teams harmes over, til dagen den redder dem. Tag jeres nuværende afhængighedsopgørelse, om I kan forespørge den efter pakke og version på tværs af alle tjenester, tilstanden af jeres byggesystemtilladelser og sidste gang I øvede en hurtig patch, med. For virksomheder og offentlige organer med lovbestemte indberetningspligter og kontraktlige udbedrings-SLA’er er evnen til at besvare “hvilke af vores systemer indeholder denne komponent” på minutter frem for uger forskellen mellem en kontrolleret offentliggørelse og et brud, I hører om i nyhederne.

Sektorperspektiv

Startup. Uden sikkerhedsteam og med lidt runway så byg livscyklussen ind i værktøj frem for headcount: SAST, software composition analysis og scanning efter hemmeligheder på hver pull request, hvor buildet kun fejler på fund med høj alvorlighed, så portene forbliver troværdige. Udpeg én ingeniør som sikkerhedsambassadør og kør en trusselsmodelleringssession på tredive minutter for alt, der rører penge eller personoplysninger. Spring tung dokumentation og formelle rammeværker over for nu, men behold pipelinelogs, for de bliver din revisionsdokumentation i det øjeblik, din første virksomhedskunde beder om SOC 2.

Lille virksomhed. I har ingen sikkerhedsspecialist og et stramt budget, så støt jer til sikre standarder, I køber frem for bygger: et hostet repository, der kører afhængigheds- og hemmelighedsscanning for jer, en administreret pipeline med porte slået til og frameworks med fornuftige standarder. Adoptér en kort, lånt standard for sikker kodning frem for at skrive en, og vælg en let praksis fra et etableret rammeværk i stedet for at opfinde en livscyklus. Foretræk værktøj, der ud af boksen fejler buildet på reel risiko, så sikkerheden holder uden en person til at pleje den dagligt.

Stor virksomhed. I skala på tværs af mange teams er problemet ensartethed og dokumentation: forankr på ét rammeværk, standardisér pipelineportene og indlejr en uddannet sikkerhedsambassadør i hvert leveringsteam forbundet til en central produktsikkerhedsgruppe. Følg udbedrings-SLA’er centralt og rapportér ældning til risikoudvalg, gem trusselsmodeller og scanningsresultater som revisionsartefakter, og dirigér afhængigheder gennem et internt register, der udsender en SBOM pr. udgivelse. Målet er, at en ingeniør, der skifter mellem forretningsenheder, møder de samme porte overalt, og at enhver udgivelse kan spores fra krav til produktion.

Offentlig sektor. Indkøbsregler, åbenhedspligter og offentlig ansvarlighed former hvert valg, og en dokumenteret livscyklus er ofte en juridisk forudsætning for at drive tjenesten. Afstem til et anerkendt rammeværk såsom NIST SSDF og det relevante kontrolkatalog (for eksempel NIST 800-53), der afbildes på jeres authorization-to-operate-krav, gør trusselsmodellering obligatorisk og gennemgået af en uafhængig assurancefunktion, og håndhæv hele pakken af scanningsporte med signerede, proveniensbærende artefakter. Skriv udbedrings-SLA’er ind i kontrakter og hold en uforanderlig registrering af fund og rettelser, fordi embedsmænd arver disse systemer i årtier, og revisionssporet er det, der lader et nyt team drive dem sikkert og stå til regnskab over for offentligheden.

Eksempler

Startup. Et fintech-startup på tyve personer kan ikke bemande et sikkerhedsteam, så det bygger livscyklussen ind i sit værktøj og sine vaner. Hver pull request kører SAST, SCA og scanning efter hemmeligheder, hvor buildet kun fejler på fund med høj alvorlighed, så portene forbliver troværdige. Én ingeniør melder sig frivilligt som sikkerhedsambassadør, kører en trusselsmodelleringssession på tredive minutter for enhver funktion, der rører penge eller personoplysninger, og holder en standard for sikker kodning på én side. Definitionen af færdig inkluderer “ingen uadresserede kritiske fund” og “hemmeligheder i vaulten, ikke i koden.” Da de senere forfølger deres første virksomhedskunde og en SOC 2-revision, er pipelinelogs og udbedringssporeren allerede den dokumentation, de har brug for.

Stor virksomhed. En global bank med tusinder af ingeniører forankrer sit program i NIST SSDF, måler modenhed med OWASP SAMM og benchmarker mod sammenlignelige firmaer med BSIMM. Hvert leveringsteam har en uddannet sikkerhedsambassadør forbundet til en central produktsikkerhedsgruppe. Trusselsmodellering er en påkrævet port for enhver ændring, der krydser en tillidsgrænse, med dens output gemt som revisionsdokumentation. Pipelinen håndhæver SAST, SCA, IaC-scanning og scanning efter hemmeligheder på buildet, med DAST mod staging, og afhængigheder flyder kun gennem et internt register, der producerer en SBOM pr. udgivelse. Udbedrings-SLA’er følges centralt og rapporteres til risikoudvalg, så en ingeniør, der skifter mellem forretningsenheder, finder de samme porte, og revisorer kan spore enhver udgivelse fra krav til produktion.

Offentlig sektor. En national skattemyndighed opererer under lovbestemte sikkerhedsforpligtelser og kan ikke levere software, der ikke har bestået en defineret livscyklus. Den afstemmer sine praksisser til NIST SSDF og NIST 800-53-kontroller, der afbildes på dens authorization-to-operate-krav. Sikkerhedskrav og misbrugstilfælde skrives for hver borgervendt tjeneste, trusselsmodeller er obligatoriske og gennemgås af en uafhængig assurancefunktion (kapitel 10.2), og hver pipeline håndhæver hele pakken af scanningsporte med signerede, proveniensbærende artefakter. Udbedrings-SLA’er er kontraktlige, og en uforanderlig registrering af fund og rettelser understøtter de revisioner, der autoriserer fortsat drift. Fordi embedsmænd arver disse systemer i årtier, lader den dokumenterede livscyklus et nyt team vedligeholde en tjeneste sikkert længe efter, at dens forfattere er gået videre.

Business case: motivation, ROI og TCO

Afkastet af en sikker livscyklus er omkostningen ved de brud, hændelser og nødomarbejdninger, den forebygger, minus den beskedne, for det meste engangsomkostning ved at bygge portene. Økonomien peger alle samme vej: jo tidligere en fejl fanges, desto billigere er den. En designfejl fanget i en trusselsmodel er en whiteboardsamtale; den samme fejl fanget i produktion er en hændelse med offentliggørelse, udbedring, regulatorisk eksponering og omdømmeskade hængt på. Fordi de automatiserede porte er genbrugelig infrastruktur, betales deres omkostning én gang og amortiseres over hver fremtidig ændring, mens de hændelser, de forebygger, hver især ville have kostet langt mere end hele programmet.

De totale ejeromkostninger domineres ikke af værktøjslicenser, men af justering og arbejdsgang. En ujusteret livscyklus, der oversvømmer teams med falske positiver, spilder ingeniøropmærksomhed, avler ignorerede alarmer og ender i deaktiverede porte, hvilket er værre end intet program, fordi det fremstiller falsk tillid. Budgettér den menneskelige side: ambassadørers tid, triagearbejdsgang og løbende justering. For at føre sagen over for ledelsen så bind livscyklussen til målinger, de allerede følger: rate af undslupne defekter, gennemsnitlig tid til udbedring, revisionsfund og den cyklustidsomkostning, sene sikkerhedsoverraskelser medfører. I regulerede og offentlige sammenhænge er en dokumenteret, håndhævet livscyklus ofte en forudsætning for overhovedet at drive tjenesten og forvandler sikkerhed fra et omkostningscenter til en tilladelse til at drive forretning.

Anti-mønstre og faldgruber

  • Sikkerhedsteater til sidst: en enkelt scanning før udgivelse eller en årlig pentest, der står i stedet for en livscyklus, så fejl findes, når de er dyrest.
  • Værktøjsvildtvækst uden arbejdsgang: at købe SAST, DAST og SCA, men ikke have nogen ejer, SLA eller triage, så fund hober sig op i en kø, alle ignorerer.
  • Alarmtræthed fra ujusterede porte: støjende værktøjer, der flager alt og træner ingeniører til at klikke forbi advarsler, til portene intet betyder.
  • Portvagtsflaskehals: et centralt team, der skal godkende hver ændring og bliver en kø, teams går uden om eller harmes over.
  • Ambassadører kun af navn: rollen tildelt, men uden træning, tid eller anerkendelse, så den henfalder til en tom titel.
  • Trusselsmodel én gang, aldrig igen: et designfasedokument skrevet ved kickoff og aldrig genbesøgt, efterhånden som designet ændrer sig.
  • Cargo-kult-rammeværker: at adoptere SDL- eller SSDF-aktiviteter som ritual uden at tilpasse dem til reel risiko eller tjekke, at de ændrer udfald.
  • Uadministreret forsyningskæde: at trække afhængigheder direkte fra det offentlige internet, ufastlåste og ikke-verificerede, uden SBOM og med et overprivilegeret byggesystem.
  • SLA’er på papir: udbedringsfrister, ingen måler, så kritiske fund stille ældes forbi deres formodede frist.

Modenhedsmodel

  • Niveau 1, Opstart: Sikkerhed er et sent tilføjet element og stort set reaktiv. Test sker nær udgivelsen, hvis overhovedet, der er ingen trusselsmodellering, scanning er manuel eller fraværende, fund håndteres ad hoc, og forsyningskæden er uadministreret. Om en given funktion er sikker, afhænger helt af, hvem der skrev den.
  • Niveau 2, Udvikling: Grundlæggende praksis dukker op, men lander ujævnt. Nogle pipelines kører SAST eller SCA og scanning efter hemmeligheder, kodegennemgang nævner sikkerhed, og kritiske fund bliver rettet, men dækningen er pletvis, trusselsmodellering er sjælden, udbedring mangler sporede SLA’er, og hvert team improviserer sin egen tilgang, så barren varierer vidt mellem grupper.
  • Niveau 3, Standardisering: En dokumenteret livscyklus forankret i et etableret rammeværk er håndhævet i hele organisationen. Sikkerhedskrav og misbrugstilfælde, en trusselsmodelleringsport, standarder for sikker kodning, hele pakken af pipelineporte, sikkerhed i definitionen af færdig, sporede udbedrings-SLA’er, sikkerhedsambassadører og forsyningskædekontroller er standard på tværs af teams, så en ingeniør møder de samme forventninger, uanset hvor vedkommende arbejder.
  • Niveau 4, Styring: Programmet måles og styres mod baselines. Ledende indikatorer følges og rapporteres: dækning af trusselsmodeller for væsentlige ændringer, procentdelen af pipelines med de forventede porte slået til, gennemsnitlig tid til udbedring efter alvorlighed mod SLA, rate af undslupne defekter og rater af falske positiver pr. værktøj. Mål sættes, afvigelser udløser handling, og go/no-go-beslutninger hviler på dokumentation frem for mening, så ledelsen kan se, om livscyklussen faktisk holder, frem for at antage det.
  • Niveau 5, Orkestrering: Programmet forbedres og tilpasses løbende, integreret på tværs af organisationen. Undslupne defekter justerer portene, støjende værktøjer beskæres, tilbagevendende fejlklasser driver nye sikre standarder og træning, ambassadører danner et aktivt fællesskab, forsyningskædeproveniens verificeres fra ende til anden, og sikkerhedsplanlægning er vævet ind i levering og risikostyring, så livscyklussen genbalancerer sig selv, efterhånden som trusselsbilledet og forretningen skifter.

Idéer til drøftelse

  1. Hvilken fase af jeres livscyklus er svagest i dag, og hvad ville der skulle til for at tilføje en reel port dér frem for en parole?
  2. Hvis en kritisk sårbarhed i en afhængighed blev offentliggjort i eftermiddag, hvor lang tid går der, før hver berørt tjeneste er patchet, og hvordan ved I det?
  3. Hvor går linjen mellem en port, der blokerer buildet, og en port, der kun advarer, og hvem afgør, hvilke fund der sidder på hvilken side?
  4. Får jeres sikkerhedsambassadører reelle timer og anerkendelse, eller er rollen en titel, der stille henfalder?
  5. Kunne I fremlægge for en revisor trusselsmodellerne og scanningsresultaterne for en udgivelse, I leverede sidste måned?
  6. Hvilken ene måling ville, hvis I begyndte at følge den næste sprint, mest ændre, hvordan jeres teams faktisk opfører sig omkring sikkerhed?

Vigtigste pointer

  • Den sikre softwareudviklingslivscyklus bygger og verificerer sikkerhed i hver fase og skifter fejl til venstre, hvor de er billigst at rette, og den er procesryggen, der forbinder applikationssikkerhed (kapitel 4.2) med sikkerhedsdrift (kapitel 4.4).
  • Giv hver fase en ejer og en port: sikkerhedskrav og misbrugstilfælde, en trusselsmodelleringsport i design, standarder for sikker kodning, sikkerhed i kodegennemgang og sikkerhed i definitionen af færdig.
  • Placér hvert automatiseret værktøj, hvor det passer: SAST, SCA, scanning efter hemmeligheder og IaC-scanning lukker porten for buildet, mens DAST og IAST verificerer det kørende system, og justér hver port, så den fejler på det, der betyder noget, og ikke råber ulv.
  • Skalér programmet med sikkerhedsambassadører indlejret i teams, forankr det i et etableret rammeværk (Microsoft SDL, OWASP SAMM, BSIMM eller NIST SSDF), og kør udbedring efter eksplicitte, målte SLA’er.
  • Forsvar forsyningskæden fra ende til anden med SBOM’er, verificerede afhængigheder og et hærdet byggesystem, og mål hele programmet, så det bliver ved med at forbedres i stedet for at henfalde til ceremoni.

Referencer og videre læsning

  • Michael Howard and Steve Lipner, The Security Development Lifecycle
  • Adam Shostack, Threat Modelling: Designing for Security
  • Gary McGraw, Software Security: Building Security In
  • National Institute of Standards and Technology, Secure Software Development Framework (SSDF), Special Publication 800-218
  • OWASP Foundation, Software Assurance Maturity Model (SAMM)
  • Synopsys, Building Security In Maturity Model (BSIMM)
  • OWASP Foundation, OWASP Application Security Verification Standard (ASVS)
  • Laura Bell, Michael Brunton-Spall, Rich Smith, and Jim Bird, Agile Application Security