Når løsningen er designet, utviklet og deployet starter en annen jobb som for mange kanskje er litt fremmed: Forvaltning. Uavhengig av hvor mye utvikling som skjer, har vi likevel et ansvar for å forvalte det vi ruller ut i produksjon (eller til andre miljøer).
Disse må monitoreres, vi må sikre at vi har jevnlige backups som også må testes, at vi har oppdaterte planer for disaster recovery, følger opp sårbare avhengigheter og mye annet.
1 - Verifiser designet
Når vi utvikler en løsning bør vi alltid validere at løsningen er i henhold til designet. Dersom den avviker må vi enten korrigere løsningen eller oppdatere designet.
Når vi lager et design for en ny løsning hender det at det er detaljer vi ikke kjenner, eller at det oppstår uventede komplikasjoner underveis i implementeringen. Dette kan resultere i at designet vi opprinnelig laget avviker fra den ferdige løsningen.
Dokumentasjonen er viktig for å forstå hvordan en løsning er satt opp og hvordan den fungerer, spesielt om det oppstår en hendelse som krever redeployment eller disaster recovery. For å sikre at gapet mellom dokumentasjon og ferdig produkt ikke er for stort bør vi derfor alltid validere designet i etterkant.
Hva bør vi sjekke?
Noe av det viktigste er alt rundt som ikke nødvendigvis kommer i kodeform. Hvilke ressurser vi bruker, nettverksoppsett og brannmuråpninger er grunnleggende, men vi bør også se på IAM og hvilke tilganger som er gitt til ressurser og applikasjon.
Når designet verifiseres i forvaltningsfasen, bør teamet som minimum sjekke:
at implementerte komponenter faktisk matcher systemskisser
at kravene i sikkerhetskrav er dekket i løsning og drift
at nettverk, identiteter, roller og tilgangsregler er i tråd med design
at avhengigheter (interne og eksterne) er dokumentert og fortsatt gyldige
at teamet har en rutine for å vedlikeholde design sammen med applikasjonen
Dersom det er elementer i designet som ikke er implementert bør disse fjernes fra dokumentasjonen. Dersom vi har implementert elementer som ikke er i designet må designet oppdateres, eller elementene fjernes fra løsningen.
Har kunden valgt bort et anbefalt tiltak eller en tilleggstjeneste, er det ikke et avvik som skal skjules. Dokumenter valget og restrisikoen det gir. Det er nødvendig både for forventningsstyring og for at noen senere skal kunne forklare hvorfor løsningen ser ut som den gjør.
Krav -> design -> implementasjon
For å gjøre verifisering etterprøvbar bør teamet bruke en enkel sporbarhetsmatrise:
Dette gjør det enklere å dokumentere at krav faktisk er realisert, og gir et tydelig grunnlag for revisjon, overlevering og hendelseshåndtering.
Eksempler på hvordan dette kan demonstreres kan være:
IaC-konfigurasjon og policy-definisjoner
skjermbilder/eksport fra skyplattform som viser faktisk oppsett
testresultater fra sikkerhetstesting
logger som bekrefter at kontroller er aktive
Verifisering av AI-systemer
For løsninger med AI-komponenter må verifiseringen utvides utover klassisk infrastruktur og applikasjonsdesign.
Teamet bør verifisere:
at AI-krav er koblet til konkrete designvalg og implementerte kontroller
at trenings-/evalueringsdata, modeller og versjoner er dokumentert
at tilgang til modell, data og driftsgrensesnitt følger minste privilegium
at logging og monitorering dekker AI-relaterte hendelser og avvik
Dette støtter kontrollområder som “AI system verification and validation” og “Documentation of AI system design and development”.
Verifiser evalueringsresultater
For AI-løsninger er det ikke nok å verifisere at tjenesten svarer. Teamet må også verifisere at modellens resultater fortsatt er innenfor aksepterte rammer.
Minimum bør være på plass:
definerte akseptansekriterier for kvalitet (f.eks. presisjon, recall eller domene-spesifikke mål)
dokumenterte testsett og evalueringsmetode
sammenligning mot tidligere baseline ved modell- eller dataskifte
tydelig beslutning om godkjenning eller avvisning av ny versjon
Ved avvik må teamet dokumentere tiltak og eventuell risikovurdering før videre produksjonsbruk.
Dokumentasjon og sporbarhet
I praksis bør dokumentasjonen gjøre det mulig å svare på:
hvilket krav som ligger bak et gitt designvalg
hvilken versjon av modell/prompt/policy som er i drift
hvem som godkjente endringen og på hvilket grunnlag
hvilken evidens som viser at kontrollene virker
Sporbar dokumentasjon reduserer feilsøkingstid ved hendelser, og gjør re-verifisering enklere ved større endringer.
Se også:
Dokumentasjon for minimumskrav til innhold og sporbarhet
Dette avhenger veldig av form og farge på prosjektet, men i mange tilfeller vil IT-organisasjonen hos kunden (for prosjekter hostet hos kunde) kunne hjelpe. Dersom løsningen kjører hos Bouvet vil helt sikkert Intern IT & Sikkerhet kunne være behjelpelige på å sjekke ting som nettverkskonfigurasjoner og liknende, eventuelt peke deg i riktig retning. Det er mye du kan gjøre selv også, men sjekk med Intern IT & Sikkerhet før du installerer verktøy og kjører scans eller liknende.
Et praktisk minimum er å gjennomføre verifisering:
ved større endringer i arkitektur eller avhengigheter
før produksjonssetting av nye risikofylte endringer
som del av fast forvaltningsrytme (for eksempel kvartalsvis)
Når en løsning er i drift er logging et av de viktigste verktøyene vi har. Innsamling av informasjon er kritisk for å kunne få innblikk i hva som skjer med løsningen og agere på hendelser, men bare om vi monitorerer.
Uavhengig av hvor en løsning deployeres bør vi sikre at den monitoreres. Selv om den eksempelvis kun skal være tilgjengelig på intranettet der det kun finnes interne brukere som jobber fra godkjente enheter over vpn, er det viktig med logging av informasjon dersom en av disse kompromitteres. Et typisk DevOps-team vil samle inn en del informasjon for å hjelpe til med feilsøking av funksjonaliteten i applikasjonen, men vi trenger også en del annen informasjon for å kunne si noe om sikkerhetsbildet rundt den.
Husk
Uavhengig av behov, husk at personvern gjelder for logger også! Ikke samle inn mer informasjon enn det du trenger, og husk på at logger må kunne slettes etter en gitt periode.
Målet med loggingen vil ha tre primære hensikter:
Avviksdeteksjon - Vi må være i stand til å kunne oppdage unormal eller mistenkelig aktivitet, eksempelvis om noen angriper eller forsøker å utnytte systemet
Etterforskningsgrunnlag - Vi må ha nok informasjon til å forstå hva som har skjedd, hvordan det skjedde og hvem som gjorde det
Tilfredsstille krav fra kunde eller eksterne som eksempelvis myndighetene
Hva bør vi logge?
Hva vi logger vil variere veldig ut ifra hvem kunden er, risiko- og trusselbildet denne opererer i og hvilke behov de har for logginformasjon. I noen tilfeller vil kunden ha en egen sikkerhetsorganisasjon, typisk et Security Operations Center (SOC) som er ansvarlig for å monitorere nettverk og applikasjoner. Disse vil da ha krav til hva en logger og hvordan, men dersom dette ikke finnes må vi definere noen egne krav for å ha et utgangspunkt.
Under finner du noen punkter som bør være et absolutt minimum, men teamet må ha et forhold til hva som logges og hvorfor det logges, og hvordan denne informasjonen forholder seg til andre krav som eksempelvis personvern.
Autentiseringer og mislykkede autentiseringsforsøk
Dersom noen logger seg på løsningen, bør dette logges. Dette er spesielt viktig dersom det skjer fra et sted en bruker normalt ikke logger seg på, eller dersom det skjer med en annen nettleser eller klient enn det man vanligvis ser.
Mislykkede pålogginger må også logges slik at det er mulig å agere på det.
Feil under validering av JWT eller andre session-relaterte feil bør også logges slik at dette kan gås opp i etterkant.
Manglende autorisering, endring av tilganger
Hendelser der brukere forsøker å få tilgang til funksjonalitet de normalt ikke er autorisert for er viktige signaler som må fanges opp. Dette kan være så enkelt som at en bruker fanger opp eller får en URL fra en kollega som de tester ut selv, men det kan også være en angriper som forsøker å kartlegge eller teste en applikasjon. Uavhengig av årsak er det viktig informasjon som må tas vare på - dersom det senere oppstår en hendelse er det viktig å kunne si noe om bevegelsesmønstre og liknende i forkant av denne.
Dersom applikasjonen har støtte for elevering av, eller endring av tilganger er dette også typiske ting som må logges. Elevering er en mekanisme der en bruker gis ekstra tilganger, men der disse må “skrus på” før de er tilgjengenlige - gjerne da med et ekstra nivå med autentisering som MFA eller liknende. Eksempler på slike mekanismer er sudo i Linux eller Privileged Identity Management (PIM) i Azure. Når disse aktiveres er det viktig at loggene reflekterer dette ettersom feil eller svakheter i disse løsningene vil være kritiske for sikkerheten i applikasjonen.
Applikasjonsfeil, nettverksfeil og liknende
Dersom det oppstår feil i applikasjonen bør dette også logges. Vi bør aldri gi brukeren mer informasjon enn absolutt nødvendig, men detaljene bør være med i loggene slik at det er mulig å monitorere eller se på dette i etterkant.
Dersom applikasjonen har et forhold til nettverk, eksempelvis gjennom at den monitorerer nettverksforbindelser, forbindelsen til andre ressurser eller liknende bør forstyrrelser eller utfall her også logges da det kan være viktige indikatorer.
Logging av uventede inputs
Alle applikasjoner har inputs som kan beskrives, selv fritekstinput der brukeren kan legge inn hva som helst. Input som bryter valideringsregler eller tilfeller der en bruker forsøker å endre informasjon som normalt ikke skal kunne endres er typiske tilfeller som må logges.
Dersom applikasjonen støtter filopplasting eller liknende bør avvik fra forventede filer som eksempelvis avvik mellom filtype og filsignatur eller unormalt store eller små filer logges.
Logging og monitorering av KI-responser
Logging og monitorering for KI‑løsninger bør designes som en løpende drifts- og styringsmekanisme som gjør det mulig å oppdage feil, avvik og sikkerhetshendelser, samt dokumentere at løsningen fortsatt fungerer som forutsatt i produksjon.
System‑ og ytelseslogger (f.eks. feilrater, responstid/latens, tilgjengelighet og tjenestekvalitet) bør samles ett sted, slik at det er mulig å konfigurere alarmer eller annen varsling ved uventede hendelser. Modell-/funksjonsytelse bør også overvåkes med tydelige måleparametere (f.eks. suksessrate på oppgaver, kvalitets-/konfidensmål der det er relevant), inkludert varsling ved uventet endring i adferd eller degradering over tid.
Loggene bør støtte prinsippene øverst i artikkelen, og bør inngå i prosessen for håndtering av oppdateringer og endringer i applikasjonen. Overvåkingen bør også dekke etterlevelse og kunde/andre krav, samt ha en etablert supportkanal slik at brukere kan rapportere feil, uventede resultater eller misbruk, og slik at organisasjonen kan vurdere om systemet brukes utenfor tiltenkt formål.
Hvordan logger vi?
Hvordan vi logger vil også variere fra prosjekt til prosjekt, hvilken platform vi kjører på og hvilke ressurser vi har lov til å bruke. Et viktig moment vi må ha i bakhodet når vi designer loggeløsningen er at loggene er et angrepsmål! En angriper som kan utnytte sårbarheter og deretter manipulere loggene kan både skjule aktivitet og plante falske spor.
Alle loggene vi har bør lagres et sted der data kan legges til men ikke endres i etterkant. Fordelen med å bruke slike løsninger er at du kan samle logger fra mange ulike kilder som eksempelvis skyressurser, nettverkskomponenter og applikasjoner på ett sted. Dette kan gi deg innsikt i flere ulike dimensjoner når du ser på en hendelse som vil kunne være nyttig for å forstå helheten i det som skjer.
Tidsstempling og loggeformat
Å kunne fastslå rekkefølgen på hendelser er utrolig viktig. Vi må derfor forstå hva de ulike loggkildene bruker som basis for å synkronisere klokker internt for å vite sikkert at en hendelse som skjedde på node A henger sammen med en annen hendelse to sekunder etter på node B.
Det er også viktig å standardisere på loggformatene der dette er mulig. Mye logging er sentrert rundt selve loggmeldingen som typisk er tekstbasert, men alt av metadata rundt bør standardiseres der dette er mulig. Definer hva dere trenger å se, og sørg så for at dette er tilgjengelig fra de ulike kildene.
Status på avhengighetene vi har vil endre seg over tid, og det er ikke til å unngå at svakheter oppdages som må mitigeres av oss. Denne jobben kan være så enkel som at vi oppdaterer til en ny versjon, men kan også kreve større endringer i applikasjonen.
Når teamet er i forvaltningsmodus gjelder fremdeles de fleste problemstillingene nevnt i artikkelen om Forsyningskjedesikkerhet. Dere vil komme i situasjoner der
det oppdages en kritisk sårbarhet i en pakke dere bruker
pakker deprekeres og erstattes med noe nytt som ikke er direkte kompatibelt med det gamle
utviklere bak pakker slutter å vedlikeholde pakkene
ondsinnede aktører overtar en pakke og bruker den for å spre malware
….og helt sikkert andre varianter som resulterer i at dere må gjøre noe. For å sikre at pakker som treffer ett eller flere av punktene over tas tak i. Verktøy som Sonatype og andre gir muligheten til å overvåke ulike steg i livssyklusen, med mulighet til å varsle når sårbarheter eller andre hendelser som påvirker kvaliteten inntreffer.
Bruk av CDN
Content-delivery-networks for å distribuere Javascript-bibliotek har blitt brukt av mange som en enkel måte å inkludere disse i koden uten å måtte inkludere dette i build eller deploy-prosessen. Tanken er god, men du får da en direkte avhengighet til en kilde du ikke har noen kontroll på som kan misbrukes til å spre malware.
Interne speil og fork av kritiske avhengigheter
For spesielt kritiske avhengigheter kan det være riktig å hoste artefakter i interne registre eller bruke fork av pakker, actions og andre byggkomponenter. Dette reduserer eksponering mot hendelser hos tredjepart, men øker samtidig forvaltningsansvaret internt.
Dette bør brukes selektivt, typisk når avhengigheten er forretningskritisk, har høy påvirkning ved kompromittering, og teamet faktisk har kapasitet til å forvalte den over tid.
Hvis dere velger denne tilnærmingen, bør dere minimum ha:
tydelig eierskap for vedlikehold, patching og oppdateringsfrekvens
rutiner for å hente inn og verifisere nye upstream-versjoner
sporbarhet på hva som er intern kopi/fork, og hva som er original kilde
samme krav til skanning, lisenskontroll og review som for øvrige avhengigheter
Interne komponenter som teamet drifter selv
Forvaltning handler ikke bare om pakker fra eksterne økosystemer. Mange team drifter også interne komponenter som applikasjonsservere, integrasjonstjenester, containere eller virtuelle maskiner. Disse må inngå i samme forvaltningsrutine som resten av løsningen.
Oppdatering og støtte
Interne komponenter må holdes oppdatert med en planlagt patchrutine. Følg leverandørens release-notater og vurder hva som faktisk må oppgraderes nå, og hva som kan planlegges inn senere. Komponenter som ikke lenger er supportert bør fases ut.
Sikkerhetskontroller rundt komponentene
Komponentene må være en del av helhetlig sikkerhetsdesign. Teamet bør ha oversikt over nettverksflater, identiteter/roller og eksponering internt og eksternt. Bruk prinsippet “deny by default”: åpne kun eksplisitt for det som faktisk trengs.
Logging og monitorering
Interne komponenter må monitoreres på linje med øvrige tjenester. Logger må være pålitelige og beskyttet mot manipulering, og inngå i teamets rutiner for hendelseshåndtering. Se også Logging og monitorering.
Bruk av SBOM
Software Bill Of Materials (SBOM) er en tilnærming der vi genererer en oversikt over alle avhengigheter med versjoner fra løsningene våre. Denne oversikten bør knyttes til hver release, slik at det er tydelig hvilke avhengigheter som faktisk var i bruk på et gitt tidspunkt.
For KI-løsninger bør oversikten også inkludere relevante AI-artefakter som modeller, modelldigests, tokenizers og sentrale datasett-referanser der dette er relevant. Det finnes flere mer eller mindre standardiserte filformater for SBOM, og de kan arkiveres eller legges inn i andre løsninger for å forenkle monitorering fra sentralt hold.
Teamet må kunne gjenopprette tjenester og data etter destruktive hendelser. Denne artikkelen handler om praktisk recovery: planer, øvelser og verifisering av at gjenoppretting faktisk fungerer.
En backup som ikke er testet er verdiløs. Det samme gjelder en disaster recovery-plan som aldri har blitt testet.
Hvis teamet har gjort grunnarbeidet godt, har dere en plan for gjenoppretting som beskriver hvordan infrastruktur, applikasjon og data gjenopprettes til normal drift.
Årsakene til gjenoppretting varierer: menneskelige feil, feil i leveranser, svikt hos leverandør, utilgjengelig infrastruktur eller ondsinnede hendelser. Målet er alltid det samme: redusere nedetid og datatap med forutsigbare prosesser.
Minimumskrav til gjenoppretting
Teamet bør som minimum ha kontroll på:
dokumenterte mål for gjenoppretting (RTO) og akseptabelt datatap (RPO)
verifiserte backups av data, konfigurasjon og avhengige artefakter
en konkret, stegvis recovery-oppskrift som kan følges av flere enn én person
nødvendige tilganger, roller og tilgangspakker for de som skal gjenopprette
et testmiljø der recovery-planen kan øves uten å påvirke produksjon
tydelige kriterier for når systemet kan åpnes for brukere igjen
Øving og verifisering
Recovery må testes jevnlig. Teamet bør planlegge øvelser som dekker både enkle feil og mer komplekse scenarioer.
Eksempler på øvelser:
gjenoppretting av enkeltkomponent (f.eks. database eller apptjeneste)
full gjenoppretting av kritisk tjeneste i alternativt miljø
validering av backup-kjede fra backup til verifisert restore
øvelse der nøkkelpersoner ikke er tilgjengelige
Etter hver øvelse bør dere dokumentere hva som fungerte, hva som feilet og hvilke tiltak som må inn i backloggen.
En tenkt oppskrift for løsningen tegnet opp i artikkelen om systemskisser kan være som under. Premisset for planen under er at vi har kildekode og pipelines tilgjengelig i eksempelvis Azure DevOps, og at applikasjon og ressurser på mystisk vis er fjernet fra Azure:
Sjekk at nye subscriptions er på plass i Azure
Konfigurer Azure Pipelines slik at de deployer til disse
Verifiser at alle Entra-grupper er tilgjengelige
Deploy infrastruktur-som-kode
Konfigurer NSG’er og brannmurer (dersom dette ikke gjøres som kode)
Skru av aksess utenfor leveranseteamet for å unngå at brukere forstyrrer restoreprosessen
Verifiser at ressursene har tilgang til dataplatformen
Verifiser tilganger til database
Restore applikasjon og data:
Restore data til database fra siste backup
Deploy backend
Deploy frontend
Verifiser at applikasjon fungerer
Publiser PowerBI-rapport
Verifiser at den kan lese data fra backend
Skru på aksess for sluttbrukere slik at de kan bruke applikasjonen igjen.
Det er verdt å nevne at hvert punkt ofte trenger utfyllende informasjon, med henvisninger til tilgangspakker eller gruppemedlemskap for at den som gjenoppretter skal få nødvendig tilgang.
Recovery for løsninger med AI-komponenter
Hvis løsningen har AI-komponenter, må recovery-planen også dekke:
gjenoppretting av modellartefakter og versjoner
gjenoppretting av konfigurasjon for model routing, prompts og sikkerhetsgrenser
gjenoppretting av vektorindeks/feature store der dette brukes
verifisering av modellkvalitet etter restore (ikke bare at tjenesten svarer)
kontroll av AI-relaterte logger slik at hendelsesforløp fortsatt er sporbart
Dette støtter kontrollområder som “AI system operation and monitoring” og “AI system recording of event logs” i en operativ recovery-kontekst.
Teamet må vite hvilke krav som gjelder ved sikkerhetshendelser, hvem som har ansvar, og hvordan varsling og eskalering skal håndteres. Denne artikkelen beskriver styring, etterlevelse og samhandling.
Mange tenker på sikkerhetshendelser som målrettede angrep der noen “hacker” en løsning. Det kan stemme, men en hendelse kan også være teknisk svikt, menneskelige feil eller avvik i drift.
NSM definerer en sikkerhetshendelse som “En avvikssituasjon hvor det er et potensiale for tap av konfidensialitet, integritet, og/eller tilgjengelighet for informasjon eller IKT-tjenester. En sikkerhetshendelse kan oppstå som følge av et dataangrep, teknisk svikt, eller utilsiktede feilhandlinger.”
Med andre ord kan en hendelse være nesten hva som helst som påvirker konfidensialitet, integritet eller tilgjengelighet. Ulike kunder har ulike krav til når dere skal varsle, eskalere og rapportere, og til hvem.
Hva denne artikkelen dekker
Denne artikkelen handler om overordnet hendelseshåndtering og beredskap:
hvilke krav dere må etterleve
hvem som har ansvar for hva
hvordan varsling og eskalering skal skje
hvilke logger og hvilken monitorering som må være på plass
Operativ gjenoppretting etter destruktive hendelser er beskrevet i artikkelen om gjenoppretting.
Dette må teamet ha kontroll på
Før en hendelse oppstår må følgende være avklart og dokumentert:
kontaktpunkter hos kunde, leveranseleder og eventuelt SOC/NOC hos kunden
tydelige kriterier for når dere skal varsle umiddelbart
hvem som kan beslutte tiltak, nedetid og kommunikasjon utad
hvilke krav som gjelder for rapportering, revisjon og avvik
hvilke avhengigheter løsningen har mot andre systemer
Alle kunder i Bouvet skal ha et definert kontaktpunkt for hendelser i Kunder (CRM). Har teamet andre kontaktpunkter inn mot kunden, som et sikkerhetssenter (SOC), bør også disse dokumenteres slik at en hendelse kan løses så raskt som mulig. Andre veien er leveranseleder normalt det formelle kontaktpunktet i Bouvet-teamet når kunden trenger å nå dere.
Dette må være kjent i hele teamet, ikke bare hos enkeltpersoner.
Overvåking og logger
Hendelseshåndtering forutsetter at dere faktisk ser hva som skjer i løsningen. Teamet må sikre at nødvendige logger blir samlet inn, beskyttet og gjort tilgjengelige for analyse.
For løsninger med AI-komponenter betyr dette i tillegg:
monitorering av modell- og tjenesteatferd over tid
logging av hendelser knyttet til AI-kall, avvik og tilgang
varsling ved uventet endring i kvalitet, respons eller adferd
sporbarhet for beslutninger som påvirker sikkerhet eller etterlevelse
Dette støtter kontrollområder som “AI system operation and monitoring” og “AI system recording of event logs” i ISO 42001.
Hendelser kan ta mange former: sårbarheter i applikasjon eller avhengigheter, driftsavvik eller aktive angrep.
Dersom dere oppdager, eller har grunn til å tro at en løsning er under angrep må dette varsles til kunden umiddelbart. Det er ikke alltid tilfelle at løsningen som angripes er den som er målet, i mange tilfeller er en løsning bare et springbrett videre til en annen. Derfor er det også viktig å vite hvilke tilganger og nettverksåpninger denne har til andre løsninger, slik at kundens IT-organisasjon kan analysere disse for å se etter tegn på angrep der.
Om dere kommer over tegn på at en løsning har blitt angrepet eller brukt til et angrep er det også viktig å si ifra, slik at kunden kan sikre informasjon og bevis på dette for videre etterforskning.
Husk
Håndtering av, og etterforskning av hendelser er et eget fagfelt. Dersom dere kommer over tegn på at noe kan ha skjedd, si ifra til deres kontaktpunkt og avvent beskjed fra denne før dere gjør noe.