Malware analyseren met Cuckoo Sandbox
Malware-analyse met Cuckoo Sandbox
Soms is de afkomst twijfelachtig, soms slaat de virusscanner aan – en soms is het gewoon nieuwsgierigheid: als je wilt weten wat een programma nou werkelijk uitvoert, kun je met de gratis Cuckoo Sandbox binnen een paar minuten uitsluitsel 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 opensourceproject is in 2010 al in het leven geroepen, en dankzij de continue doorontwikkeling van een team van vier man en de bijdragen van een enthousiaste community heeft het zich de laatste jaren ontwikkeld tot een stabiel en krachtig malware-analysesysteem. Zelfs de commerciële antivirusproducenten gebruiken het.
Als je in de privésfeer met malware bezig bent of in de ICT-infrastructuur van je werk vaker met verdachte bestanden geconfronteerd wordt, kun je met een lokale Cuckoo-installatie een geheel gratis en aan te passen testomgeving in elkaar zetten. Cuckoo is echter ook voor gelegenheidsgebruikers beschikbaar: op malwr.com kun je verdachte bestanden uploaden en laten testen. Het gegenereerde rapport krijg je een paar tellen later dan in de browser te zien.
Om het programma te analyseren, voert Cuckoo het daadwerkelijk uit. Daarbij wordt allerlei mogelijke informatie verzameld. De Cuckoo-host is daarbij het centrum van de infrastructuur met de programmalogica. Die computer stelt de interface voor het versturen van het bestand beschikbaar en is ook de plek waar de (malware-)samples, berichten, log- en configuratiebestanden beheerd worden.
Opbouw en werking
Bij een lokale installatie fungeert je eigen computer als host. Daar moet logischerwijze geen mogelijke schadelijke code op uitgevoerd worden. Daar worden dan de guests voor gebruikt, waarbij het gaat om virtuele machines (van bijvoorbeeld 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 internetrouter van de guest werken en diens verbindingen bijvoorbeeld doorsturen naar internet via ip-forwarding en maskerading/ 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 geprepareerde analysecomponenten (analyzer) en een paar configuratiebestanden. Vervolgens neemt hij contact op met een agentcomponent die op het guest-systeem op een binnenkomende 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 analysepakket dat verantwoordelijk is voor het uitvoeren van het bestand.
Uitvoerbare bestandsformaten worden door het verantwoordelijke Pythonscript meteen gestart. Word-documenten, PDF-bestanden en DLL's worden met een bijpassend hulpprogramma geopend. Op dit moment kun je met Cuckoo meer dan 20 bestandstypen analyseren, waaronder de gebruikelijke EXE-bestanden (PE32) en officedocumenten, 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 systeemaanroepen naar zijn functies omgeleid. Technisch heb je het dan over DLL injection en inline hooking.
De monitorfuncties houden dan voor en na het aanroepen van de eigenlijke systeemfuncties uitvoerig bij welke bestanden of registersleutels de sample gebruikt en en nog veel meer. Bij een hook naar de functie RegCreateKey registreert de monitor niet alleen dat het programma een nieuwe registersleutel 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 verschillende systeemaanroepen in de gaten, onder meer uit de bereiken procesmanagement, bestands-, register-, netwerk- en GUI-operaties.
De Cuckoo-monitor maakt vanuit stabiliteitsoverwegingen geen logbestand op de guest aan. In plaats daarvan worden de geregistreerde activiteiten via TCP/IP rechtstreeks naar de host gestuurd, waar ze in een speciaal voor de analyse aangemaakte map worden opgeslagen. Daar wordt later ook het afsluitende rapport in opgeslagen.
Netwerkverkeer
Een belangrijk onderdeel van de analyse is het uitpluizen van het netwerkverkeer. Bijna alle malware communiceert 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 componenten te downloaden.
Omdat alle pakketten van de guests sowieso bij de host langskomen, kan die eenvoudig meekijken naar het netwerkverkeer. Cuckoo doet dat met tcpdump, dat een PCAP-bestand in de analysemap aanmaakt. Uit die kopie is het complete netwerkverkeer te reconstrueren. Cuckoo zet in die map overigens ook kopieën van alle gemaakte bestanden.
Als je ook via TLS versleutelde data via HTTPS-verbindingen 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 vertrouwenswaardige certificaatuitgever installeren. Een tool als mitmproxy kan zich daarmee in de TLS-verbindingen 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 bijvoorbeeld Wireshark ook de versleutelde HTTPS-data ontcijferen. Vaak zegt één beeld meer dan 1000 woorden. Een venster met een afpersingsboodschap en versleutelde bestanden op de desktop laat weinig twijfel over de plannen van het geanalyseerde bestand. Cuckoo geeft je in het kader van een rapport een inkijk in de sandbox met behulp van meerdere screenshots 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-configuratie of tijdelijk verlengen door bijvoorbeeld een commandline-parameter mee te geven als je de analyse start.
De sandbox heeft ook strategieën tegen andere anti-analysetechnieken. Een module met de naam human.py simuleert bijvoorbeeld menselijke interacties als muisbewegingen en toetsenbordaanslagen. 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 overzichtelijk gestructureerd analyserapport van. De host zet het guest-systeem na elke scan weer terug in de oorspronkelijke begintoestand om voor elke analyse geldige resultaten op een zuiver systeem te garanderen. Bij virtuele machines werkt dat met herstelpunten, 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 terugzetten 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-commercieel project dat door twee Cuckoo-ontwikkelaars in hun vrije tijd beheerd wordt en regelmatig wordt bijgewerkt naar de nieuwste ontwikkelstand. Bij het versturen van een bestand kun je door het verwijderen van het vinkje bij 'Share the sample' overigens aangeven dat je het bestand niet aan derden wilt doorgeven. Laat je het op de standaardinstelling staan, krijgt het op de server altijd beschikbare rapport een downloadlink 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 binnengehaalde informatie van context te voorzien en een beoordeling daardoor te vergemakkelijken. Daar horen onder meer zogeheten 'signatures' bij, die je niet moet verwarren met de signatures van antivirussoftware. In dit geval geven ze aan dat het onderzochte programma opvallend gedrag vertoont.
Voor de interpretatie 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 antivirusprogramma bij Virustotal aanslaat. Het programma gebruikt daarnaast resources in het Russisch, maar daar kunnen allemaal onschuldige verklaringen voor zijn.
Duidelijk verdachte activiteiten 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 bankingtrojan wordt geclassificeerd. Er zijn immers weinig legitieme redenen waarom een programma met de command&controlserver van een criminele bende contact moet maken.
De overzichtspagina laat ook meteen zien dat het daarbij om het domein tohinwithec.com gaat, zodat je daar verder op kunt gaan zoeken. Op een tabblad met de 'Network Analysis' staan meer details over de netwerkactiviteiten, bijvoorbeeld een complete lijst met de hosts waarmee contact gezocht is en de afzonderlijke HTTPrequests.
Het tabblad 'Behavioural Analysis' verzamelt belangrijke 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 gesorteerde grafische weergave van events als het starten van processen en services, toegang tot bestanden en register en netwerkactiviteiten.
Voor het interpreteren van de gedragsinformatie moet je wel de nodige achtergrondkennis hebben of genoeg tijd om online wat verder te zoeken. Je kunt uit de gedocumenteerde functieaanroepen van de ZLoader-sample dan bijvoorbeeld destilleren dat hij een instance van explorer.exe in suspended state start waarin hij een DLL met geïnfecteerde code injecteert. Dat is een bekende techniek om schadelijke code onder de dekmantel van een legitiem programma uit te voeren.
Het tabblad 'Static Analysis' is overigens ook interessant. Daar somt Cuckoo alle geïmporteerde Windows-functies op. Dat is handig omdat de dynamische
API-hooking alleen de tijdens het testen gebruikte functies laat zien. De statische lijst geeft daarentegen een snel overzicht van de complete functieomvang van het programma. Het is ook praktisch dat Cuckoo minder onderlegde analisten het verder zoeken makkelijk maakt door links naar documentatie van Microsoft over de functies toe te voegen. Dan kom je er met een paar muisklikken achter dat (en hoe) bijvoorbeeld VirtualProtect geheugenbeschermingsopties verandert.
Het korte voorbeeld met ZLoader laat zien hoe een analyse met Cuckoo verschilt van een check bij de bekende onlinedienst Virustotal. Die laatste leverde alleen een weinig zeggend resultaat. Of er achter McAfee's 'BehavesLike.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 kwaadwillend van aard te zijn. Op basis van de getoonde informatie en wat extra zoekwerk kun je dat nog verder concretiseren.
Eigen koekoeknest
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 mogelijkheden om een analyse verder te verfijnen – bijvoorbeeld extra memory-dumps met de forensische tool Volatility.
Bovendien proberen de malwaremakers natuurlijk ook steeds weer nieuwe trucs om het analyseren van hun brouwsels te verhinderen. Dan heb je meer aan een professionele handmatig geoptimaliseerde sandbox met anti-anti-analysetrucs. 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-installatie is de aanpasbaarheid van de guest-systemen. Je kunt malware op van tevoren gedefinieerde systemen loslaten om het gedrag beter te begrijpen of zelfs de werkzaamheid van bepaalde beveiligingsmaatregelen te testen. Je kunt daar ook een heel virtueel netwerk voor oprichten en dan bijvoorbeeld kijken hoe WannaCry zich verspreid. Aan het inrichten van een functioneel basissysteem moet je wel een dag werk besteden. Daarna kun je nog verschillende uitbreidingen toevoegen, al kan daar behoorlijk wat meer tijd in gaan zitten.
Antivirussoftware en sandboxes als Cuckoo beantwoorden uiteindelijk dezelfde vraag, namelijk of een programma iets kwaadaardigs van plan is. Maar het type antwoorden verschilt fundamenteel. Antivirussoftware 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 antivirusprogramma het een keer mis heeft. Als je twijfelt, kom je dan niet veel verder. Zelfs experts kunnen uit de meldingen van de antivirussoftware niet opmaken waarom die inschatting is gemaakt.
Cuckoo probeert niet eens om dergelijke eenduidige antwoorden te geven, maar levert alleen indicatoren die de sandbox-gebruiker zelf moet interpreteren. Dat is niet altijd eenvoudig en zal voor de meeste computergebruikers 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 instapmogelijkheid in het analyseren van malware. (nkr)