Il gruppo Sednit è operativo almeno dal 2004 e negli ultimi anni è spesso salito alla ribalta con attacchi di alto profilo come ad esempio nel 2016 quando il Dipartimento di Giustizia degli Stati Uniti ha accusato il gruppo di essere responsabile della violazione al Democratic National Committee (DNC) poco prima delle elezioni degli Stati Uniti. Si presume inoltre che il gruppo sia dietro l’hacking della rete televisiva globale TV5Monde, la perdita di e-mail dell’Agenzia mondiale antidoping (WADA) e a molti altri attacchi. Questo gruppo ha un insieme diversificato di strumenti malware nel suo arsenale, come abbiamo avuto modo di scoprire in alcuni articoli del nostro blog.
Nell’agosto 2018, i criminali di Sednit hanno rilasciato due nuovi componenti Zebrocy e da allora abbiamo notato un considerevole aumento delle rilevazioni di questo malware. Zebrocy è un insieme di downloader, dropper e backdoor; mentre i downloaders e dropper si occupano delle attività di ricognizione, le backdoor assicurano la persistenza e avviano le attività di spionaggio sull’obiettivo. Questi nuovi componenti per estrarre le informazioni raccolte utilizzano i protocolli dei servizi di posta come SMTP e POP3.
Gli obiettivi di questi attacchi si trovano soprattutto in Asia centrale così come nei paesi dell’Europa centrale e orientale, in particolare le ambasciate, i ministeri degli affari esteri e i diplomatici.

Figura 1: Diagramma di flusso dei componenti vecchi e nuovi di Zebrocy
Da due anni il gruppo Sednit utilizza principalmente e-mail di phishing come vettore di infezione per le campagne Zebrocy (Caso 1 e Caso 2). Una volta che gli obiettivi sono stati compromessi in una prima fase vengono usati diversi downloader per raccogliere informazioni sulle vittime e, se sono ritenute abbastanza interessanti, viene avviata la seconda fase che prevede la distribuzione delle backdoor.
Il classico modus operandi per una campagna di Zebrocy è che la vittima riceva un archivio allegato ad una e-mail. Questo archivio contiene due file, un documento non pericoloso e un eseguibile. I criminali tentano di ingannare la vittima utilizzando per l’eseguibile il nome di un documento apparentemente legittimo o quello di un’immagine, ma sfruttando il trucco della “doppia estensione”.
Questa nuova campagna, mostrata nel caso 3 nella figura 1, utilizza una procedura più difficile da identificare, come avremo modo di analizzare di seguito.
Dropper Delphi
Il primo codice binario è un dropper Delphi, cosa piuttosto insolita per una campagna Zebrocy. Solitamente si tratta di un downloader piuttosto che di un dropper installato sul sistema delle vittime come prima fase.
Questo dropper contiene alcuni stratagemmi per rendere più difficile l’analisi di reverse-engineer. Come mostrato di seguito usa una parola chiave – liver negli esempi che abbiamo studiato – per contrassegnare l’inizio e la fine degli elementi.
$ yara -s tag_yara.yar SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe
find_tag SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe
0x4c260:$tag: l\x00i\x00v\x00e\x00r\x00
0x6f000:$tag: liver
0x6f020:$tag: liver
0x13ab0c:$tag: liver
Questa regola YARA cerca la stringa di liver. Il primo liver è quello utilizzato nel codice e non separa nulla da nulla, mentre gli altri separano il descrittore chiave, l’immagine (hexdump sotto) e la payload crittografata nel dropper.
$ hexdump -Cn 48 -s 0x6f000 SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe
0006f000 6c 69 76 65 72 4f 70 65 6e 41 69 72 33 39 30 34 |liverOpenAir3904|
0006f010 35 5f 42 61 79 72 65 6e 5f 4d 75 6e 63 68 65 6e |5_Bayren_Munchen|
0006f020 6c 69 76 65 72 ff d8 ff e0 00 10 4a 46 49 46 00 |liver……JFIF.|
Partendo dall’immagine, questa viene rilasciata in C: \ Users \ public \ Pictures \ scanPassport.jpg , nel caso in cui non esista già un file con quel nome. È interessante notare che il nome file del dropper, SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe, suggerisce anche uno schema di phishing che ruota attorno a informazioni sui viaggi o sul passaporto. Ciò potrebbe indicare che il criminale conoscesse il target del messaggio di phishing. Il dropper apre l’immagine: se il file esiste, smette di essere eseguito; in caso contrario, rilascia l’immagine, la apre e recupera il descrittore di chiave OpenAir39045_Bayren_Munchen. L’immagine non sembra mostrare nulla mentre il formato del file è valido; vedere la figura 2.

Figura 2: scanPassport.jpg
La stringa del descrittore chiave contiene Bayren_Munchen che sembra riferirsi alla squadra di calcio tedesca dell’FC Bayern Monaco. Indipendentemente da ciò, non è il contenuto del descrittore di chiave, ma la sua lunghezza che conta per recuperare la chiave XOR utilizzata per crittografare la payload.
Per ottenere la chiave XOR, il dropper cerca l’ultima parola chiave del liver e aggiunge l’offset del descrittore chiave. La lunghezza della chiave XOR – 27 (0x1b) byte – è la stessa di quella del descrittore di chiave.
Usando la chiave XOR e un semplice ciclo XOR, il dropper decrittografa l’ultima parte – che rappresenta la payload crittografata – subito dopo l’ultimo tag e fino alla fine del file. Si noti che l’intestazione MZ della payload dell’eseguibile che inizia subito dopo la parola chiave liver e la chiave XOR recuperata da una parte dell’intestazione PE che è normalmente una sequenza di 0x00 byte, vengono ripristinati una volta decodificata la payload, come mostrato nella Figura 3.

Figura 3: Payload codificata (a sinistra) comparata con quella decodificata (a destra)
Rilascia la payload nel percorso C: \ Users \ Public \ Documents \ AcrobatReader.txt e sposta il file in C: \ Users \ Public \ Documents \ AcrobatReader.exe
Forse si tratta di un tentativo di evitare che i sistemi di protezione degli endpoint attivino un avviso basato su un file binario che rilascia un file con estensione .exe.
Ancora una volta, il criminale cerca di ingannare le vittime nel caso in cui controllino il contenuto della directory, in questo caso infatti il file verrà visualizzato come nella Figura 4:

Figura 4: la payload è simile al file PDF
Per impostazione predefinita, Windows nasconde l’estensione e questo viene sfruttato dall’operatore per rilasciare un file eseguibile in una directory Documenti e farlo sembrare un file PDF.
Infine, il dropper esegue la payload appena rilasciata e termina le sue attività.
Downloader mail MSIL
La payload del precedente dropper è un downloader MSIL compresso con UPX. Per semplificare la comprensione del processo, riportiamo di seguito la logica principale, seguita dal codice sorgente, quindi da una panoramica del flusso di controllo sezionato.
Il metodo Main chiama la funzione Esegui per avviare l’applicazione, che quindi crea il modulo Form1.
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run((Form) new Form1());
}
Form1 inizializza molte variabili, incluso un nuovo Timer per setted di queste.
this.start = new Timer(this.components);
this.inf = new Timer(this.components);
this.txt = new Timer(this.components);
this.subject = new Timer(this.components);
this.run = new Timer(this.components);
this.load = new Timer(this.components);
this.screen = new Timer(this.components);
Un oggetto Timer presenta tre campi importanti:
* Enabled: indica se il timer è attivo.
* Interval: il tempo, in millisecondi, tra gli eventi trascorsi.
* Tick: esegue la funzione di callback quando è trascorso l’intervallo impostato dal timer e quando questo è abilitato.
In questo caso i campi sono stati inizializzati come segue:
this.start.Enabled = true;
this.start.Interval = 120000;
this.start.Tick += new EventHandler(this.start_Tick);
this.inf.Interval = 10000;
this.inf.Tick += new EventHandler(this.inf_Tick);
this.txt.Interval = 120000;
this.txt.Tick += new EventHandler(this.txt_Tick);
this.subject.Interval = 120000;
this.subject.Tick += new EventHandler(this.subject_Tick);
this.run.Interval = 60000;
this.run.Tick += new EventHandler(this.run_Tick);
this.load.Interval = 120000;
this.load.Tick += new EventHandler(this.load_Tick);
this.screen.Interval = 8000;
this.screen.Tick += new EventHandler(this.screen_Tick);
Per ogni oggetto, imposta un intervallo che va dagli 8 secondi ai 2 minuti. Una funzione callback viene aggiunta al gestore eventi. Si noti che start è l’unico che imposta Enabled come true, ovvero che dopo 2 minuti (12000 millisecondi = 120 secondi) start_Tick verrà chiamato dal gestore eventi.
private void start_Tick(object sender, EventArgs e)
{
try
{
this.start.Enabled = false;
Lenor lenor = new Lenor();
this.dir = !Directory.Exists(this.label15.Text.ToString()) ? this.label16.Text.ToString() + “\” : this.label15.Text.ToString() + “\”;
this.att = this.dir + “audev.txt”;
this._id = lenor.id(this.dir);
this.inf.Enabled = true;
}
Poi ogni metodo segue lo stesso comportamento impostando la variabile Enabled su false all’inizio del metodo. Il metodo si verifica e in seguito imposta la variabile Enabled dell’oggetto successivo su true, che attiverà il successivo timer. La variabile Enabled viene utilizzata dal criminale per mettere in atto un meccanismo così da ripetere le funzioni fallite finché non hanno successo. Il tempo che intercorre tra l’esecuzione di due funzioni potrebbe essere un tentativo di eludere i sistemi di protezione degli endpoint aggiungendo un ritardo.
Ora la struttura di ciascun metodo è definita; la parte seguente si concentrerà sul flusso di controllo del malware.
Poiché gli scambi avvengono tra caselle di posta elettronica diverse, ecco una panoramica dei diversi passaggi.

Figura 5: Comunicazioni e-mail
Uno dei primi controlli effettuati dal malware riguarda l’esistenza di un percorso specifico utilizzato per eliminare ogni file utilizzato durante la sua esecuzione. Se possibile, utilizza C: \ Users \ Public \ Videos \ – altrimenti come directory predefinita tornerà a C: \ Documents and Settings \ All Users \ Documents. Si noti che quest’ultimo percorso è specifico di Windows XP mentre il primo è per Vista e successivi.
Viene generato un ID di 16 byte concatenando il numero seriale del volume C: e lo UserName, quindi viene registrato nel file audev.txt.
Il downloader raccoglie le seguenti informazioni:
• Il percorso attuale dell’applicazione
• La versione del Sistema operativo
• La directory di sistema
• L’utente di dominio
• Il nome della macchina
• UserName
• La zona oraria in uso
• La data attuale
• L’elenco dei dischi logici e le informazioni su ognuno di questi (modello, numero seriale, ecc…)
• Il contenuto della directory C:\Program Files\ and C:\Program Files (x86)\
• L’elenco dei processi
Tutte queste informazioni vengono memorizzate nel file C: \ Users \ Public \ Videos \ si.ini e inviate in un messaggio di posta elettronica, come allegato, tramite SMTPS, utilizzando la porta predefinita 465. Il corpo dell’e-mail contiene la stringa SI (che probabilmente sta per System Information), il destinatario è sym777.g@post.cz. Per tutti gli scambi di e-mail, l’oggetto del messaggio conterrà un proprio id.
L’operatore sceglie di avere più indirizzi di fallback e invia la stessa e-mail a due altri destinatari, presumibilmente nel caso in cui quello principale non funzioni. Una volta che l’e-mail è stata inviata, il downloader cancella il file si.ini.
Durante la prima esecuzione del malware, viene creato il file set.txt con {System_Parametrs = 10} all’interno e la chiavi di Registro di Windows:

Figura 6: Persistenza nel Registro
Successivamente viene salvato uno screenshot del computer della vittima nel file scx.bin e inviato come allegato a una e-mail che avrà come corpo del messaggio SC (che probabilmente sta per Screenshot).
Dopo l’invio del messaggio, questo malware si collega alla mailbox kae.mezhnosh@post.cz tramite POP3 su SSL (porta 995) e cerca i messaggi con un Oggetto: che corrisponde al proprio ID. Se c’è un messaggio del genere e il corpo non è vuoto, l’hex del malware lo decodifica e quindi invia un messaggio con okey nel corpo a sym777.g@post.cz. Il contenuto dell’e-mail recuperata in precedenza viene pulito e analizzato come di seguito:
string[] strArray = this._adr.Replace(“B&”, “”).Replace(“Db”, “”).Split(‘%’);
string str1 = strArray[0];
string str2 = strArray[1];
Così si otterranno due stringhe: la prima è una password e la seconda è un nome utente per un indirizzo e-mail.
Queste nuove credenziali vengono utilizzate per connettersi alla posta in arrivo specificata appena ottenuta e per cercare anche un messaggio con un oggetto che corrisponda all’ID del malware e un allegato con la stringa audev nel suo nome file. Se entrambe le condizioni sono soddisfatte, il malware salva l’allegato ed elimina il messaggio dal server.
L’utilizzo di questi espedienti da parte dei criminali rendono l’analisi comportamentale del malware molto più difficile.
Una volta che il downloader ha scritto con successo l’allegato sul disco, invia un’e-mail con okey2 nel corpo e un allegato, denominato l.txt, contenente 090. Lo stesso file viene sovrascritto con 000 e il malware cerca di recuperare un altro messaggio. Se l’operazione ha successo, il file l.txt viene inviato con il testo okey3 nel corpo del messaggio. Il contenuto dell’allegato è una directory e un nome file. Il malware sposta il file audev in questo percorso. A questo punto, il malware invia un’e-mail con il messaggio okey4 e l’allegato l.txt avvia l’eseguibile – audev.exe e controlla l’elenco dei processi per vedere se uno di essi contiene la stringa audev.
Process.Start(this.rn);
foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName.Contains(“audev”))
Se viene trovato un processo con questo nome, invia un’ultima e-mail con il testo okey5 nel corpo del messaggio e un file l.txt come allegato. Infine, elimina l.txt e set.txt, cancella la chiave di registro di Windows creata e termina le proprie attività.
Downloader mail Delphi
Il ruolo principale di questo downloader è valutare l’importanza del sistema compromesso e, se ritenuto abbastanza importante, scaricare ed eseguire l’ultimo downloader di Zebrocy.
Il codice binario è scritto in Delphi ed è compresso con UPX.
Inizializzazione
All’inizio, decrittografa un gruppo di stringhe che sono indirizzi e-mail e password. L’autore utilizza l’algoritmo di crittografia AES ECB. Ogni stringa è codificata in esadecimale, con i primi quattro byte corrispondenti alla dimensione finale della stringa decifrata. Ci sono due chiavi AES nell’oggetto TForm1; la prima viene utilizzata per crittografare i dati mentre la seconda viene utilizzata per decrittografare.
Le e-mail e le password vengono utilizzate dai criminali per inviare comandi al malware e anche per recuperare le informazioni raccolte dal computer della vittima. I protocolli di comunicazione sono SMTP e POP3 – entrambi su SSL. Per utilizzare OpenSSL, il malware elimina e utilizza due librerie di collegamento dinamico (DLL) OpenSSL: libeay32.dll (98c348cab0f835d6cf17c3a31cd5811f86c0388b) e ssleay32.dll (6d981d71895581dfb103170486b8614f7f203bdc).

Figura 7: proprietà OpenSSL DLL
Si noti che tutti i file vengono rilasciati nella directory di lavoro del malware, C: \ Users \ Public \
La persistenza viene garantita durante la prima esecuzione del malware utilizzando una tecnica ben nota, gli “script di accesso”. Crea un file di script registration.bat e scrive diverse stringhe dall’oggetto TForm1. Lo script finale è:
reg add HKCU\Environment /v “UserInitMprLogonScript” /t REG_EXPAND_SZ /d “C:\Users\Public\Videos\audev.exe” /f
del C:\Users\Public\Videos\registr.bat
exit
Ultimo ma non meno importante, il malware crea un id, nello stesso modo visto nei precedenti binari di Zebrocy, recuperando lo UserName tramite l’API Windows GetUserNameW e anteponendovi il numero seriale del volume dell’unità C: \
Funzionalità
La configurazione della scansione è memorizzata nell’oggetto TForm1. Grazie a una semplice scansione, le prime informazioni che il malware può raccogliere sono relative ai file con le seguenti estensioni: .docx, .xlsx, .pdf, .pptx, .rar, .zip, .jpg, .bmp, .tiff. Per ogni file trovato sul disco, recupera il percorso completo e l’ultima data di modifica. Tali informazioni vengono crittografate utilizzando la chiave AES menzionata in precedenza e memorizzate nel file 0.txt. Un’altra scansione ha come obiettivo le estensioni .dat, .json, .db e, come la scansione precedente, recupera il percorso completo e la data dell’ultima modifica del file. Quindi crittografa e memorizza queste informazioni nel file 57.txt.
La capacità di elencare i processi in esecuzione è un’altra delle funzionalità di questo malware e memorizza tali informazioni nel file 08.txt, nel seguente formato :
======Listing_of_processes=======
[System Process]
System
smss.exe
csrss.exe
wininit.exe
csrss.exe
winlogon.exe
services.exe
lsass.exe
[…]
Nel file i.txt il malware registra le informazioni generali relative al computer della vittima e alcune sul malware, come il numero di versione e il percorso in cui è stato eseguito, come mostrato di seguito
v7.00
C:\Users\Public\Videos\audev.txt
============================================
Log_Drivers:
C: fixed; size= 102297 Mb, free=83927 Mb S/N: [redacted]
==================================================
OSV: Windows 7
WinType: 32
WinDir: C:\Windows
Lang: English (United States)
TZ: UTC1:0 Romance Standard Time
HostN: [redacted]-PC
User: [redacted]
===============S_LIST=====================
C:\Program Files\Common Files
C:\Program Files\desktop.ini
C:\Program Files\DVD Maker
C:\Program Files\Internet Explorer
C:\Program Files\Microsoft.NET
C:\Program Files\MSBuild
C:\Program Files\Reference Assemblies
C:\Program Files\Uninstall Information
C:\Program Files\Windows Defender
[…]
Il malware è in grado di acquisire screenshot, che vengono memorizzati come 2 \ [AAAA-mm-gg HH-MM-SS] -Image_001.jpg e genera un altro file 2 \ sa.bin, che contiene l’elenco dei percorsi di tutte le schermate catturate . La sua ultima capacità è l’enumerazione della rete; il cui risultato viene salvato nel file 4.txt.
Protocollo di rete
Il Downloader Mail Delphi è un nuovo componente aggiunto agli strumenti di Zebrocy e offre un nuovo modo di estrarre i dati e ricevere i comandi d remoto. L’esfiltrazione è un processo abbastanza semplice ma piuttosto evidente sulla rete, poiché tutti i file crittografati raccolti in precedenza vengono inviati su SMTPS e ogni versione del file viene inviata tre volte.
L’oggetto della e- mail è l’id della vittima e il file viene inviato come allegato con una parola chiave corrispondente al contenuto del file. Si noti che per ogni file è presente una versione crittografata del file inviato.
Vengono acquisiti anche gli screenshot e i file che corrispondono a entrambe le scansioni, ma con parole chiave diverse.

Figura 8: Esempio di una e-mail di esfiltrazione
Mentre viene utilizzato il protocollo SMTP per l’esfiltrazione, il codice binario si connette all’indirizzo e-mail tomasso25@ambcomission.com tramite POP3 e analizza le e-mail. Il corpo dell’e-mail contiene diverse parole chiave interpretate come comandi dal malware.
I risultati dei comandi inviati e un log di debug vengono poi inoltrati ai criminali, ad esempio per un comando di scansione, l’operatore riceve un file che contiene l’elenco di file corrispondenti alle estensioni specificate in fase di configurazione del comando stesso.
Conclusione
L’analisi di questi binari mostra alcuni errori a livello di linguaggio e decisioni nella progettazione che indicano una diversa maturità nello sviluppo del set di strumenti. Entrambi i downloader utilizzano protocolli di posta per estrarre informazioni e condividere meccanismi comuni per raccogliere le stesse informazioni. Entrambi sono anche molto evidenti sulla rete e sul sistema, poiché creano una moltitudine di file e ne inviano molti sulla rete. Durante l’analisi del downloader di posta Delphi, alcune funzionalità sembrano essere scomparse, ma alcune stringhe rimangono ancora nei codici binari. Pertanto, mentre questo set di strumenti viene gestito dal gruppo Sednit, siamo piuttosto certi che sia stato sviluppato da un team diverso e meno esperto, rispetto a quelli che si occupano dei componenti tradizionali di Sednit.
I componenti di Zebrocy sono nuovi componenti aggiuntivi del set di strumenti di Sednit e gli eventi recenti potrebbero spiegare l’uso crescente dei binari di Zebrocy piuttosto che il buon vecchio malware di Sednit.




Lascia un commento