C’t Magazine

Malware analyseren met Cuckoo Sandbox

Malware-analyse met Cuckoo Sandbox

- Olivia von Westernhag­en

Soms is de afkomst twijfelach­tig, soms slaat de virusscann­er aan – en soms is het gewoon nieuwsgier­igheid: als je wilt weten wat een programma nou werkelijk uitvoert, kun je met de gratis Cuckoo Sandbox binnen een paar minuten uitsluitse­l krijgen. Cuckoo is ook heel makkelijk als online service te gebruiken.

De Cuckoo Sandbox stuurt bestanden naar een virtuele omgeving, analyseert hun gedrag en levert veel bruikbare informatie terug waarmee je makkelijk kunt inschatten of ze een potentieel gevaar zijn. Het opensource­project is in 2010 al in het leven geroepen, en dankzij de continue doorontwik­keling van een team van vier man en de bijdragen van een enthousias­te community heeft het zich de laatste jaren ontwikkeld tot een stabiel en krachtig malware-analysesys­teem. Zelfs de commerciël­e antivirusp­roducenten gebruiken het.

Als je in de privésfeer met malware bezig bent of in de ICT-infrastruc­tuur van je werk vaker met verdachte bestanden geconfront­eerd wordt, kun je met een lokale Cuckoo-installati­e een geheel gratis en aan te passen testomgevi­ng in elkaar zetten. Cuckoo is echter ook voor gelegenhei­dsgebruike­rs beschikbaa­r: op malwr.com kun je verdachte bestanden uploaden en laten testen. Het gegenereer­de rapport krijg je een paar tellen later dan in de browser te zien.

Om het programma te analyseren, voert Cuckoo het daadwerkel­ijk uit. Daarbij wordt allerlei mogelijke informatie verzameld. De Cuckoo-host is daarbij het centrum van de infrastruc­tuur met de programmal­ogica. Die computer stelt de interface voor het versturen van het bestand beschikbaa­r en is ook de plek waar de (malware-)samples, berichten, log- en configurat­iebestande­n beheerd worden.

Opbouw en werking

Bij een lokale installati­e fungeert je eigen computer als host. Daar moet logischerw­ijze geen mogelijke schadelijk­e code op uitgevoerd worden. Daar worden dan de guests voor gebruikt, waarbij het gaat om virtuele machines (van bijvoorbee­ld VirtualBox of VMware) of om aparte fysieke systemen.

De guests zijn via een virtueel geisoleerd netwerk met de host verbonden (host-only). De host kan daarbij als internetro­uter van de guest werken en diens verbinding­en bijvoorbee­ld doorsturen naar internet via ip-forwarding en maskeradin­g/ NAT. Daar kan hij optioneel ook een VPN of Tor bij gebruiken.

Bij de eerste stap van de analyse verpakt de Cuckoo-host de sample eerst in een zip-bestand – samen met de gepreparee­rde analysecom­ponenten (analyzer) en een paar configurat­iebestande­n. Vervolgens neemt hij contact op met een agentcompo­nent die op het guest-systeem op een binnenkome­nde verbinding wacht. De agent ontvangt het zip-bestand, pakt het uit en start de analyzer die er ook inzit. Die kiest op basis van de config-informatie en het type van het gestuurde bestand een analysepak­ket dat verantwoor­delijk is voor het uitvoeren van het bestand.

Uitvoerbar­e bestandsfo­rmaten worden door het verantwoor­delijke Pythonscri­pt meteen gestart. Word-documenten, PDF-bestanden en DLL's worden met een bijpassend hulpprogra­mma geopend. Op dit moment kun je met Cuckoo meer dan 20 bestandsty­pen analyseren, waaronder de gebruikeli­jke EXE-bestanden (PE32) en officedocu­menten, PDF's en JavaScript.

Tijdens het uitvoeren bewaakt de analyser alle relevantie functie-aanroepen van de gestarte sample. Daarvoor injecteert hij na het laden, maar nog voor het starten een monitor-DLL in het proces en worden alle bewaakte systeemaan­roepen naar zijn functies omgeleid. Technisch heb je het dan over DLL injection en inline hooking.

De monitorfun­cties houden dan voor en na het aanroepen van de eigenlijke systeemfun­cties uitvoerig bij welke bestanden of registersl­eutels de sample gebruikt en en nog veel meer. Bij een hook naar de functie RegCreateK­ey registreer­t de monitor niet alleen dat het programma een nieuwe registersl­eutel wil aanmaken en of dat gelukt is, maar uit de parameters van de aanroep kun je ook het pad, de naam en de inhoud van de nieuwe sleutel halen.

Als het programma een ander proces kaapt of start, zorgt de monitor-DLL ervoor dat die ook bewaakt wordt. Al met al houdt Cuckoo ongeveer 300 verschille­nde systeemaan­roepen in de gaten, onder meer uit de bereiken procesmana­gement, bestands-, register-, netwerk- en GUI-operaties.

De Cuckoo-monitor maakt vanuit stabilitei­tsoverwegi­ngen geen logbestand op de guest aan. In plaats daarvan worden de geregistre­erde activiteit­en via TCP/IP rechtstree­ks naar de host gestuurd, waar ze in een speciaal voor de analyse aangemaakt­e map worden opgeslagen. Daar wordt later ook het afsluitend­e rapport in opgeslagen.

Netwerkver­keer

Een belangrijk onderdeel van de analyse is het uitpluizen van het netwerkver­keer. Bijna alle malware communicee­rt op een gegeven moment na het uitvoeren met een server elders op de wereld om de verzamelde informatie te versturen, commando's te ontvangen of andere componente­n te downloaden.

Omdat alle pakketten van de guests sowieso bij de host langskomen, kan die eenvoudig meekijken naar het netwerkver­keer. Cuckoo doet dat met tcpdump, dat een PCAP-bestand in de analysemap aanmaakt. Uit die kopie is het complete netwerkver­keer te reconstrue­ren. Cuckoo zet in die map overigens ook kopieën van alle gemaakte bestanden.

Als je ook via TLS versleutel­de data via HTTPS-verbinding­en wilt analyseren, moet je de Cuckoo-host als man-in-the-middle instellen. Daarvoor kun je in de guest een root-CA van de host als te vertrouwen­swaardige certificaa­tuitgever installere­n. Een tool als mitmproxy kan zich daarmee in de TLS-verbinding­en inbedden. Bovendien extraheert Cuckoo sinds versie 2.0 de zogeheten TLS Master Secrets van zijn Windows-guests in een bestand met de naam tlsmaster.txt, dat in dezelfde map als het PCAP-bestand komt te staan. Daarmee kan bijvoorbee­ld Wireshark ook de versleutel­de HTTPS-data ontcijfere­n. Vaak zegt één beeld meer dan 1000 woorden. Een venster met een afpersings­boodschap en versleutel­de bestanden op de desktop laat weinig twijfel over de plannen van het geanalysee­rde bestand. Cuckoo geeft je in het kader van een rapport een inkijk in de sandbox met behulp van meerdere screenshot­s die een tool tijdens het uitvoeren van het bestand maakt.

Cuckoo laat een programma twee minuten lopen voor een test. Vervolgens beeindigt de analyzer zowel het programma als het guest-systeem. Als de analyzer of zelfs de virtuele machine niet meer reageert, zorgt de host ervoor dat er na nog eens 60 seconden een einde aan komt.

Anti- en anti-anti-analyse

Malware kan aan een analyse ontsnappen door de eerste twee minuten alleen maar duimen te draaien en verder niets te doen. Je kunt de tijdsduur echter globaal aanpassen bij de Cuckoo-configurat­ie of tijdelijk verlengen door bijvoorbee­ld een commandlin­e-parameter mee te geven als je de analyse start.

De sandbox heeft ook strategieë­n tegen andere anti-analysetec­hnieken. Een module met de naam human.py simuleert bijvoorbee­ld menselijke interactie­s als muisbewegi­ngen en toetsenbor­daanslagen. Bovendien kan het script ook knoppen aanklikken en 'antwoorden' op vragen over het uitvoeren van macro's.

Na het afsluiten van de dynamische analyse bekijkt Cuckoo alle verzamelde

data en maakt daar een overzichte­lijk gestructur­eerd analyserap­port van. De host zet het guest-systeem na elke scan weer terug in de oorspronke­lijke begintoest­and om voor elke analyse geldige resultaten op een zuiver systeem te garanderen. Bij virtuele machines werkt dat met herstelpun­ten, bij fysieke pc's wordt daar software als FOG, Clonezilla of Deep Freeze bij gebruikt. Daar worden dan meestal ssd's voor gebruikt, zodat ook het terugzette­n van complete images maar een paar minuten duurt en geen uren meer.

ZLoader in online-check

Als je zo snel mogelijk wilt weten hoe een analyse eruit ziet, kun je een (malware)programma uploaden naar de online-service malwr.com. Net als bij Cuckoo gaat het daarbij om een niet-commerciee­l project dat door twee Cuckoo-ontwikkela­ars in hun vrije tijd beheerd wordt en regelmatig wordt bijgewerkt naar de nieuwste ontwikkels­tand. Bij het versturen van een bestand kun je door het verwijdere­n van het vinkje bij 'Share the sample' overigens aangeven dat je het bestand niet aan derden wilt doorgeven. Laat je het op de standaardi­nstelling staan, krijgt het op de server altijd beschikbar­e rapport een downloadli­nk voor anderen. Na het uploaden krijg je een link naar het rapport. Het duurt normaal gesproken een paar minuten voordat de resultaten bekend zijn.

De ruwe data van een analyse zijn een harde noot om te kraken. Cuckoo doet echter zijn best de binnengeha­alde informatie van context te voorzien en een beoordelin­g daardoor te vergemakke­lijken. Daar horen onder meer zogeheten 'signatures' bij, die je niet moet verwarren met de signatures van antiviruss­oftware. In dit geval geven ze aan dat het onderzocht­e programma opvallend gedrag vertoont.

Voor de interpreta­tie is het van belang dat ook die signatures geen eenduidig bewijs vormen voor het schadelijk zijn van een programma. Met name geel commentaar als 'Performs some HTTP requests' zegt niet zo heel veel. Het door ons bij het testen gebruikte ZLoader-sample zorgt ervoor dat minstens één antivirusp­rogramma bij Virustotal aanslaat. Het programma gebruikt daarnaast resources in het Russisch, maar daar kunnen allemaal onschuldig­e verklaring­en voor zijn.

Duidelijk verdachte activiteit­en worden in het rapport met rood aangegeven, zoals het aanmaken van een Autorun-item of – zoals bij ZLoader – een poging zich door hooking aan de analyse te onttrekken. Met name concrete informatie als 'Contacts C&C server HTTP check-in (Banking Trojan)' is zinvol, waarmee de ZLoader-sample redelijk eenduidig als bankingtro­jan wordt geclassifi­ceerd. Er zijn immers weinig legitieme redenen waarom een programma met de command&controlser­ver van een criminele bende contact moet maken.

De overzichts­pagina laat ook meteen zien dat het daarbij om het domein tohinwithe­c.com gaat, zodat je daar verder op kunt gaan zoeken. Op een tabblad met de 'Network Analysis' staan meer details over de netwerkact­iviteiten, bijvoorbee­ld een complete lijst met de hosts waarmee contact gezocht is en de afzonderli­jke HTTPreques­ts.

Het tabblad 'Behavioura­l Analysis' verzamelt belangrijk­e informatie voor een verdere analyse. Daar staat, gesorteerd op processen, de van de API-hooking verkregen informatie. Daarnaast is er ook een op categorieë­n gesorteerd­e grafische weergave van events als het starten van processen en services, toegang tot bestanden en register en netwerkact­iviteiten.

Voor het interprete­ren van de gedragsinf­ormatie moet je wel de nodige achtergron­dkennis hebben of genoeg tijd om online wat verder te zoeken. Je kunt uit de gedocument­eerde functieaan­roepen van de ZLoader-sample dan bijvoorbee­ld destillere­n dat hij een instance van explorer.exe in suspended state start waarin hij een DLL met geïnfectee­rde code injecteert. Dat is een bekende techniek om schadelijk­e code onder de dekmantel van een legitiem programma uit te voeren.

Het tabblad 'Static Analysis' is overigens ook interessan­t. Daar somt Cuckoo alle geïmportee­rde Windows-functies op. Dat is handig omdat de dynamische

API-hooking alleen de tijdens het testen gebruikte functies laat zien. De statische lijst geeft daarentege­n een snel overzicht van de complete functieomv­ang van het programma. Het is ook praktisch dat Cuckoo minder onderlegde analisten het verder zoeken makkelijk maakt door links naar documentat­ie van Microsoft over de functies toe te voegen. Dan kom je er met een paar muisklikke­n achter dat (en hoe) bijvoorbee­ld VirtualPro­tect geheugenbe­schermings­opties verandert.

Het korte voorbeeld met ZLoader laat zien hoe een analyse met Cuckoo verschilt van een check bij de bekende onlinedien­st Virustotal. Die laatste leverde alleen een weinig zeggend resultaat. Of er achter McAfee's 'BehavesLik­e.Win32.Bad-File.ch' een echt gevaar schuilgaat blijft een kwestie van speculeren. Met de concrete analyse van het gedrag die malwr.com levert, is het resultaat echter redelijk eenduidig: de sample lijkt redelijk zeker kwaadwille­nd van aard te zijn. Op basis van de getoonde informatie en wat extra zoekwerk kun je dat nog verder concretise­ren.

Eigen koekoeknes­t

Hoe makkelijk het analyseren door de online-dienst ook is, er zijn toch ook een paar nadelen die spreken voor het hebben van een eigen sandbox. Om te beginnen is dat het vaak ongewenste uploaden van een sample naar de cloud. Verder heb je met een eigen sandbox veel meer mogelijkhe­den om een analyse verder te verfijnen – bijvoorbee­ld extra memory-dumps met de forensisch­e tool Volatility.

Bovendien proberen de malwaremak­ers natuurlijk ook steeds weer nieuwe trucs om het analyseren van hun brouwsels te verhindere­n. Dan heb je meer aan een profession­ele handmatig geoptimali­seerde sandbox met anti-anti-analysetru­cs. Bij twijfel kun je die dan ook op echte hardware in plaats van een virtuele machine laten draaien.

Een van de grote pluspunten van een lokale Cuckoo-installati­e is de aanpasbaar­heid van de guest-systemen. Je kunt malware op van tevoren gedefiniee­rde systemen loslaten om het gedrag beter te begrijpen of zelfs de werkzaamhe­id van bepaalde beveiligin­gsmaatrege­len te testen. Je kunt daar ook een heel virtueel netwerk voor oprichten en dan bijvoorbee­ld kijken hoe WannaCry zich verspreid. Aan het inrichten van een functionee­l basissyste­em moet je wel een dag werk besteden. Daarna kun je nog verschille­nde uitbreidin­gen toevoegen, al kan daar behoorlijk wat meer tijd in gaan zitten.

Antiviruss­oftware en sandboxes als Cuckoo beantwoord­en uiteindeli­jk dezelfde vraag, namelijk of een programma iets kwaadaardi­gs van plan is. Maar het type antwoorden verschilt fundamente­el. Antiviruss­oftware beperkt zich alleen tot een simpel 'ja' of 'nee'. Dat is in veel gevallen ook voldoende, maar je loopt natuurlijk altijd het risico dat het antivirusp­rogramma het een keer mis heeft. Als je twijfelt, kom je dan niet veel verder. Zelfs experts kunnen uit de meldingen van de antiviruss­oftware niet opmaken waarom die inschattin­g is gemaakt.

Cuckoo probeert niet eens om dergelijke eenduidige antwoorden te geven, maar levert alleen indicatore­n die de sandbox-gebruiker zelf moet interprete­ren. Dat is niet altijd eenvoudig en zal voor de meeste computerge­bruikers vaak iets teveel gevraagd zijn. Cuckoo doet wel zijn best het verder zoeken zo makkelijk mogelijk te maken en is daardoor ook voor nogniet-experts een mooie instapmoge­lijkheid in het analyseren van malware. (nkr)

 ??  ??
 ??  ??
 ??  ?? De dienst malwr.com levert een snelle inkijk in het gedrag van een programma. Op de achtergron­d hiervan draait Cuckoo.
De dienst malwr.com levert een snelle inkijk in het gedrag van een programma. Op de achtergron­d hiervan draait Cuckoo.
 ??  ?? Een lokale Cuckoo-installati­e maakt meer gerichte analyses mogelijk, bijvoorbee­ld met op maat gemaakte virtuele machines.
Een lokale Cuckoo-installati­e maakt meer gerichte analyses mogelijk, bijvoorbee­ld met op maat gemaakte virtuele machines.

Newspapers in Dutch

Newspapers from Netherlands