Qakbot, noto anche come Qbot, è un malware bancario e infostealer che si diffonde principalmente attraverso e-mail di phishing e exploit kit. È stato scoperto per la prima volta nel 2008 e da allora è stato un problema significativo per le organizzazioni e gli utenti a livello globale. Qakbot è progettato per infettare i sistemi operativi Windows e prendere il controllo di computer e reti aziendali. Una volta che un sistema è compromesso, il malware inizia a raccogliere informazioni sensibili come credenziali di accesso, dati bancari e informazioni personali. Può anche monitorare l’attività degli utenti, registrare le tastiere e rubare le password memorizzate. Inoltre, Qakbot ha funzionalità di propagazione che gli permettono di diffondersi all’interno di una rete aziendale, infettando altri dispositivi e compromettendo ulteriormente la sicurezza. Il malware può anche eseguire attività dannose come il download di altri malware, l’esecuzione di attacchi DDoS (Distributed Denial of Service) e la distribuzione di spam.
In questa analisi è stato preso in considerazione il suo impiego per la diffusione del ransomware Black Basta.
Elementi importanti dell’analisi:
- Compilazione in Delphi
- Alta entropia della sezione CODE
- Funzioni di registry management
- Funzioni di threading per esecuzioni concorrenziali
- Keyboard events capturing
- Sockets connections
- Encoding di messaggi
- Sottrazione di credenziali
- Utilizzo del modulo UrlMon per effettuare connessioni esterne
- String encryption per effettuare evasion e code hiding
- Connessioni Command and Control
- Enumerazione di processi di security monitoring da terminare
Introduzione e analisi statica
Nella presente analisi è stato preso in considerazione un sample del threat Qakbot avente hash b9dd2d79e9b78f0d3f439c302f19b0bbec463f135701ab2ea99c27f48fa2eb1a, compilato in Delphi e con un coefficiente d’entropia piuttosto alto relativamente alle sezioni CODE e .reloc. Qakbot è una tipologia di minaccia scoperta nel 2008 che mira principalmente al furto di credenziali ed è stato classificato come uno dei threat più diffusi nel 2021. Dal momento che esso effettua anche tasks di Remote Code Execution, tra gli obiettivi di Qakbot vi è anche la distribuzione di ulteriori minacce, soprattutto ransomware. Tra i ransomware che sono stati distribuiti mediante l’utilizzo di Qakbot vi sono REvil, ProLock e Lockbit e, appunto, Black Basta (il caso specifico del presente articolo). Qakbot è stato costantemente aggiornato con nuove peculiarità, nello specifico nel 2015 sono state rilasciate nuove versioni aggiornate, nel 2020 il threat landscape ha visto un incremento significativo del 465 %. Nel 2021 vi è stata una grande compromissione dell’azienda di lavorazione della carne JBS, richiedendo un riscatto di 11 milioni di dollari. [0]
Di seguito un dettaglio del disassemblato del sample, ove si evincono istruzioni, ad esempio stosb per trasferire locazioni di memoria, jp che rappresenta un salto condizionale ad una data istruzione nel caso in cui il compare dell’istruzione precedente dia 1 come risultato, nonché diverse operazioni di or come quelle tra il registro cl e ebx – 0x347e5e9e e tra [edi + eax – 0x76] ed il registro dh.
Visualizzando i dettagli del contenuto di alcune sezioni della mappatura di memoria dell’eseguibile si notano funzioni di allocazioni di memoria virtuale, come ad esempio VirtualAlloc e VirtualFree, nonché la funzione di ottenimento di istanze di threads GetCurrentThreadId.
A seguire ulteriori funzioni di gestione di chiavi di registro, tra cui RegOpenKeyExA, RegCloseKey.
Di seguito alcune funzioni di gathering di dettagli di keyboard events, nel dettaglio GetKeyboardState:
Verificando ulteriori stringhe estratte dall’artefatto è possibile osservare evidenze legate a Delphi (tra cui la libreria vcltest3.dll) e la chiave di registro System\CurrentControlSet\Control\Keyboard Layouts\%.8x
Di seguito diverse stringhe relative a network socket connections, tra cui accept, closesocket, connect e getsockname.
A seguire diverse funzioni di codifica e decodifica di stringhe ed attributi, nello specifico IdMessageCoder, IdCoder, TldDecoder4to30jE.
La stringa h5ylku8yh049yu034hkofw42h4ryj02g940g9vrghw08 sembra essere correlata alla libreria DLL scaricata dal Qakbot e chiamata ghyphy.dll:
Vi sono riferimenti a funzioni di thread management ed esecuzioni concorrenziali: GetCurrentThreadId:
Come da evidenza a seguire, il threat esegue una funzione concatenata con tre esecuzioni differenti delle funzioni AL e JK con la funzione esterna IE. Tali esecuzioni specificano i parametri e la loro tipologia, in particolare %s, che indica tipo string.
Analisi dinamica e debugging
A seguire un dettaglio delle funzioni concatenate IE, AL e JK all’interno della sezione CODE all’indirizzo 004298968:
Viene poi richiamata la funzione JumpID al fine di gestire context strings di Delphi specificando l’attributo ed il tipo, nel caso specifico string.
Di seguito ulteriori dettagli delle funzioni sopra citate inerenti a sockets connections:
Alla label loc_45B705 possiamo notare la chiamata alla funzione LoadLibraryA_0 per richiamare la libreria DLL ghyphy, che risulta essere inerente al contesto di esecuzione della rappresentazione della GUI:
La stringa h5ylku8yh049yu034hkofw42h4ryj02g940g9vrghw08 sembra essere associata alla encoding phase, la stringa è contenuta all’interno della label loc_45B73A:
All’interno della funzione sub_4598B8 vi è un riferimento alla funzione sub_456400 che contiene riferimenti di strings comparing:
Alla funzione sub_45AE48 possiamo osservare attributi relativi a credenziali d’accesso. Tale evidenza può essere correlabile anche all’abilità di Qakbot di sottrarre credenziali e dati di autenticazione.
La data di compilazione dell’eseguibile risulta essere improbabile: difatti essa è settata al 19 Giugno 1992, mentre il resources stamp risulta essere relativo alla data del 25 Aprile 2015.
Tra gli indicatori più sospetti del malware troviamo la compilazione in Delphi, attributi relativi a networking, file management (che può essere relativo anche alla fase di files stealing e files gathering).
Alcune di tali evidenze si possono riscontrare anche da una disamina del codice esadecimale del threat, come ad esempio per quanto riguarda IdHTTP, IdWinSock2:
A seguire ulteriori riferimenti associati a Base64 encoding, password management (e stealing) e gestione del registro di sistema:
A seguire i dettagli delle sezioni della DLL, l’entropia della sezione CODE, la quale contiene il codice eseguibile della stessa, si attesta a 6.513:
Tra le funzioni considerabili sospette vi sono le funzioni di threads management, files loop management, scrittura di files e keyboard information gathering:
A seguire, inoltre, dettagli fondamentali relativi a connessioni verso URLs esterne tramite il modulo UrlMon:
Tra gli imports possiamo individuare la libreria advapi32.dll che può essere utilizzata per richiamare la funzione RegQueryValueExA, la quale può essere impiegata per ottenere il tipo ed i dati associati ad un valore di una chiave di registro specifica.
A seguire alcuni dettagli delle risorse incluse nella libreria, che fanno riferimento a diverse immagini presenti all’interno della GUI:
Visionando il disassemblato della sezione CODE possiamo osservare una funzione di LOOPNE (Loop Not Equal) inerente all’indirizzo 0x40128E, ovvero un’esecuzione condizionale che “salta” ad una data istruzione nel caso in cui l’attributo di riferimento sia diverso da zero.
Vi è poi una serie di istruzioni di substraction relative al registro AL interrotte da funzioni di jumping che di volta in volta saltano ad altri indirizzi di memoria:
A seguire alcuni dettagli di riferimento ai Relative Virtual Address della DLL in questione. Tali indirizzi fanno riferimento agli indirizzi di loading della medesima.
Effettuando una sessione di debugging del Qakbot threat possiamo notare l’header del file posto come “MZP”, ovvero un file eseguibile compilato in Delphi. La lettera “P” è associata a “Pascal”.
Successivamente ad un’istruzione di jb vi è un’istruzione di mov tra l’attributo stringa sopra citato ed il registro eax.
Effettuando una disamina dell’esecuzione del processo in contesto di analisi dinamica, vi sono riferimenti a funzioni di LoadLibrary e LoadDll.
Qui un’evidenza del modulo malevolo caricato durante la sessione di debugging:
Qui un dettaglio riferibile all’icona dell’eseguibile, inclusa all’interno delle risorse dello stesso:
Qui i dettagli di caricamento dei componenti grafici del Qakbot (ad esempio LoadBitmapA e LoadIconA).
A seguire diverse funzioni di keyboard information gathering. Ad esempio, la funzione GetKeyboardLayout, GetKeyBoardState (la quale copia lo status di 256 virtual keys al buffer specifico).
A seguire ulteriori esecuzioni dinamiche di aperture e chiusure di chiavi di registro:
A seguire un’evidenza di process monitoring, ove si evince il dropping e l’utilizzo della libreria ghyphy.dll:
Contestualmente vi sono dettagli di funzioni di LoadLibrary, LdrLoadDll (al fine di caricare moduli specifici):
Di seguito ulteriori riferimenti alle risorse del Qakbot, ovvero immagini contenute all’interno della GUI:
A seguire un dettaglio di source code dumping inerente alla definizione della stringa h5ylku8yh049yu034hkofw42h4ryj02g940g9vrghw08, ove si evincono dettagli di istruzioni di reinterpret_cast dei registri eax ed ebp per convertire il valore dei puntatori, nonché il settaggio dei registri eax4 in gddbfd8 e gddf660 per il registro ecx19.
A seguire una rappresentazione della distribuzione di bytes dell’artefatto, con la quale si può osservare la presenza di bytes shuffling ed un’entropia non indifferente per quanto riguarda alcune determinate sezioni.
Threat research
Il Qakbot contatta l’indirizzo IP malevolo 41.111.118[.]56, registrato da Telecom Algeria.
L’indirizzo e-mail citato all’interno dei dettagli Whois del medesimo è contenuto all’interno di evidenze di data breaches e spam bots.
A seguire ulteriori dettagli in merito al dominio di tale indirizzo e-mail e alcune URLs ad esso associate:
Malware techniques
A seguire un dettaglio inerente alla richiesta POST effettuata dal Qakbot verso l’indirizzo IP malevolo contattato con l’attributo della variabile lpszObjectName posto a “/t5”:
Per quanto riguarda invece l’accesso al registro di sistema durante la cyber kill chain è possibile identificare la chiave Software\\Microsoft\\Fdircmnenyyey con il valore 3665b42c:
Il threat effettua tasks di strings encryption e decryption al fine di disporre operazioni di evasion ed anti-analysis. Tra le stringhe ottenibili vi sono numerosi comandi di infection: comandi PowerShell offuscati, ottenimento di screenshots della macchina compromessa, comandi di ping, accesso a cartelle ProgramData, netstat –nao per ottenere la lista dei processi attualmente in esecuzione con le relative porte utilizzate, connessioni a share di rete con il comando net share, eliminazione di specifici scheduled tasks con il comando schtasks.exe /Delete /F /TN %u.
Qui di seguito numerosi riferimenti di aggiunta ad esclusioni di Windows Defender, raggiro del modulo di Windows Defender SpyNet, queries WMI al fine di enumerare prodotti Antivirus attualmente installati a bordo macchina.
A seguire un dettaglio relativo ad un’enumerazione di processi inerenti ad analysis e monitoring, tale enumerazione può essere usata dal Qakbot al fine di effettuare un’operazione di evasion di tali tools di monitoraggio.
IOCs:
- b9dd2d79e9b78f0d3f439c302f19b0bbec463f135701ab2ea99c27f48fa2eb1a
- c05798268fcde7fbda9305a54389bb79
- 41.111.118[.]56
- Software\\Microsoft\\Fdircmnenyyey
- 3665b42c
- n[.]djouahra[@]djaweb[.]dz
Regola YARA:
rule QakbotBlackBastaRule
{
strings:
$regString = “Fdircmnenyyey”
$regHex = { 46 64 69 72 63 6d 6e 65 6e 79 79 65 79 }
condition: $regString or $regHex
}
CONCLUSIONI:
Il Qakbot threat sottoposto ad analisi possiede numerose caratteristiche di anti-analysis, string encryption ed encoding, nonché numerosi tasks di evasion. Contestualmente a ciò Qakbot effettua infection routines piuttosto invasive, come ad esempio registry enumeration, keyboard events capturing, socket connections, files stealing e Command and Control connections.
Il fatto che tale minaccia venga utilizzata anche in contesti differenti dal solo scopo di sottrarre dati e files sensibili dai victim hosts è ragionevole, dal momento che essa dispone delle numerose caratteristiche di evasion sopra citate. È quindi possibile inizializzare compromissioni di diversa portata creando uno scenario di ransomware infection, nel caso specifico da Black Basta Ransomware, il quale non effettua soltanto un’azione di cifratura dei files della vittima ma anche una double extortion: se il pagamento richiesto non viene effettuato, i dati sottratti vengono pubblicati.
Un esempio di utilizzo di un threat Qakbot per effettuare delivery di ransomware può essere quello di sottrarre le credenziali RDP di un server critico di un’infrastruttura e procedere con un’azione di malware implanting e proseguire con l’encryption dei files ed eventualmente la pubblicazione dei dati sottratti.
Date tali considerazioni, non è difficile pensare che il medesimo scenario si potrà verificare con altre tipologie di threats similari per effettuare una prima attack phase di infrastructure access e targeting per poi procedere con una seconda fase consequenziale che preveda l’utilizzo di minacce ancora più pericolose e dannose.
Riferimenti:
[0] (introduzione in merito a Qakbot malware family): What Is Qakbot? (blackberry.com)