Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3

Med den här artikeln kompletterar vi serien av publikationer som ägnas åt analys av skadlig programvara. I den första delen Vi genomförde en detaljerad analys av en infekterad fil som ett europeiskt företag fick per post och upptäckte AgentTeslas spionprogram där. I den andra delen beskrev resultatet av en steg-för-steg-analys av huvudmodulen i AgentTesla.

Idag kommer Ilya Pomerantsev, en specialist på skadlig programvara vid CERT Group-IB, att prata om det första steget av skadlig kodanalys - halvautomatisk uppackning av AgentTesla-prover med hjälp av exemplet med tre minicase från praktiken av CERT Group-IB-specialister.

Vanligtvis är det första steget i analys av skadlig programvara att ta bort skydd i form av en packare, kryptor, skydd eller laddare. I de flesta fall kan detta problem lösas genom att köra skadlig programvara och utföra en dumpning, men det finns situationer där denna metod inte är lämplig. Till exempel, om skadlig programvara är en kryptering, om den skyddar dess minnesregioner från att dumpas, om koden innehåller mekanismer för upptäckt av virtuella maskiner eller om skadlig programvara startar om direkt efter start. I sådana fall används så kallad ”halvautomatisk” uppackning, det vill säga forskaren har fullständig kontroll över processen och kan ingripa när som helst. Låt oss överväga denna procedur med tre exempel på AgentTesla-familjen som exempel. Detta är en relativt ofarlig skadlig programvara om du inaktiverar dess nätverksåtkomst.

Prov nr 1

Källfilen är ett MS Word-dokument som utnyttjar sårbarheten CVE-2017-11882.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Som ett resultat laddas nyttolasten ner och startas.

Analys av processträdet och beteendemarkörer visar injektion i processen RegAsm.exe.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Det finns beteendemarkörer som är karakteristiska för AgentTesla.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Det nedladdade exemplet är det körbara . NET-fil skyddad av en beskyddare .NET Reactor.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Låt oss öppna det i verktyget dnSpy x86 och gå vidare till ingångspunkten.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Genom att gå till funktionen DatumTimeOffset, hittar vi initieringskoden för den nya . NET-modul. Låt oss sätta brytpunkt på raden vi är intresserade av och kör filen.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
I en av de returnerade buffertarna kan du se MZ-signaturen (0x4D 0x5A). Låt oss spara det.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
En dumpad körbar fil är ett dynamiskt bibliotek som är en loader, d.v.s. extraherar nyttolasten från resurssektionen och startar den.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Samtidigt finns inte de nödvändiga resurserna i sig på soptippen. De finns i föräldraprovet.

Verktyg dnSpy har två extremt användbara funktioner som hjälper oss ganska snabbt att skapa en "Frankenstein" från två relaterade filer.

  1. Den första låter dig "klistra in" ett dynamiskt bibliotek i det överordnade provet.

    Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3

  2. Den andra är att skriva om funktionskoden vid ingångspunkten för att anropa den önskade metoden för det infogade dynamiska biblioteket.

    Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3

Vi sparar vårt "Frankenstein", set brytpunkt på raden som returnerar en buffert med dekrypterade resurser, och producera en dump i analogi med föregående steg.

Den andra dumpningen är inskriven VB.NET en körbar fil som är skyddad av en beskyddare som vi känner till ConfuserEx.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Efter att ha tagit bort skyddet använder vi YARA-reglerna som skrevs tidigare och ser till att den uppackade skadliga programvaran verkligen är AgentTesla.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3

Prov nr 2

Källfilen är ett MS Excel-dokument. Ett inbyggt makro orsakar exekvering av skadlig kod.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Som ett resultat lanseras PowerShell-skriptet.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Skriptet dekrypterar C#-koden och överför kontrollen till den. Själva koden är en bootloader, vilket också kan ses av sandlåderapporten.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Nyttolasten är en körbar . NET-fil.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Öppnar filen i dnSpy x86, kan du se att det är fördunklat. Ta bort obfuskation med hjälp av verktyget de4dot och återgå till analysen.

När du granskar koden kan du upptäcka följande funktion:

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
De kodade raderna är slående Inkörsport и åberopa. Vi lägger brytpunkt till den första raden, kör och spara buffertvärdet byte_0.

Soptippen är återigen en applikation på . NET och skyddad ConfuserEx.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Vi tar bort obfuskation med hjälp av de4dot och ladda upp till dnSpy. Av filbeskrivningen förstår vi att vi står inför CyaX-Sharp lastare.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Denna lastare har omfattande antianalysfunktioner.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Den här funktionen inkluderar att kringgå inbyggda Windows-skyddssystem, inaktivera Windows Defender samt mekanismer för upptäckt av sandlådor och virtuella maskiner. Det är möjligt att ladda nyttolasten från nätverket eller lagra den i resurssektionen. Lansering utförs genom injektion i sin egen process, i en dubblett av sin egen process eller i processer MSBuild.exe, vbc.exe и RegSvcs.exe beroende på den parameter som valts av angriparen.

Men för oss är de mindre betydelsefulla än Antidump-funktion som lägger till ConfuserEx. Dess källkod finns på GitHub.

För att inaktivera skyddet kommer vi att använda tillfället dnSpy, som låter dig redigera IL-koda.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Spara och installera brytpunkt till raden för anrop av nyttolastdekrypteringsfunktionen. Den ligger i konstruktören av huvudklassen.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Vi sjösätter och dumpar nyttolasten. Med de tidigare skrivna YARA-reglerna ser vi till att detta är AgentTesla.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3

Prov nr 3

Källfilen är den körbara filen VB Native PE32-fil.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Entropianalys visar närvaron av en stor bit krypterad data.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Vid analys av ansökningsformuläret i VB Decompiler du kanske märker en konstig pixlad bakgrund.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Entropi graf bmp-image är identisk med entropigrafen för originalfilen, och storleken är 85 % av filstorleken.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Bildens allmänna utseende indikerar användningen av steganografi.

Låt oss vara uppmärksamma på utseendet på processträdet, såväl som närvaron av en injektionsmarkör.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Detta indikerar att uppackning pågår. För Visual Basic-lastare (aka VBKrypt eller VBInjektor) typisk användning skalkod för att initiera nyttolasten, samt att utföra själva injektionen.

Analys i VB Decompiler visade närvaron av en händelse Ladda vid formuläret FegatassocAirballoon2.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Låt oss gå till IDA proffs till angiven adress och studera funktionen. Koden är kraftigt förvirrad. Det fragment som intresserar oss presenteras nedan.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Här skannas processens adressutrymme efter en signatur. Detta tillvägagångssätt är extremt tveksamt.

Först startadressen för skanningen 0x400100. Detta värde är statiskt och justeras inte när basen skiftas. Under idealiska växthusförhållanden kommer det att indikera slutet PE-huvudet för den körbara filen. Databasen är dock inte statisk, dess värde kan ändras, och att söka efter den verkliga adressen för den nödvändiga signaturen, även om det inte kommer att orsaka ett variabelt spill, kan ta mycket lång tid.

För det andra, innebörden av signaturen iWGK. Jag tycker att det är uppenbart att 4 byte är för litet för att garantera unikhet. Och om du tar hänsyn till den första punkten är sannolikheten att göra ett misstag ganska hög.

Faktum är att det nödvändiga fragmentet är fäst vid slutet av det tidigare hittade bmp-bilder med offset 0xA1D0D.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
utförande Skalkod genomförs i två steg. Den första dechiffrerar huvuddelen. I det här fallet bestäms nyckeln av brute force.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Dumpa den dekrypterade Skalkod och titta på linjerna.

Först känner vi nu till funktionen för att skapa en underordnad process: CreateProcessInternalW.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
För det andra blev vi medvetna om fixeringsmekanismen i systemet.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Låt oss gå tillbaka till den ursprungliga processen. Låt oss sätta brytpunkt CreateProcessInternalW och fortsätta utförandet. Därefter ser vi sambandet NtGetContextThread/NtSetContextThread, vilket ändrar exekveringsstartadressen till adressen ShellCode.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Vi ansluter till den skapade processen med en debugger och aktiverar händelsen Stäng av bibliotekets laddning/avlastning, återuppta processen och vänta på att laddas . NET-bibliotek.

Använder vidare ProcessHacker dumpningsområden som innehåller uppackade . NET-Ansökan.

Vi stoppar alla processer och tar bort kopian av skadlig programvara som har blivit inbäddad i systemet.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Den dumpade filen är skyddad av ett skydd .NET Reactor, som enkelt kan tas bort med hjälp av ett verktyg de4dot.

Valdeltagandet misslyckades: låt oss utsätta AgentTesla för rent vatten. Del 3
Genom att använda YARA-reglerna som skrevs tidigare ser vi till att detta är AgentTesla.

för att sammanfatta

Så vi demonstrerade i detalj processen med halvautomatisk provuppackning med hjälp av tre mini-fodral som exempel, och analyserade också skadlig programvara baserat på ett fullfjädrat fall, och upptäckte att provet som studeras är AgentTesla, vilket etablerade dess funktionalitet och en fullständig lista över indikatorer på kompromiss.

Analysen av det skadliga objektet som vi utförde kräver mycket tid och ansträngning, och detta arbete bör utföras av en speciell anställd i företaget, men alla företag är inte redo att anställa en analytiker.

En av tjänsterna som tillhandahålls av Group-IB Laboratory of Computer Forensics and Malicious Code Analysis är svar på cyberincidenter. Och för att kunderna inte ska slösa tid på att godkänna dokument och diskutera dem mitt under en cyberattack lanserade Group-IB Incident Response Retainer, en incidentsvarstjänst före prenumeration som också inkluderar ett steg för analys av skadlig programvara. Mer information om detta finns här.

Om du återigen vill studera hur AgentTesla-prover packas upp och se hur en CERT Group-IB-specialist gör det, kan du ladda ner webbinariets inspelning om detta ämne här.

Källa: will.com

Lägg en kommentar