Panoramica
Per diversi anni, i ricercatori di Proofpoint hanno monitorato l’uso dei downloader di primo livello, utilizzati dagli attori delle minacce per installare altre forme di malware durante e dopo le loro campagne e-mail dannose. In particolare, negli ultimi due anni, questi downloader sono diventati sempre più robusti, fornendo funzionalità avanzate di profilazione e targeting.
Più importante, i downloader e altre minacce informatiche come botnet e trojan bancari hanno sostituito il ransomware come payload primario, dando agli attori delle minacce la flessibilità di distribuire una gamma di malware nelle infezioni secondarie. Ad esempio, uno dei più prevalenti, Smoke Loader, è stato ampiamente utilizzato per far cadere payload come Ursnif e The Trick banking Trojan, oltre a utilizzare i propri moduli per credenziali e altre informazioni e furto di dati, tra le altre funzioni dannose.
Dalla fine di agosto 2019, i ricercatori di Proofpoint hanno seguito lo sviluppo e la vendita di un nuovo caricatore modulare chiamato Buer dai suoi autori. Buer ha caratteristiche che sono altamente competitive con Smoke Loader, viene venduto attivamente in importanti mercati clandestini ed è destinato ad attori d’uso che cercano una soluzione chiavi in mano, off-the-shelf.
Campagne
Al 28 agosto 2019
Il 28 agosto, i ricercatori di Proofpoint hanno osservato messaggi e-mail dannosi che sembrano rispondere a precedenti conversazioni e-mail legittime. Contenevano allegati Microsoft Word che utilizzano le macro di Microsoft Office per scaricare il payload della fase successiva.
Figura 1: Esempio di allegato Microsoft Word utilizzato nella campagna del 28 agosto 2019
Abbiamo osservato che il payload della fase successiva viene scaricato da URL che includono:
hxxp://jf8df87sdfd.yesteryearrestorationsnet/gate.php
hxxp://93345fdd.libertycolegioscom/gate.php
Il payload scaricato si chiamava verinstere222.xls o verinstere33.exe (una convenzione di denominazione usata dall’attore in quel periodo). Invece della variante Dreambot di Ursnif frequentemente associata a questo attore, il carico utile era un caricatore non documentato non precedentemente osservato in natura.
Nelle seguenti settimane di settembre e ottobre, i ricercatori di Proofpoint e altri membri della comunità infosec hanno osservato diverse campagne dallo stesso attore che lasciavano cadere la variante Dreambot di Ursnif o questo nuovo caricatore.
Il 10 ottobre 2019
I ricercatori di Proofpoint hanno osservato una campagna di malvertising in Australia che reindirizzava al Fallout Exploit Kit (EK) lasciando cadere il nuovo caricatore.
Figura 2: traccia del traffico di rete HTTP con l’EK di Fallout che sfrutta i browser vulnerabili
Il caricatore ha poi lasciato cadere diversi payload di malware di secondo stadio tra cui KPOT stealer, Amadey e Smoke Loader.
Il 21 ottobre 2019
Dall’inizio di luglio, i ricercatori di Proofpoint hanno osservato circa 100 campagne che coinvolgono quasi esclusivamente Ostap caricando diverse istanze di The Trick. Il 21, tuttavia, i ricercatori di Proofpoint hanno osservato messaggi di posta elettronica dannosi con oggetto come “Penalty Notice # PKJWVBP” contenenti allegati Microsoft Word. I documenti contenevano macro che, se attivate, avrebbero eseguito Ostap. Abbiamo osservato Ostap scaricare questo caricatore da
hxxps://185.130.104187/nana/kum.php?pi=18b&
che a sua volta ha caricato The Trick “ono22” dal suo C&C: garrisontxus
Figura 3: Traffico di rete osservato una volta abilitata la macro nei documenti malevoli.
Figura 4: Esempio di allegato Microsoft Word utilizzato nella campagna del 21 ottobre
Marketplace & Analisi delle caratteristiche
Perché abbiamo iniziato a osservare questo nuovo caricatore in uso in più campagne distinte, ci aspettavamo che fosse venduto in un mercato sotterraneo a più attori. Inoltre, abbiamo scoperto un annuncio del 16 agosto su un forum clandestino che descriveva un caricatore chiamato “Buer” che corrispondeva alla funzionalità del malware osservato nelle campagne di cui sopra.
Le caratteristiche aggiunte e pubblicizzate nelle settimane successive corrispondono esattamente all’evoluzione del caricatore trovato in queste campagne.
Abbiamo recuperato il testo di un messaggio sulla bacheca dell’autore, in russo, che richiedeva un pagamento di 400 dollari per il malware e offriva i propri servizi per impostare il software per i potenziali clienti in modo da renderlo operativo. L’autore nota anche che gli aggiornamenti e le correzioni dei bug sono gratuiti, ma c’è un supplemento di 25 dollari per la “ricostruzione a nuovi indirizzi”
Il seguente testo, che Proofpoint ha anche estratto dal mercato clandestino, e si presume sia stato scritto dall’autore del malware, è un riassunto della funzionalità del caricatore come descritto nell’originale russo:
Figura 5. Testo dal post del forum sotterraneo che descrive la funzionalità del bot Buer Loader
Similmente, l’annuncio elenca anche la funzionalità del pannello di controllo. L’autore nota che il bot modulare è scritto interamente in C, utilizzando un pannello di controllo scritto in .NET Core, sottolineando prestazioni più elevate sia nel client che nel server grazie alla scelta del linguaggio di programmazione.
- Come da descrizione, il bot ha un carico totale di 55-60 kilobyte, funziona come un eseguibile nativo di Windows e una libreria a collegamento dinamico, funziona interamente in memoria residente ed è compatibile con i sistemi operativi Microsoft Windows a 32 e 64 bit.
- Il bot comunica su una connessione HTTPS e può essere aggiornato in remoto dal pannello di controllo dopo la decriptazione e la ricostruzione.
- L’autore nota anche che il caricatore viene eseguito come un processo surrogato di un’applicazione di fiducia e funziona utilizzando i privilegi di livello utente.
- In particolare, il software non verrà eseguito nel CIS (ex stati sovietici, come la Russia).
L’annuncio descrive le seguenti caratteristiche per il server e il pannello di controllo:
- Il pannello di controllo è pubblicizzato come scritto anche in .NET Core, notando la facile installazione su sistemi server Ubuntu / Debian Linux.
- Il server fornisce una vasta gamma di statistiche, compresi i contatori per i bot online, vivi, morti e totali; un aggiornamento in tempo reale per la lista dei bot; un contatore di download di file; e una capacità di filtrare i sistemi per tipo di sistema operativo, diritti di accesso dei bot installati e numero di core logici della CPU.
- I file scaricati dai sistemi infetti sono memorizzati in forma crittografata sul server, con accesso garantito da un token.
- Più importante, come i bot stessi, l’autore nota che il server non elabora le richieste API inviate da paesi membri della CSI.
Il post sul forum includeva anche note tecniche di rilascio per il caricatore e il pannello di controllo Buer (versione 1.1.2). Nell’introduzione, l’autore ha notato che il lancio del caricatore ora consiste di tre passi — se i primi due passi non hanno successo sul sistema infetto, e l’iniezione nel processo surrogato fallisce (per esempio, a causa di incompatibilità con la cripta stessa), il caricatore verrà eseguito invece sotto il proprio processo.
Le note di rilascio indicano quanto segue per il caricatore:
- Il caricatore utilizza un’architettura FastFlux.
- Il caricatore funziona da sotto un processo affidabile all’interno di Microsoft Windows. Il processo MemLoadEx ora supporta l’exe x64 come applicazione fidata.
- MemLoad è stato aggiornato e ora supporta l’exe nativo x32.
Le note di rilascio richiamano le seguenti caratteristiche per il pannello di controllo:
- L’accesso all’API è realizzato usando HTTPS con supporto per certificati autofirmati.
- Supporto per la modifica delle attività nel pannello. L’utente può fermare il compito durante l’esecuzione e cambiare il carico utile e il numero di esecuzioni.
- Aggiunta la possibilità di creare un compito per ID bot. Molto adatto per i carichi di punti.
- Una finestra passo-passo per la creazione di compiti.
- Una notifica che permette di conoscere i bot necessari online.
- L’unicità dell’ID del bot è stata aumentata.
- Sono stati aggiunti tag al pannello, permettendo di ordinare i bot per azioni successive con loro.
- Visualizza il nome del computer nella tabella.
- Migliorata la compatibilità crittografica.
- Aggiunta la cronologia dei bot.
- “Il pannello ora si espande a Docker” (supporto contenitore Docker).
- Nota del ricercatore Proofpoint: presumiamo che questa caratteristica sia per la facilità di integrazione negli host Docker in leasing, semplificando l’installazione, anche se potenzialmente il pannello/C&C potrebbe essere installato su un host Docker compromesso.
- Validazione del file sul pannello. Ora il pannello non perderà il file che il caricatore non sarà in grado di scaricare e avviserà il cliente di questo.
- I compiti possono ora essere ripetuti.
Infine, l’autore ha descritto le seguenti modifiche tecniche per la versione 1.1.9. Queste sono degne di nota perché dimostrano che il malware è in fase di sviluppo attivo e professionale.
- Il caricatore ha acquisito un nuovo metodo per lanciare External per i file locali. I vantaggi del metodo sono l’unicità e nessun CreateProcess / ShellExecute attraverso il caricatore. Il lancio produce un processo fidato senza alcun comando ad esso.
- Il pannello ha la possibilità di taggare tutti i bot che hanno eseguito un compito specifico. Questo permetterà all’utente di distribuire il carico utile a determinati gruppi di bot.
- Implementato API di integrazione. Disponibile la documentazione per essa.
- Aggiunta la possibilità di inviare un file per riferimento in modalità proxy. Il file viene trasferito al bot in forma criptata.
- Il bug del conteggio dei bot per paese è stato risolto e sono stati aggiunti altri miglioramenti.
Schermate del pannello di controllo
Le seguenti schermate del pannello di controllo sono state incluse nella pubblicità underground, mostrando alcune delle capacità di back end disponibili per i clienti, incluso il monitoraggio della telemetria, il filtraggio degli host e altro.
Figura 6: UX del pannello di controllo per il Buer Loader C&C
Figura 7: schermata di monitoraggio della telemetria del bot per il pannello di controllo Buer.
Figura 8: schermata di monitoraggio telemetria bot in modalità dark per il pannello di controllo Buer.
Figura 9: Vista filtro del pannello di controllo che mostra i bot remoti filtrati dall’architettura Microsoft Windows.
Figura 10: Vista del pannello di controllo che mostra la gestione dei file per i compiti del caricatore
Figura 11: Vista del pannello di controllo dei bot remoti ordinati per diritti utente.
Figura 12: Vista pannello di controllo, stato dei compiti
Figura 13: Vista pannello di controllo, creazione di un compito
Analisi del malware
Buer Loader è un nuovo malware downloader che scarica ed esegue ulteriori payload.
Funzioni anti-analisi
Il caricatore contiene alcune funzionalità anti-analisi di base:
- Controlla i debugger ispezionando la NtGlobalFlag nel Process Environment Block (PEB) e nel Thread Environment Block (TEB)
- Controlla le macchine virtuali usando Red Pill , No Pill , e meccanismi correlati
- Controlla il locale per assicurarsi che il malware non sia in esecuzione in determinati paesi (Figura 14)
Figura 14: Controllo del malware per assicurarsi che non sia in esecuzione in paesi specifici
Persistenza
La persistenza è impostata configurando una voce di registro RunOnce. A seconda della versione, la voce del registro eseguirà il malware direttamente o pianificherà un’attività per eseguirlo.
Stringhe cifrate
Questo campione contiene una funzione per cifrare le stringhe.
Figura 15: Sequenza di decrittazione per le stringhe
La seguente funzione è un esempio di come decrittare le stringhe criptate in Ghidra usando Jython:
Figura 16: Sequenza di decrittazione per le stringhe (versione Python)
Figura 17: Esempio di decrittazione delle stringhe
Chiamate API Windows
Questo esempio usa un algoritmo di hashing per risolvere la maggior parte delle sue chiamate API Windows. L’algoritmo di hashing assicura che ogni carattere del nome API sia una lettera maiuscola. Poi ruota a destra (ROR) ogni carattere di 13 e li somma.
Figura 18: Algoritmo di hashing per risolvere le chiamate Windows API
La seguente funzione è un esempio di come Python può essere usato per aiutare a risolvere le chiamate API.
Figura 19: Esempio di script Python usato per aiutare a risolvere le chiamate API di Windows con hash
La seguente tabella contiene una lista di alcuni hash selezionati usati e il loro corrispondente nome API di Windows:
CreateMutexW |
0xed619452 |
OpenMutexW |
0x7bffe25e |
CreateProcessW |
0xb4f0f46f |
WinHttpOpen |
0xaf7f658e |
WinHttpCrackUrl |
0x8ef04f02 |
WinHttpConnect |
0x9f47a05e |
WinHttpOpenRequest |
0x1dd1d38d |
Tabella 1: Chiamate API di Windows con hash selezionati
Comando e controllo
Le funzioni di comando e controllo (C&C) sono gestite tramite richieste HTTP(S) GET. Un esempio di beacon di comando assomiglia alla figura 20:
Figura 20: Esempio di beacon di comando
Queste richieste vanno all'”update API” e contengono un parametro criptato. Questo parametro può essere decifrato da:
- decodifica Base64
- decodifica Hex
- decifrazioneRC4 (la chiave usata nei campioni analizzati era “CRYPTO_KEY”)
Un esempio del parametro in chiaro è:
88a5e68a2047fa5ebdc095a8500d8fae565a6b225ce94956e194b4a0e8a515ae|ab21d61b35a8d1dc4ffb3cc4b75094c31b8c00de3ffaaa17ce1ad15e876dbd1f|Windows 7|x64|4|Admin|RFEZOWGZPBYYOI
Contiene dati delimitati da pipedelimitati da pipe che consistono in:
- Identificativo del bot (SHA-256 hex digest di vari parametri di sistema come GUID e nome del profilo hardware, nome del computer, numero di serie del volume, e CPUID)
- Un hash SHA-256 della propria immagine eseguibile
- Versione Windows
- Tipo di architettura
- Numero di processori
- Privilegi dell’utente
- Nome del computer
Un esempio di risposta del beacon di comando è mostrato nella Figura 21:
Figura 21: Esempio di risposta al beacon di comando
Può essere decifrata in modo simile al parametro di richiesta sopra, eccetto che i byte codificati in esadecimale sono separati da caratteri trattino. Un esempio di risposta in chiaro è mostrato nella Figura 22:
Figura 22: Risposta in chiaro del beacon di comando
Il testo decriptato è un oggetto JSON contenente varie opzioni su come scaricare ed eseguire un payload:
- type – ci sono due tipi:
- update – update self
- download_and_exec – download e execute
- options – specifica le opzioni per il payload da scaricare:
- Hash – applicabile solo al tipo “update” per determinare se è disponibile un nuovo aggiornamento
- x64 – se il payload è a 64 bit
- FileType – non usato nei campioni analizzati
- AssemblyType – non usato nei campioni analizzati
- AccessToken – usato per scaricare il payload (vedi sotto)
- External – indica se il payload viene scaricato dal C&C o da un URL esterno
- method – metodo di esecuzione:
- exelocal – crea processo
- memload – inietta e carica manualmente il payload
- memloadex – inietta e carica manualmente il payload
- loaddllmem – inietta e carica manualmente il payload
- parameters – parametri da passare sulla linea di comando
- pathToDrop – non usato nei campioni analizzati
- autorun – indica se impostare la persistenza Registry RunOnce per il payload
- modules – vedi la sezione Modules qui sotto
- timeout – non usato nei campioni analizzati
I payload scaricati dal server C&C sono fatti tramite richieste alla “download API” come visto nella Figura 23:
Figura 23: Scaricare il payload da C&C
Un esempio del parametro di richiesta in chiaro è mostrato sotto:
88a5e68a2047fa5ebdc095a8500d8fae565a6b225ce94956e194b4a0e8a515ae|58007044-67d4-4963-9f5f-400dfbc69e74
Contiene l’ID del bot e “AccessToken” dalla risposta del beacon di comando. Se il carico utile viene scaricato dal C&C, è criptato con RC4. Nei campioni analizzati la chiave era “CRYPTO_KEY”.
Moduli
La risposta del beacon di comando contiene una lista di “moduli”. I ricercatori di Proofpoint non hanno ancora osservato l’utilizzo di moduli Buer in natura, ma in base al codice questa lista conterrà AccessTokens del modulo. Il nome del file del modulo viene interrogato inviando un AccessToken all'”API del modulo” del C&C. Il modulo sarà poi scaricato usando la “downloadmodule API”. Una volta scaricato e decriptato, viene caricato utilizzando il metodo “loaddllmem”.
Conclusione
Un nuovo downloader, Buer, è apparso recentemente in una varietà di campagne, tramite malvertising che porta a kit di exploit; come payload secondario tramite Ostap; e come payload primario che scarica malware come The Trick banking Trojan.
Il nuovo caricatore ha robuste caratteristiche di geotargeting, profilazione del sistema e anti-analisi ed è attualmente commercializzato su forum underground con servizi di installazione a valore aggiunto. L’autore (o gli autori) di lingua russa sta sviluppando attivamente il downloader con pannelli di controllo sofisticati e un ricco set di funzionalità, rendendo il malware competitivo nei mercati sotterranei.
Il downloader è scritto in C mentre il pannello di controllo è scritto in .NET core, indicando l’ottimizzazione per le prestazioni e l’ingombro ridotto del download, così come la capacità di installare facilmente il pannello di controllo sui server Linux – il supporto integrato per i container Docker faciliterà ulteriormente la sua proliferazione sugli host in affitto utilizzati per scopi dannosi, e potenzialmente, anche sugli host compromessi. Quest’ultima capacità è inclusa nelle sue caratteristiche pubblicizzate e nelle note di rilascio.
Got it, but I don't know what this is. Downloaded Word doc: https://t.co/Y8tX8wTsOa – Follow-up EXE persistent on the infected Windows host: https://t.co/sowNIRDPbI pic.twitter.com/4isqbsMAa9
— Brad (@malware_traffic) October 11, 2019
https://www.cert.pl/en/news/single/ostap-malware-analysis-backswap-dropper/
https://www.proofpoint.com/us/threat-insight/post/ostap-bender-400-ways-make-population-part-with-their-money
https://www.aldeid.com/wiki/X86-assembly/Instructions/sidt
https://www.aldeid.com/wiki/X86-assembly/Instructions/sldt
Indicatori di compromissione (IOCs)
IOC |
IOC Type |
Description |
fa699eab565f613df563ce47de5b82bde16d69c5d0c05ec9fc7f8d86ad7682ce |
sha256 |
|
http[://45.76.247[.177:8080/api/update/ |
URL |
Buer C&C callback |
6c694df8bde06ffebb8a259bebbae8d123effd58c9dd86564f7f70307443ccd0 |
sha256 |
|
197163b6eb2114f3b565391f43b44fb8d61531a23758e35b11ef0dc44d349e90 |
sha256 |
|
https[://173.212.204[.171/api/update/ |
URL |
Buer C&C callback |
9e8db7a722cc2fa13101a306343039e8783df66f4d1ba83ed6e1fe13eebaec73 |
sha256 |
(Fallout Drop) |
http[://134.0.119[.53:8080/api/update/ |
URL |
Buer C&C callback |
ab21d61b35a8d1dc4ffb3cc4b75094c31b8c00de3ffaaa17ce1ad15e876dbd1f |
sha256 |
(Ostap drop) |
https[://garrisontx[.us/api/update/ |
URL |
Buer C&C callback |
https[://185.130.104[.187/nana/kum.php?pi=18b |
URL |
Ostap instance dropping Buer – 2019-10-21 |
753276c5887ba5cb818360e797b94d1306069c6871b61f60ecc0d31c78c6d31e |
sha256 |
Buer 2019-11-28 |
ffload01[.top|185.125.58[.11 ffload01[.top|185.186.141[.129 |
dominio|IP |
Buer C&C 2019-11-28 |
Firme ET e ETPRO Suricata/Snort
2029077 ||| ET TROJAN Buer Loader Richiesta di aggiornamento
2029079 || ET TROJAN Buer Loader Risposta
2029078 || ET TROJAN Buer Loader Richiesta di download
2839684 || ET TROJAN Buer Loader Download riuscito del carico utile
2029080 || Certificato SSL/TLS osservato (Buer Loader)