Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3

Con questo articolo completiamo la serie di pubblicazioni dedicate all'analisi dei software dannosi. IN la prima parte Abbiamo analizzato dettagliatamente un file infetto che un'azienda europea ha ricevuto per posta e lì abbiamo scoperto lo spyware AgentTesla. In la seconda parte ha descritto i risultati di un'analisi passo passo del modulo principale AgentTesla.

Oggi Ilya Pomerantsev, specialista nell'analisi del malware presso il CERT Group-IB, parlerà della prima fase dell'analisi del malware: il disimballaggio semiautomatico dei campioni di AgentTesla utilizzando l'esempio di tre mini-casi tratti dalla pratica degli specialisti del CERT Group-IB.

In genere, la prima fase dell'analisi del malware è la rimozione della protezione sotto forma di packer, cryptor, protettore o caricatore. Nella maggior parte dei casi, questo problema può essere risolto eseguendo il malware ed eseguendo un dump, ma ci sono situazioni in cui questo metodo non è adatto. Ad esempio, se il malware è un crittografatore, se protegge le sue regioni di memoria dal dumping, se il codice contiene meccanismi di rilevamento della macchina virtuale o se il malware si riavvia immediatamente dopo l'avvio. In questi casi viene utilizzato il cosiddetto disimballaggio “semiautomatico”, ovvero il ricercatore ha il controllo completo del processo e può intervenire in qualsiasi momento. Consideriamo questa procedura utilizzando come esempio tre campioni della famiglia AgentTesla. Si tratta di un malware relativamente innocuo se si disabilita l'accesso alla rete.

Campione n. 1

Il file sorgente è un documento MS Word che sfrutta la vulnerabilità CVE-2017-11882.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Di conseguenza, il payload viene scaricato e avviato.

L'analisi dell'albero del processo e dei marcatori comportamentali mostra l'inserimento nel processo RegAsm.exe.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Esistono marcatori comportamentali caratteristici di AgentTesla.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
L'esempio scaricato è quello eseguibile .NET-file protetto da un protettore Reattore .NET.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Apriamolo nell'utility dnSpy x86 e passare al punto di ingresso.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Andando alla funzione DateTimeOffset, troveremo il codice di inizializzazione per il nuovo .NET-modulo. Mettiamo punto di interruzione sulla riga che ci interessa ed eseguiamo il file.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
In uno dei buffer restituiti puoi vedere la firma MZ (0x4D 0x5A). Salviamolo.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Un file eseguibile scaricato è una libreria dinamica che è un caricatore, ad es. estrae il payload dalla sezione delle risorse e lo avvia.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Allo stesso tempo, nella discarica non sono presenti le risorse necessarie. Sono nel campione genitore.

Utilità dnSpy ha due funzionalità estremamente utili che ci aiuteranno a creare abbastanza rapidamente un "Frankenstein" da due file correlati.

  1. Il primo consente di “incollare” una libreria dinamica nel campione genitore.

    Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3

  2. Il secondo consiste nel riscrivere il codice della funzione nel punto di ingresso per chiamare il metodo desiderato della libreria dinamica inserita.

    Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3

Salviamo il nostro set “Frankenstein”. punto di interruzione sulla linea restituisce un buffer con risorse decrittografate e produce un dump analogamente alla fase precedente.

Viene scritto il secondo dump VB.NET un file eseguibile protetto da un protettore a noi familiare Confusore Ex.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Dopo aver rimosso la protezione, utilizziamo le regole YARA scritte in precedenza e ci assicuriamo che il malware decompresso sia davvero AgentTesla.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3

Campione n. 2

Il file sorgente è un documento MS Excel. Una macro incorporata provoca l'esecuzione di codice dannoso.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Di conseguenza, viene avviato lo script PowerShell.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Lo script decrittografa il codice C# e gli trasferisce il controllo. Il codice stesso è un bootloader, come si può vedere anche dal rapporto sandbox.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Il payload è un eseguibile .NET-file.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Aprendo il file in dnSpy x86, puoi vedere che è offuscato. Rimozione dell'offuscamento utilizzando l'utilità de4dot e tornare in analisi.

Esaminando il codice, potresti scoprire la seguente funzione:

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Le linee codificate sono sorprendenti Punto d'entrata и invocare. Abbiamo messo punto di interruzione alla prima riga, esegui e salva il valore del buffer byte_0.

Il dump è ancora una volta un'applicazione attiva .NET e protetto Confusore Ex.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Rimuoviamo l'offuscamento utilizzando de4dot e caricare su dnSpy. Dalla descrizione del file capiamo che ci troviamo di fronte Caricatore CyaX-Sharp.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Questo caricatore ha estese funzionalità anti-analisi.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Questa funzionalità include l'esclusione dei sistemi di protezione integrati di Windows, la disabilitazione di Windows Defender, nonché i meccanismi di rilevamento di sandbox e macchine virtuali. È possibile caricare il payload dalla rete o memorizzarlo nella sezione delle risorse. Il lancio viene eseguito tramite l'inserimento nel proprio processo, in un duplicato del proprio processo o nei processi MSBuild.exe, vbc.exe и RegSvcs.exe a seconda del parametro scelto dall'attaccante.

Tuttavia, per noi sono meno significativi di AntiDump-funzione che aggiunge Confusore Ex. Il suo codice sorgente può essere trovato su GitHub.

Per disabilitare la protezione, sfrutteremo l'opportunità dnSpy, che ti consente di modificare IL-codice.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Salva e installa punto di interruzione alla linea di chiamata della funzione di decrittazione del payload. Si trova nel costruttore della classe principale.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Lanciamo e scarichiamo il carico utile. Utilizzando le regole YARA scritte in precedenza, ci assicuriamo che si tratti di AgentTesla.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3

Campione n. 3

Il file sorgente è l'eseguibile VB nativo PE32-file.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
L'analisi dell'entropia mostra la presenza di una grande quantità di dati crittografati.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Quando si analizza il modulo di domanda in Decompilatore VB potresti notare uno strano sfondo pixelato.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Grafico dell'entropia bmp-immagine è identica al grafico entropico del file originale e la dimensione è pari all'85% della dimensione del file.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
L'aspetto generale dell'immagine indica l'uso della steganografia.

Prestiamo attenzione all'aspetto dell'albero del processo, nonché alla presenza di un indicatore di iniezione.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Ciò indica che è in corso il disimballaggio. Per i caricatori Visual Basic (aka VBKrypt o VBIniettore) uso tipico codice shell per inizializzare il payload, nonché per eseguire l'iniezione stessa.

Analisi dentro Decompilatore VB ha mostrato la presenza di un evento Caricare al modulo FegatassocAirballoon2.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Andiamo a professionista dell'IDA all'indirizzo specificato e studiare la funzione. Il codice è fortemente offuscato. Il frammento che ci interessa è presentato di seguito.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Qui lo spazio degli indirizzi del processo viene scansionato per una firma. Questo approccio è estremamente dubbio.

Innanzitutto, l'indirizzo di inizio della scansione 0x400100. Questo valore è statico e non viene modificato quando la base viene spostata. In condizioni di serra ideali indicherà la fine PE-l'intestazione del file eseguibile. Tuttavia il database non è statico, il suo valore può cambiare e la ricerca dell'indirizzo reale della firma richiesta, sebbene non provochi un overflow variabile, può richiedere molto tempo.

In secondo luogo, il significato della firma iWGK. Penso che sia ovvio che 4 byte sono troppo piccoli per garantire l'unicità. E se prendiamo in considerazione il primo punto, la probabilità di commettere un errore è piuttosto alta.

Infatti, il frammento richiesto è attaccato all'estremità di quello precedentemente trovato bmp-immagini per offset 0xA1D0D.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
esecuzione shellcode effettuato in due fasi. Il primo decifra il corpo principale. In questo caso, la chiave è determinata dalla forza bruta.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Scarica quello decriptato shellcode e guarda le linee.

Innanzitutto, ora conosciamo la funzione per creare un processo figlio: CreateProcessInternalW.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
In secondo luogo, siamo diventati consapevoli del meccanismo di fissazione del sistema.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Torniamo al processo originale. Mettiamo punto di interruzione su CreateProcessInternalW e continuare l'esecuzione. Successivamente vediamo la connessione NtGetContextThread/NtSetContextThread, che modifica l'indirizzo di inizio dell'esecuzione nell'indirizzo ShellCode.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Ci colleghiamo al processo creato con un debugger e attiviamo l'evento Sospendere il caricamento/scaricamento della libreria, riprendere il processo e attendere il caricamento .NET-biblioteche.

Ulteriore utilizzo ProcessHacker regioni di dump contenenti file decompressi .NET-applicazione.

Arrestiamo tutti i processi ed eliminiamo la copia del malware che si è incorporata nel sistema.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Il file scaricato è protetto da una protezione Reattore .NET, che può essere facilmente rimosso utilizzando un'utilità de4dot.

Affluenza fallita: esponiamo l'AgenteTesla all'acqua pulita. Parte 3
Utilizzando le regole YARA scritte in precedenza, ci assicuriamo che si tratti di AgentTesla.

Per riassumere

Quindi, abbiamo dimostrato in dettaglio il processo di decompressione semiautomatica del campione utilizzando tre mini-case come esempio, e abbiamo anche analizzato il malware sulla base di un caso completo, scoprendo che il campione in studio è AgentTesla, stabilendo la sua funzionalità e un elenco completo degli indicatori di compromesso.

L'analisi dell'oggetto dannoso da noi effettuata richiede molto tempo e impegno e questo lavoro dovrebbe essere svolto da un dipendente speciale dell'azienda, ma non tutte le aziende sono pronte ad assumere un analista.

Uno dei servizi forniti dal Laboratorio di Informatica Forense e Analisi dei Codici Maligni del Gruppo-IB è la risposta agli incidenti informatici. E affinché i clienti non perdano tempo ad approvare documenti e discuterli nel mezzo di un attacco informatico, è stato lanciato Group-IB Conservazione della risposta agli incidenti, un servizio di risposta agli incidenti pre-abbonamento che include anche una fase di analisi del malware. Maggiori informazioni a riguardo possono essere trovate qui.

Se vuoi studiare ancora una volta come vengono spacchettati i campioni di AgentTesla e vedere come lo fa uno specialista del CERT Group-IB, puoi scaricare la registrazione del webinar su questo argomento qui.

Fonte: habr.com

Aggiungi un commento