Qbot: (tentata) analisi di uno sventato attacco

Disclaimer e precisazioni

  1. L’analisi è di un caso reale accaduto e non è completa al 100%.
    Sfortunatamente, come accade spesso in questi casi, il vettore di attacco rimane sconosciuto. Posso tuttavia presumere con un buon grado di certezza che possa essere stato veicolato da una mail di phishing, ma non ho elementi per confermarlo in quanto l’utente in questione non ricorda di aver eseguito macro di Office sebbene confermi che, per motivi lavorativi, riceve e visiona decine e decine di mail da mittenti anche sconosciuti (si tratta di un operatore commerciale che lavora principalmente col far East).
  2. Scrivo questo articolo volutamente seguendo l’ordine temporale delle azioni eseguite, successivamente schematizzerò il susseguirsi degli eventi in ordine cronologico per dar maggior senso alla tipologia di attacco.
  3. Lo scopo di questo articolo, come per gli altri, è quello di portare la mia personale esperienza circa l’accaduto, senza alcuna pretesa che questo possa essere il metodo migliore per lo svolgimento dell’analisi.
  4. Critiche e suggerimenti sempre ben accetti! 😉

L’evento

Il 23 Dicembre 2021 ho ricevuto una segnalazione da parte dell’EDR il quale mi informava che un tentativo di esecuzione script era stato bloccato.
Allego un frammento dell’alert

Alert Origin: AMSI
Script Category: JScript
Script File Path: C:\Users\username\boqqxoif.npl
Script File SHA: AAAF7DBE14424ACC2AC9DC2CB6FEFDC5DBD000E4049C02844B234B08E4E81665

Azione preliminare

Una volta collegato al computer dell’utente sono andato a controllare il file boqqxoif.npl e analizzando si è palesato essere effettivamente uno script JavaScript (scaricato presumibilmente da una mail di phishing).
Il file si presenta offuscato, tecnica ben nota per impedirne la lettura.

File JS boqqxoif.npl

Seguendo l’output dell’EDR ho estrapolato il comando restituito e l’ho decodificato da base64 in ASCII andandomi a trovare di fronte a questo script

Snippet dell’output

Andando ad analizzare lo script nella sua interezza si evince che questo è composto sostanzialmente da tre blocchi quasi tutti uguali.
Nel dettaglio:

  • estrapola la directory temporanea dove l’utente che sta eseguendo lo script ha permessi di scrittura
  • apre un handler dove
    • concatena due file dai nomi random per creare un terzo eseguibile
    • esegue il file appena creato
    • cancella un task dallo scheduler con lo stesso nome dell’handler
    • cancella i due file dai quali ha creato l’eseguibile
    • salva tutte queste operazioni in un file .bat
    • crea un nuovo task nello scheduler e lo imposta per essere eseguito periodicamente alle ore 12:05
    • chiude l’handler
  • esegue una chiamata all’indirizzo evidenziato (riconducibile a Quakbot)
  • disabilita e cancella il task creato nel file .bat (?)

Come dicevo, tutti e tre i blocchi sono quasi uguali. L’ultimo differisce dai precedenti due in quanto mancano le direttive di cancellazione del task.

Tuttavia, nel task scheduler dell’utente erano presenti tre task (me ne sarei immaginato solo uno), due dei quali in errore 0x800710E0 (l’operatore o l’amministratore ha rifiutato la richiesta) e un terzo in stato 0x1 (l’utente non ha privilegi sufficienti per eseguire l’attività nella posizione specificata o il processo non è in grado di individuare il file per qualche motivo).

Andando a controllare nel percorso sotto evidenziato di ciascun task non ho trovato alcun file .bat in quanto rimosso direttamente dall’EDR.

Tuttavia, nella directory C:\ProgramData, erano presenti quattro file dai nomi che potevano ricondurre a quanto descritto fin’ora, sebbene nessuno dei presenti è menzionato nelle direttive del codice JavaScript.

I file originali trovati sono

  • bXF0czhJ: data
  • nZJg92Hv: PE32 executable (GUI) Intel 80386, for MS Windows
  • O5qNyzev2: data
  • vZbmTO53: PE32 executable (GUI) Intel 80386, for MS Windows

I due file PE32 sono dei parziali di 1000 byte ciascuno con l’intestazione di un eseguibile standard per Windows

Standard EXE header file

gli altri sono binari.
Seguendo la logica di funzionamento del malware fin’ora descritta ho permutato i quattro file creando quindi 4 file eseguibili (evidenziati in rosso)

File permutati

Analisi EXE

Sfortunatamente le permutazioni create non hanno dato un eseguibile valido, probabilmente a causa di un qualche processo bloccato da parte dell’EDR il quale ha cancellato il suo corrispettivo.

Analisi request

Anche in questo caso l’analisi del traffico non ha dato buoni frutti. Al momento dell’indagine l’host backup.justthebooks.com risultava offline e così è rimasto fino ad ora 28 Dicembre 2021. Tuttavia, eseguendo una ricerca storica del traffico, non ho riscontrato alcun flusso verso il sito remoto; il che mi porta a pensare che il payload iniziale è stato scaricato da un altro host impossibile da reperire.

Conclusioni

Come accennato all’inizio dell’articolo, il vettore d’accatto è sconosciuto.

Ho pertanto ipotizzato che si potesse trattare di una mail di phishing quindi la mia unica ipotesi, corroborata anche dalla letteratura che in questi giorni ho avuto modo di studiare, è stata:

ATTACCANTE
|-> ALLEGATO
    |-> ESECUZIONE DELLA MACRO
        |-> 1. download del file boqqxoif.npl (*)
        |-> 2. download del payload in due tranche (* **)
        |-> 3. creazione del task schedulato
            |-> esecuzione dell'EXE

(*)  URL presumibilmente hardcoded nel codice della macro
(**) tecnica diffusa per eludere i controlli sul firewall

Tuttavia mancano all’appello troppe informazioni che presumo si sarebbero potute ricavare se l’attacco fosse stato visionato per tempo:

  1. La successione dell’attacco è andata realmente così? L’ipotesi fatta è corretta?
  2. Presumo che i primi due file che hanno generato il primo payload fossero hardcoded nel codice della macro ma, senza poter risalire al file originale, questa rimane un’ipotesi
  3. Come mai nel file JS non erano presenti i nomi dei file che ho trovato nella directory C:\ProgramData?

Considerazioni personali

Scrivere un report non è affatto semplice: richiede tempo, conoscenze approfondite e tutti gli elementi sui quali si dovrà svolgere l’analisi al proprio posto. D’altro canto è stata un’esperienza interessante che mi ha fatto studiare a fondo argomenti sui quali avevo una conoscenza superficiale. Spero in futuro di poter trovare nuovi casi da studiare.

EOF

Rispondi