DigitalForensics

70 13 63 23

Escrow: verifikation af, at den deponerede kildekode kan bygges

Forside · Gennemgået oktober 2026 · Af John Nielsen

Ved software escrow deponerer leverandøren kildekoden hos en tredjepart, så kunden kan få den udleveret, hvis leverandøren går konkurs eller ikke længere vedligeholder løsningen. Deponeringen er kun nyttig, hvis koden faktisk kan bygges til den software, kunden kører, af en anden end leverandøren og uden adgang til leverandørens systemer. Det kan efterprøves teknisk. Det sker sjældnere, end det burde, og manglerne opdages ofte først, når udleveringen er sket og tiden er knap.

Artiklen beskriver de tekniske trin i en verifikation. Kundens situation, når leverandøren lukker, er beskrevet på bevissikring-digitalt.dk, og kuratorens tekniske overtagelse af IT er beskrevet i konkursboets IT: teknisk overtagelse.

Niveauer af verifikation

Verifikation kan ske i flere niveauer, og det er vigtigt at vide, hvilket der er gennemført:

  1. Indholdskontrol. Deponeringen kan åbnes, er ikke beskadiget, og indholdet svarer til en fortegnelse med hashværdier. Det siger intet om, hvorvidt koden kan bygges.
  2. Fuldstændighedskontrol. Der findes kildekode til alle moduler, byggeskripter, låsefiler, dokumentation og databaseskemaer. Mangler som eksterne moduler, der kun henvises til, findes her.
  3. Bygning. Koden bygges i et rent miljø ud fra deponeringen og dens dokumentation alene. Lykkes det, findes artefakter, der kan sammenlignes med det, der kører.
  4. Sammenligning. De byggede artefakter holdes op mod de artefakter, der kører hos kunden.
  5. Funktionstest. Den byggede software installeres i et testmiljø og afprøves mod udvalgte funktioner og data.

Kun niveau 3 til 5 svarer på spørgsmålet, om deponeringen kan bruges. Et certifikat om, at deponeringen er modtaget, svarer kun på niveau 1.

Hvad deponeringen skal indeholde

En brugbar deponering indeholder mere end kildekoden:

  • kildekode til alle egenudviklede moduler med versionshistorik eller i det mindste et entydigt versions-id
  • byggeskripter, CI/CD-konfiguration og en beskrivelse af byggeprocessen trin for trin
  • låsefiler, så de samme versioner af afhængigheder kan hentes; se SBOM og byggeartefakter som dokumentation
  • selve afhængighederne eller adgang til et spejl af dem, da offentlige registre kan fjerne versioner
  • versioner af compilere, runtime, SDK’er og byggeværktøjer, gerne som et byggeimage
  • databaseskemaer, migreringsskripter og nødvendige grunddata
  • infrastruktur som kode og konfiguration af driftsmiljøet
  • en liste over hemmeligheder og certifikater, der skal bruges, uden selve værdierne, med en beskrivelse af, hvordan nye dannes
  • oplysning om kommercielle komponenter og licenser, som kunden selv skal anskaffe

Det rene byggemiljø

Det centrale trin er at bygge uden leverandørens hjælp og uden adgang til leverandørens interne systemer. I praksis:

  • Opret et nyt, isoleret miljø, fx en virtuel maskine eller container, med kun det, der står i dokumentationen.
  • Afbryd adgangen til internettet, eller begræns den til de kilder, deponeringen selv angiver. Ellers kan bygningen hente noget fra leverandørens interne pakkeregister eller fra internettet, som ikke er en del af deponeringen.
  • Følg dokumentationen bogstaveligt, og notér hvert sted, hvor den er utilstrækkelig, og hvad der skulle til for at komme videre.
  • Gem byggeloggen fuldt ud.

Hvert sted, hvor bygningen kræver viden, der ikke står i deponeringen, er et fund. Det kan være en miljøvariabel, et internt certifikat, et privat pakkeregister, en manuel rettelse eller et værktøj, som kun én udvikler havde installeret.

Sammenligning med det, der kører

Lykkes bygningen, er næste spørgsmål, om resultatet svarer til den software, kunden bruger. Det kan undersøges på flere måder:

  • Bitidentiske artefakter. Er byggeprocessen reproducerbar, giver samme kildekode og miljø identiske filer, og hashværdierne kan sammenlignes direkte; se hash af en fil.
  • Komponentvis sammenligning. Er bygningen ikke reproducerbar, kan indholdet sammenlignes: filer, versioner, komponentlister og indlejrede versionsoplysninger.
  • Versionsoplysninger. Mange byggeprocesser indlejrer commit-id eller byggenummer i artefakterne. Stemmer de med deponeringen?
  • Herkomstdata. Hvis byggeprocessen danner signerede herkomstoplysninger, fx efter SLSA-rammeværket, kan de vise, hvilken kilde et bestemt artefakt blev bygget fra.

Afvigelser er almindelige: tidsstempler, byggestier og rækkefølgen af filer i arkiver. De skal forklares og adskilles fra reelle forskelle i indhold.

Funktionstesten

Når byggede artefakter er fremstillet, skal det vises, at de faktisk kan køre. Installér dem i et testmiljø, opret databasen ud fra de deponerede skemaer, og afprøv et udvalg af centrale funktioner, gerne de samme som indgik i den oprindelige overtagelsesprøve. Brug syntetiske eller pseudonymiserede data frem for produktionsdata. Dokumentér for hver funktion, om den virkede, og hvad der eventuelt skulle tilpasses. Testen viser ikke, at alt virker, men den afslører hurtigt, om væsentlige dele mangler, fx en integration, et job, der kører om natten, eller en rapportmotor, som kun findes i produktion.

Rapporten fra verifikationen

Rapporten bør angive, hvilken deponering der er undersøgt, med dato og hashværdier, hvilke niveauer der er gennemført, byggemiljøets sammensætning, alle afvigelser fra dokumentationen og hvad der skulle til for at komme forbi dem, samt resultatet af sammenligningen og funktionstesten. Fund opdeles i, hvad der forhindrer bygning, hvad der forsinker den, og hvad der blot er utilstrækkeligt beskrevet.

Hyppige huller

  • Deponeringen er gammel. Den seneste deponering er ældre end den version, der kører. Sammenlign versions-id’er.
  • Moduler mangler. Fælles biblioteker, som leverandøren bruger på tværs af kunder, er ikke deponeret.
  • Byggeprocessen bor i CI. Byggetrinnene står kun i leverandørens CI-system, ikke i deponeringen.
  • Interne pakker. Afhængigheder hentes fra et privat register, der lukker sammen med leverandøren.
  • Manuelle trin. Nogle trin er udført i hånden og aldrig beskrevet.
  • Data og konfiguration mangler. Koden kan bygges, men løsningen kan ikke startes uden konfiguration eller grunddata.

Løbende verifikation

En verifikation er et øjebliksbillede. Ved hver ny udgivelse bør deponeringen opdateres, og bygningen bør gentages, gerne automatisk. NIST’s ramme for sikker softwareudvikling (SSDF) anbefaler, at de nødvendige filer og understøttende data, herunder integritets- og herkomstoplysninger, arkiveres sikkert for hver udgivelse. En leverandør, der allerede gør det, kan levere en deponering med langt færre huller.

Ved udlevering i en tvist eller konkurs

Når deponeringen udleveres, er der ofte uenighed: kunden mener, den er ufuldstændig, og leverandøren eller boet mener, den opfylder aftalen. Sikr derfor deponeringen, som den blev udleveret, med hashværdier og dokumentation for modtagelsen, før den åbnes, og gennemfør verifikationen på en kopi. Dokumentér alle trin, så en anden sagkyndig kan gentage dem. En uvildig IT-sagkyndig kan vurdere de tekniske spørgsmål om fuldstændighed og byggebarhed; se uvildig teknisk undersøgelse. Se også leverancens tilstand på overdragelsestidspunktet.

Hvad verifikationen kan og ikke kan bevise

En gennemført verifikation kan vise, om deponeringen kan bygges med det, den indeholder, hvad der mangler, og om resultatet svarer til den software, der kører. Den kan ikke vise, om deponeringen opfylder aftalen i juridisk forstand, og en vellykket bygning siger ikke noget om kodens kvalitet eller om, hvor let den er at videreudvikle for en ny leverandør.

Kilder og versioner

Senest gennemgået: oktober 2026.

Næste skridt

Læs også: Prior art i software: dokumentation af tidligere kendt teknik · Kildekode og Git som bevis

→ Uvildig IT-sagkyndig med forensic-baggrund · For IT-afdelingen · Tlf. 70 13 63 23 · Digital bevissikring hos Nielco IT

Skrevet af John Nielsen, IT‑sagkyndig og indehaver af Nielco IT. Selvstændig siden 2009 og mere end 30 års erfaring med IT‑sikkerhed. Har været IT‑sagkyndig i danske retskredse og ved Den Fælles Europæiske Patentdomstol (UPC). Om John Nielsen · LinkedIn · Redaktionel politik

John Nielsen, IT-sagkyndig

Brug for en forensisk undersøgelse?

Skriv kort, hvilke systemer eller enheder det drejer sig om, og om noget haster, så vender jeg tilbage. Kun civile sager.

Tak for din henvendelse. Jeg vender tilbage hurtigst muligt.