Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3

Met dit artikel completeren we de reeks publicaties gewijd aan de analyse van kwaadaardige software. IN het eerste deel We voerden een gedetailleerde analyse uit van een geïnfecteerd bestand dat een Europees bedrijf per post ontving en ontdekten daar AgentTesla-spyware. In tweede deel beschreef de resultaten van een stapsgewijze analyse van de belangrijkste AgentTesla-module.

Vandaag zal Ilya Pomerantsev, specialist in malware-analyse bij CERT Group-IB, spreken over de eerste fase van malware-analyse: het semi-automatisch uitpakken van AgentTesla-monsters aan de hand van het voorbeeld van drie mini-cases uit de praktijk van CERT Group-IB-specialisten.

Normaal gesproken bestaat de eerste fase van de malwareanalyse uit het verwijderen van bescherming in de vorm van een packer, cryptor, protector of loader. In de meeste gevallen kan dit probleem worden opgelost door de malware uit te voeren en een dump uit te voeren, maar er zijn situaties waarin deze methode niet geschikt is. Als de malware bijvoorbeeld een encryptor is, als deze de geheugenregio's beschermt tegen dumpen, als de code detectiemechanismen voor virtuele machines bevat, of als de malware onmiddellijk na het starten opnieuw opstart. In dergelijke gevallen wordt gebruik gemaakt van het zogenaamde “semi-automatische” uitpakken, dat wil zeggen dat de onderzoeker volledige controle over het proces heeft en op elk moment kan ingrijpen. Laten we deze procedure eens bekijken aan de hand van drie voorbeelden uit de AgentTesla-familie als voorbeeld. Dit is een relatief onschadelijke malware als u de netwerktoegang uitschakelt.

Monster nr. 1

Het bronbestand is een MS Word-document dat misbruik maakt van de kwetsbaarheid CVE-2017-11882.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Als gevolg hiervan wordt de payload gedownload en gelanceerd.

Analyse van de procesboom en gedragsmarkers laat een injectie in het proces zien RegAsm.exe.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Er zijn gedragskenmerken die kenmerkend zijn voor AgentTesla.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Het gedownloade voorbeeld is het uitvoerbare voorbeeld . NET-bestand beschermd door een beschermer .NET-reactor.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Laten we het openen in het hulpprogramma dnSpy x86 en ga verder naar het instappunt.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Door naar de functie te gaan DatumTijdOffset, zullen we de initialisatiecode voor het nieuwe vinden . NET-module. Laten we breekpunt op de lijn waarin we geïnteresseerd zijn en voer het bestand uit.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
In een van de geretourneerde buffers ziet u de MZ-handtekening (0x4D 0x5A). Laten we het redden.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Een gedumpt uitvoerbaar bestand is een dynamische bibliotheek die een lader is, d.w.z. haalt de payload uit de resourcesectie en start deze.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Tegelijkertijd zijn de noodzakelijke hulpbronnen zelf niet aanwezig op de stortplaats. Ze zitten in het oudermonster.

Nut dnSpy heeft twee uiterst nuttige functionaliteiten waarmee we vrij snel een “Frankenstein” kunnen maken van twee gerelateerde bestanden.

  1. Met de eerste kunt u een dynamische bibliotheek in het bovenliggende voorbeeld 'plakken'.

    Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3

  2. De tweede is het herschrijven van de functiecode op het toegangspunt om de gewenste methode van de ingevoegde dynamische bibliotheek aan te roepen.

    Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3

We redden onze “Frankenstein”, set breekpunt op de regel retourneert een buffer met gedecodeerde bronnen, en produceert een dump naar analogie met de vorige fase.

De tweede dump is ingeschreven VB.NET een uitvoerbaar bestand dat wordt beschermd door een bij ons bekende beschermer ConfuserEx.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Nadat we de beschermer hebben verwijderd, gebruiken we de eerder geschreven YARA-regels en zorgen we ervoor dat de uitgepakte malware echt AgentTesla is.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3

Monster nr. 2

Het bronbestand is een MS Excel-document. Een ingebouwde macro zorgt ervoor dat kwaadaardige code wordt uitgevoerd.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Als gevolg hiervan wordt het PowerShell-script gestart.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Het script decodeert de C#-code en draagt ​​de controle erover over. De code zelf is een bootloader, zoals ook te zien is in het sandboxrapport.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
De payload is een uitvoerbaar bestand . NET-bestand.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Het bestand openen in dnSpy x86, je kunt zien dat het versluierd is. Verduistering verwijderen met behulp van het hulpprogramma de4dot en ga terug naar de analyse.

Wanneer u de code onderzoekt, ontdekt u mogelijk de volgende functie:

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
De gecodeerde lijnen zijn opvallend Ingangspunt и inroepen. We zetten breekpunt naar de eerste regel, voer de bufferwaarde uit en sla deze op byte_0.

Op de dump staat weer een applicatie op . NET en beschermd ConfuserEx.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
We verwijderen verduistering met behulp van de4dot en uploaden naar dnSpy. Uit de dossierbeschrijving begrijpen wij dat wij hiermee te maken hebben CyaX-Sharp-lader.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Deze lader beschikt over uitgebreide anti-analysefunctionaliteit.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Deze functionaliteit omvat het omzeilen van ingebouwde Windows-beveiligingssystemen, het uitschakelen van Windows Defender, evenals detectiemechanismen voor sandbox- en virtuele machines. Het is mogelijk om de payload van het netwerk te laden of op te slaan in de resourcesectie. De lancering wordt uitgevoerd door middel van injectie in het eigen proces, in een duplicaat van het eigen proces of in processen MSBuild.exe, vbc.exe и RegSvcs.exe afhankelijk van de door de aanvaller gekozen parameter.

Voor ons zijn ze echter minder belangrijk dan AntiDump-functie die toevoegt ConfuserEx. De broncode is te vinden op GitHub.

Om de bescherming uit te schakelen, zullen we van de gelegenheid gebruik maken dnSpy, waarmee u kunt bewerken IL-code.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opslaan en installeren breekpunt naar de regel voor het aanroepen van de decoderingsfunctie van de payload. Het bevindt zich in de constructor van de hoofdklasse.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
We lanceren en dumpen de lading. Met behulp van de eerder geschreven YARA-regels zorgen we ervoor dat dit AgentTesla is.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3

Monster nr. 3

Het bronbestand is het uitvoerbare bestand VB Native PE32-bestand.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Entropieanalyse toont de aanwezigheid van een groot stuk gecodeerde gegevens aan.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Bij het analyseren van het aanvraagformulier in VB-decompiler Mogelijk ziet u een vreemde korrelige achtergrond.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Entropie grafiek bmp-image is identiek aan de entropiegrafiek van het originele bestand en de grootte is 85% van de bestandsgrootte.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Het algemene uiterlijk van de afbeelding duidt op het gebruik van steganografie.

Laten we letten op het uiterlijk van de procesboom, evenals op de aanwezigheid van een injectiemarkering.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Dit geeft aan dat het uitpakken bezig is. Voor Visual Basic-laders (ook bekend als VBKrypt of VInjector) typisch gebruik shellcode om de lading te initialiseren, maar ook om de injectie zelf uit te voeren.

Analyse in VB-decompiler toonde de aanwezigheid van een gebeurtenis aan Laden bij het formulier FegatassocLuchtballon2.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Laten we gaan naar IDA-professional naar het opgegeven adres en bestudeer de functie. De code is zwaar versluierd. Het fragment dat ons interesseert, wordt hieronder weergegeven.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Hier wordt de adresruimte van het proces gescand op een handtekening. Deze aanpak is uiterst twijfelachtig.

Ten eerste het startadres van het scannen 0x400100. Deze waarde is statisch en wordt niet aangepast wanneer de basis wordt verschoven. In ideale kasomstandigheden zal dit het einde aangeven PE-de header van het uitvoerbare bestand. De database is echter niet statisch; de waarde ervan kan veranderen, en het zoeken naar het echte adres van de vereiste handtekening kan erg lang duren, ook al veroorzaakt dit geen overloop van variabelen.

Ten tweede de betekenis van de handtekening iWGK. Ik denk dat het duidelijk is dat 4 bytes te klein is om uniciteit te garanderen. En als je rekening houdt met het eerste punt, is de kans op een fout vrij groot.

In feite is het vereiste fragment bevestigd aan het uiteinde van het eerder gevonden fragment bmp-foto's door offset 0xA1D0D.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
executie shell-code in twee fasen uitgevoerd. De eerste ontcijfert het hoofdgedeelte. In dit geval wordt de sleutel bepaald door brute kracht.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Dump de gedecodeerde versie shell-code en kijk naar de lijnen.

Ten eerste kennen we nu de functie om een ​​onderliggend proces te creëren: CreateProcessInternalW.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Ten tweede werden we ons bewust van het mechanisme van fixatie in het systeem.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Laten we teruggaan naar het oorspronkelijke proces. Laten we breekpunt op CreateProcessInternalW en doorgaan met de uitvoering. Vervolgens zien we het verband NtGetContextThread/NtSetContextThread, waardoor het startadres van de uitvoering wordt gewijzigd in het adres ShellCode.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
We maken verbinding met het gemaakte proces met een debugger en activeren de gebeurtenis Onderbreken bij het laden/ontladen van de bibliotheek, hervat het proces en wacht tot het is geladen . NET-bibliotheken.

Verder gebruiken ProcessHacker dumpregio's met onverpakte . NET-sollicitatie.

We stoppen alle processen en verwijderen de kopie van de malware die in het systeem is ingebed.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Het gedumpte bestand wordt beschermd door een beschermer .NET-reactor, die eenvoudig kan worden verwijderd met een hulpprogramma de4dot.

Opkomst mislukt: laten we AgentTesla blootstellen aan schoon water. Deel 3
Met behulp van de eerder geschreven YARA-regels zorgen we ervoor dat dit AgentTesla is.

Samenvattend

We hebben dus in detail het proces van het semi-automatisch uitpakken van monsters gedemonstreerd met behulp van drie mini-cases als voorbeeld, en hebben ook malware geanalyseerd op basis van een volwaardige case, waarbij we ontdekten dat het onderzochte monster AgentTesla is, waarbij we de functionaliteit en een volledige lijst van indicatoren van compromis.

De analyse van het kwaadaardige object dat we hebben uitgevoerd, vergt veel tijd en moeite, en dit werk moet worden uitgevoerd door een speciale medewerker van het bedrijf, maar niet alle bedrijven zijn bereid een analist in dienst te nemen.

Een van de diensten van het Group-IB Laboratory of Computer Forensics and Malicious Code Analysis is de reactie op cyberincidenten. En zodat klanten geen tijd verspillen met het goedkeuren van documenten en het bespreken ervan tijdens een cyberaanval, lanceerde Group-IB Houder voor incidentrespons, een incidentresponsservice vóór abonnement die ook een stap voor malware-analyse omvat. Meer informatie hierover kunt u vinden hier.

Als u nog eens wilt bestuderen hoe AgentTesla-monsters worden uitgepakt en wilt zien hoe een CERT Group-IB-specialist dat doet, kunt u de webinar-opname over dit onderwerp downloaden hier.

Bron: www.habr.com

Voeg een reactie