Simovits

Att hitta skadlig kod i en höstack

Att särskilja skadlig kod från legitima filer eller applikationer är idag en stor industri som omsätter stora pengar världen över. Det är också ett område som är i konstant behov av utveckling, för att kunna hålla jämna steg med utvecklare av skadlig kod. 

På ett övergripande plan kan man dela upp metodik för analys av potentiell skadlig kod i två grupper; dynamisk och statisk analys. Den dynamiska analysen handlar om inspektion av vilka kommandon som körs när filen exekveras. Under statiska analys, som är den typ av analys som detta blogginlägg kommer att fokusera på, inspekteras innehåll i en fil som inte har exekveras, vanligtvis via en automatiserad process. Den enklaste versionen av detta är att skapa en hash av filen och jämföra denna mot en databas med hashar på känd skadlig kod. Mer sofistikerade algoritmer inspekterar innehållet i filen mer noggrant, på jakt efter signaturer som kan associeras med malware. Likheter mellan olika typer av skadlig kod, och hur de skiljer sig mot legitima filer används för att klassificera något som antingen skadlig kod eller inte skadlig kod. När en fil inspekteras på detta sätt extraheras en serie egenskaper som förhoppningsvis är relevanta för att definiera träffsäkra signaturer. Det finns otaliga skolor för vilka egenskaper som är bäst att använda här, samt hur de olika egenskaperna bör vägas mot varandra. 

Exempel på typiska egenskaper som används kan vara:

Här kan man tänka man sig att om bra egenskaper används, så bör en fil som inspekteras kunna placeras på en n-dimensionell graf, där varje vald attribut motsvarar en dimension. Om många olika filer sätts i denna graf kan man tänka sig att filer av olika typer av filer bilder distinkta grupperingar, där vissa av dessa grupper motsvarar skadlig kod. Om man kan hitta dessa grupperingar kan de användas för att klassificera skadlig kod, utifrån vilken grupp en fil är placerad i.

Om dessa egenskaper ritas ut på n-dimensionell graf skapas kluster. Grannar tillhörande samma kluster representerar liknande filer. 

Att hitta de optimala egenskaperna för detta, samt att utifrån det definiera grupperingar är inte trivialt. För att analytiker ska hänga med i utvecklingen av skadlig kod appliceras allt mer avancerade metoder för identifikation av vilka egenskaper som är mest relevanta. En av dessa metoder är utveckling och tillämpning av maskininlärning, eller “AI”, inom området. Detta är ett mycket användbart verktyg för att hitta mönster i stora datamängder. En av de främsta styrkorna är att AI kan klara av att hantera och hitta korrelationer i mycket större datamängder, med fler dimensioner, än människor kan hantera på ett bra sätt. Inom områden där det kan vara svårt eller väldigt tidskrävande för människor att göra analysen är AI-system en mycket vanlig application. Automatiserad analys av skadlig kod är ett bra exempel på detta. Det finns en stor mängd data att analysera, uppskattningsvis runt 1 miljard malware har skapats under de senaste 30 åren. Att separera dessa från de otaligt många fler legitima filer som skapats under denna tid handlar om hantering av väldigt stora datamängder. 

Maskininlärning har dessutom potential att klara av identifikation av skadlig kod utan antaganden eller förkunskaper om typer av skadlig kod. Detta är inte minst relevant när det kommer till helt nya typer av skadlig kod som inte setts tidigare av säkerhetsanalytiker. Med maskininlärning behöver utvecklaren inte ta ställning till vilka egenskaper som är relevanta, samt hur man extraherar dessa. Tränar man en AI algoritm på ett korrekt sätt kommer den att hitta sambanden automatiskt. Parametrar förknippade med egenskaper eller kombinationer av egenskaper som (generellt) inte har någon inverkan på bestämmande av filer som malware eller inte kommer att närma sig noll (och därmed inte bidra till klassificeringen), och parametrar eller kombinationer av parametrar med stor betydelse för om en fil är malware kommer att växa. Ett extremt exempel på detta visades för ett par år sedan [1] när en grupp AI-forskare applicerade maskininlärning på identifikation av skadlig kod via inspektion av rena bytes i headers. Detta test visar tydligt på potentialen i AI-system inom detta område. Det är högst troligt att vi kommer att se en ökande andel applicering av AI-teknik inom bekämpningen av malware inom de närmaste åren. 

[1] https://arxiv.org/abs/1709.01471