DigitalLead-støttet projekt: Automatisk opdagelse og reparation af sikkerhedssårbarheder i software

Software er en afgørende del af stort set alle moderne virksomheder. Men software kan også indeholde fejl og sikkerhedssårbarheder, som kan være svære at opdage og tidskrævende at rette. Et nyt projekt mellem Syddansk Universitet (SDU), Umbraco og Unik System Design, støttet af DigitalLead, undersøger derfor, hvordan kunstig intelligens, statisk programanalyse og automatisk programreparation kan bruges til at opdage sårbarheder tidligere og gøre det hurtigere og mere sikkert at rette dem.

Nogle fejl er harmløse, mens andre kan få alvorlige konsekvenser, når software bliver taget i brug. Det gælder ikke mindst sikkerhedsrelaterede fejl. De kan blandt andet føre til driftsforstyrrelser og skade en virksomheds omdømme. Samtidig kan der gå lang tid, fra en sårbarhed bliver opdaget, til den bliver undersøgt og rettet.

"Det, vi forsøger at gøre, er at reducere den tid, det tager at komme sig over den slags problemer, ved hjælp af forskellige teknikker", siger Adam Alami, der er Associate Professor ved SDU Center for Industrial Software.

Fra kendt fejl til nye sårbarheder

En central del af projektet er såkaldt static program analysis - statisk programanalyse. I modsætning til dynamisk analyse behøver systemet ikke at køre programmet for at undersøge det. I stedet analyseres selve programkoden og dens struktur for at finde potentielle problemer.

Teknikken har dog en udfordring. Når et stort program analyseres, kan systemet pege på mange potentielle fejl, som i virkeligheden ikke er fejl. Det kaldes false positives.

Forskerne har derfor arbejdet med at kombinere statisk analyse med information fra fejl, som allerede er kendt.

"Vores idé var: Hvorfor ikke starte med en specifikation? Hvis vi for eksempel har en test, der afslører en fejl, kan vi bruge den viden om programmet til at guide den statiske analyse og dermed lede efter flere fejl proaktivt", forklarer Abhishek Tiwari, lektor ved SDU, der forsker i programanalyse og softwaresikkerhed.

Når systemet kender en konkret fejl, kan den såkaldte dynamiske analyse bruges til at se på den del af programmet, hvor fejlen opstår. Den information kan derefter bruges til at guide den statiske analyse videre gennem programmet.

På den måde forsøger forskerne at få det bedste fra begge verdener: Dynamisk analyse giver konkret information fra en faktisk kørsel af programmet, mens statisk analyse kan bruges til at undersøge programmet bredere uden at skulle køre det.

"Hvis der er en fejl eller et crash, starter vi fra det punkt. Den kørsel, der fører frem til fejlen, er naturligvis ikke komplet. Vi bruger den delvise kørsel som information og bruger derefter statisk analyse til at navigere gennem resten af programmet og opbygge en model", siger Abhishek Tiwari.

Når computeren også skal kunne reparere fejlen

Projektet handler ikke kun om at finde fejl. Forskerne undersøger også automated program repair – automatisk programreparation.

I stedet for at en udvikler manuelt skal finde årsagen til en fejl og skrive en løsning, kan systemet analysere fejlen og foreslå en ændring i koden.

Men her opstår endnu en udfordring: En rettelse kan selv skabe nye problemer.

"Når en fejl bliver rettet, kan rettelsen nogle gange introducere en ny fejl et andet sted i programmet", siger Abhishek Tiwari.

Derfor forsøger forskerne ikke blot at generere en patch og anvende den med det samme. Først undersøges det, om den foreslåede ændring kan bryde andre egenskaber ved programmet.

Det er her, den statiske analyse igen spiller en central rolle. Systemet kan bruge specifikationer og constraints til at kontrollere, om en mulig reparation skaber problemer andre steder i programmet.

Forskerne har blandt andet arbejdet med bestemte typer af fejl, herunder null-pointer-fejl og crashes. For disse typer af fejl kan systemet kontrollere bestemte egenskaber ved en reparation.

"Vi kan naturligvis ikke give garantier for alle typer af fejl. Men i bestemte scenarier kan vi undersøge, om vores reparationer introducerer andre problemer", siger Abhishek Tiwari.

Forskerne har desuden afprøvet deres tilgang på open source-projekter på GitHub. Her har systemet identificeret fejl og genereret patches, som efterfølgende kunne vurderes af projektudviklerne.

AI skal hjælpe med at lukke hele kæden

Undervejs i projektet har forskerne også undersøgt, hvordan kunstig intelligens kan bruges til at automatisere endnu større dele af processen.

AI-løsningen er udviklet som en pipeline, hvor forskellige AI-agenter arbejder sammen. Én agent identificerer potentielle sårbarheder, en anden forklarer problemet, og den tredje er tænkt til at foreslå en patch.

Den sidste del blev ikke færdiggjort i projektperioden. Til gengæld lykkedes det forskerne at automatisere dele af processen fra identifikation af en sårbarhed til lokalisering og forklaring af problemet.

"Målet er at efterligne den menneskelige proces fra ende til anden. Først skal man finde sårbarheden. Derefter skal man finde ud af, hvor i koden den ligger, forklare problemet til et menneske og til sidst foreslå en løsning", siger Adam Alami.

I forskernes evaluering kunne AI-løsningen identificere en del af de kendte fejl i datasættene. Med en lukket sprogmodel blev 62 procent af de fejl, der indgik i ground truth, identificeret, mens en test med en open source-sprogmodel nåede 32 procent.

Resultaterne viser samtidig, hvorfor mennesket fortsat spiller en vigtig rolle.

"Der er ikke nødvendigvis én eneste korrekt patch. Der kan være flere plausible løsninger på det samme problem", siger Abhishek Tiwari.

Den endelige beslutning om, hvilken løsning der skal bruges, afhænger blandt andet af virksomhedens software, krav og udviklingspraksis. Derfor skal en udvikler fortsat kunne forstå og kontrollere den foreslåede løsning.

"Vi giver ikke bare udvikleren beskeden: Det her er en fejl, og det her er patchen. Vi giver også en forklaring på, hvad problemet var, og hvorfor løsningen adresserer det", siger Abhishek Tiwari.

Det kan samtidig være med til at reducere den tid, udvikleren bruger på at undersøge en sårbarhed.

Et skridt mod mere proaktiv softwaresikkerhed

Projektets overordnede ambition er dermed at flytte software­sikkerhed fra en primært reaktiv proces til en mere proaktiv. I stedet for først at opdage en sårbarhed, når den allerede har skabt et problem, er målet at kombinere kendte fejl, statisk analyse, automatisk programreparation og AI for tidligere at kunne identificere problemer og understøtte en sikker reparation.

Den fulde automatisering er endnu ikke på plads. Forskerne ser derfor projektet som et grundlag for videre udvikling og test.

"Projektet er stadig under udvikling, og vi vil gerne fortsætte arbejdet. Vi er særligt interesserede i organisationer, der vil teste AI-løsningen med deres egne datasæt og software", siger Adam Alami.

Projektet er gennemført i et samarbejde mellem Syddansk Universitet, Umbraco og Unik System Design og er støttet af DigitalLead og Virksomhedsudvikling Danmark.
 

Vil I være med til at udvikle næste generation af softwaresikkerhed?


Adam Alami og hans kolleger fortsætter forskningen i automatisk programreparation og agentisk AI til automatisk detektion og reparation af sikkerhedssårbarheder på tværs af forskellige domæner og softwareprodukter. Forskerne søger virksomheder og organisationer, der er interesserede i at afprøve teknologierne, dele relevante use cases eller indgå i nye forsknings- og udviklingssamarbejder. Interesseret i et samarbejde? 


Kontakt Adam Alami på adal@mmmi.sdu.dk.

Virksomhedsudvikling DK_ 250 (250 x 60 px)-ny
EU LOGO (7)

"Målet er at efterligne den menneskelige proces fra ende til anden. Først skal man finde

sårbarheden. Derefter skal man finde ud af, hvor i koden den ligger, forklare problemet til et

menneske og til sidst foreslå en løsning", 

- Adam Alami, Associate Professor ved SDU Center for Industrial Software.

Cluster Management Excellence


Dankort Visa Mastercard AmericanExpress Diners Club JCB discover Visa Electron Maestro Mobile pay
© 2026 by Ajour CMS & ITIDE