Sjekklisten for sikkerhet
Sikkerhet handler ikke bare om tekniske tiltak og kodeskanning, men også mye annet. Denne sjekklisten gir et utgangspunkt for å vurdere sikkerhetsnivå, ansvar og risiko i leveranser, og alle utviklingsteam skal ha et forhold til innholdet med mindre annet er avtalt med kunden.
Det er ikke gitt at alle punktene er relevante i alle prosjekter, eller at innføring av alle tiltak er ønskelig. Hvert enkelt team og leveranseansvarlig må selv vurdere kost/nytte og hvilket ansvar og risiko en påtar seg ved å ikke innføre tiltak. Sikkerhet krever kontinuerlig arbeid, så se over sjekklista jevnlig for å se om det er tiltak som kan eller bør innføres slik at en ikke overser noe.
Last ned sjekklisten og implementer den som en del av kildekoden i ditt prosjekt!
Planlegge
- Ansvarsfordeling: Er det klart hvilket ansvar vi har i leveransen og er øvrig ansvar klart fordelt? Er det risiko for at det kan oppstå forvirring rundt ansvar i fremtiden, eksempelvis i forbindelse med sikkerhetshendelser?
- Dersom Bouvet hoster løsningen på vegne av kunde, faller den inn under vår sertifisering på ISO 27001.
- Dette betyr at leveranseteamet har en del ekstra ansvar for informasjonssikkerheten. Referer til SOA for videre informasjon.
- Dersom vi drifter; hvilket ansvar har vi for infrastruktur og evt infrastruktur som kode (IAC)?
- Dersom andre drifter, hvordan overleveres applikasjonen til disse?
- Har vi en klar ansvarsfordeling mellom oss og andre?
- Klassifisering og data
- Er applikasjonen vurdert mtp klassifisering av data? Hvilke krav følger av klassifiseringen:
- Er det klart om, og hvorvidt personopplysninger behandles i applikasjonen?
- Hvordan håndteres testdata i prosjektet?
- Hvordan anonymiseres eller ivaretas eventuelle hensyn til sensitivitet og personvern?
- Backup, disaster recovery og business continuity planning
- Er det lagt en plan for hvordan og hvor ofte backup skal tas?
- Husk også på backup av kildekodesystemer og andre relevante verktøy!
- Hvordan sikres sensitive data ifm backup, herunder også sletting av data?
- Er det definert en SLA for applikasjonen?
- Hvilke forventninger har kunden og har vi rigget oss riktig for å møte disse?
- Ved en hendelse, har vi avklart hvem som skal kontaktes i Bouvet og hos kunden?
- Er det definert en plan for disaster recovery?
- Har teamet dokumentert og eventuelt testet hvordan applikasjonen kan gjøres tilgjengelig vet plutselige hendelser, eksempelvis ved bortfall av datasenter hos oss eller eksterne leverandører, også inkludert skyleverandører?
- Dersom applikasjonen blir utilgjengelig i kortere eller lengre perioder, hvilke følger får dette for oss og kunden?
- Finnes det alternativer eller workarounds for løsningen?
- Er disse dokumentert og beskrevet, også med tanke på eventuelt ekstraarbeid som må gjøres etter at løsningen bli tilgjengelig igjen?
- Er det andre konsekvenser for oss eller kunde som må hensynstas?
- Er det lagt en plan for hvordan og hvor ofte backup skal tas?
- Har teamet definert hvilke verktøy som skal brukes og hvordan disse skal håndteres?
- Er kildekodesystemer satt opp med fornuftige policyer?
- Dette kan være beskyttet mainbranch, spesifikk branching strategi, code review ifm PR, dokumentering av endringer?
- Pipelines brukt i forbindelse med bygging, deployment, testing og annet?
- Har vi kontroll på hvor data og kildekode lagres?
- Noen selskaper har restriksjoner på hvor data kan oppbevares, eksempelvis kun på innenlands datasentre, innenfor EU eller i land dekket av samarbeidsavtaler.
- Er kildekodesystemer satt opp med fornuftige policyer?
- Hvilke kontrollmekanismer skal vi ha underveis i prosjektet?
- Ved designendringer
- Når vi comitter kodeendringer
- I pull requests
- Ved bygg og deployment
- Andre?
Designe
- Er det klart hvilke sikkerhetskrav som gjelder for løsningen?
- Standardkrav
- Kundekrav
- Lovpålagte krav
- Er følgende systemskisser og diagrammer laget?
- Dette er viktig dokumentasjon for å vurdere risiko og mulige trusler som kan påvirke løsningen, og også i forbindelse med onboarding av teammedlemmer eller handover.
- Overordnet systemskisse med de viktigste logiske komponentene
- Detaljert nettverksskisse med ressurser, tjenester og nettverk
- Dataflytdiagram
- IAM-diagram
- Viktigste avhengigheter – andre systemer, tjenester, ressurser, onprem/cloud
- Hvordan skal segregering av miljøer håndteres?
- Hvordan håndteres autentisering og autorisering?
- Er det gjennomført trusselmodellering av løsningen? Har teamet rutiner for
- Jevnlig oppdatering av trusselmodell
- Oppfølging av funn
- Mitigering av risiko?
- Er det klart hvem som eier risiko og ansvar - hvilken risiko kan aksepteres?
- Dersom den totale risikoen overgår en gitt grense bør teamet vurdere en dedikert periode for å ta ned risiko til akseptabelt nivå.
- Hva er behovet for kompetanseheving innad i teamet, og er det laget en plan for hvordan dette skal håndteres?
Utvikle
- Er utviklingsmiljøene godt beskrevet?
- Brukes dedikerte devservere/devbokser, laptoper, annet?
- Har teamet et kontaktpunkt inn mot leverandøren av disse?
- Er oppsett godt dokumentert, slik at en unngår feil eller svakheter pga feilkonfigurering?
- Gjelder både utviklingsmiljø og kjøremiljø.
- Brukes dedikerte devservere/devbokser, laptoper, annet?
- Hvordan håndteres secrets, nøkler, connection strings og liknende?
- Skannes kildekoden for disse?
- Roteres secrets med jevnlige intervall?
- Har teamet sjekket at kryptografiske nøkler og hashalgoritmer følger gjeldende best-practice?
- Hvordan valideres data som hentes fra andre systemer?
- Har teamet innført noen rutiner som sikrer mot vanlige angrepstyper, f.eks. som beskrevet i OWASP Top 10?
- Hvordan vurderer og sikrer teamet seg mot software supply-chain-attacks?
- Gjøres det noen vurderinger ift å bruke en avhengighet vs å lage selv?
- Krever applikasjonen tredjepartssoftware som teamet selv må drifte? F.eks. webservere, meldingstjenester, andre typer serverkomponenter?
- Har teamet en rutine for å holde disse oppdatert?
- Inkluderes disse i eventuelle trusselvurderinger?
- Har teamet en rutine for sikkerhetstesting, eller valideres dette på annet vis?
- SAST
- DAST
- Hvordan håndterer teamet dokumentasjon?
- Hva dokumenteres utover det grunnleggende i denne sjekklista?
- Hvor oppbevares dokumentasjonen?
- Har teamet en rutine for å holde dokumentasjon oppdatert?
Deploye
- Hvordan utføres bygging og deployment av løsningen?
- Ved bruk av pipelines, er disse underlagt samme regime som applikasjonskoden mtp endringshåndtering?
- Har teamet et forhold til sikring av byggmiljø?
- Kjøres det review i forkant av deployment?
- Er det planlagt for penetrasjonstesting i forbindelse med deployment?
Forvalte
- Har teamet verifisert at nettverksdiagrammet er korrekt implementert?
- At forventede porter er åpne mot angitte IP-addresser
- At det ikke er uventede eller unødvendige porter eller tjenester som eksponeres?
- At trafikk filtreres korrekt av brannmur inn mot løsningen?
- Dersom kunde eller andre krever audit av løsningen, har teamet planlagt for hvordan dette kan foregå?
- Slik testing bør kunne gjennomføres på reelle data, men gjerne i et eget isolert miljø.
- Logging er viktig dersom en hendelse oppstår. Har teamet kontroll på
- at en logger nok informasjon til å detektere hendelser – NB: Husk GDPR
- at loggene ikke lagres i et miljø en angriper kan manipulere
- sikkerhetsrelaterte hendelser
- andre uventede hendelser
- for relevante funn, vet teamet hvem de skal eskalere til - sikkerhet- eller driftsteam hos Bouvet, kunde eller liknende?
- Har vi en rutine som sikrer at avhengigheter holdes oppdatert, og at teamet vet og forstår sårbarheter som avdekkes i disse? Dette påvirker trusselmodellen samt residuell risiko, og kan tvinge frem aksjoner for å ta ned risiko.
- Har teamet en rutine for å sjekke at backups blir tatt, og testet at en faktisk er i stand til å restore ved behov?
- Gjelder også offline/offsite backups.
- Har teamet en prosedyre for hendelseshåndtering og en beredskapsplan dersom løsningen angripes eller går ned, og har denne blitt testet ut internt i teamet eller med kunde?