Red Hot Cyber

Sicurezza informatica, cybercrime, hack
news, e altro ancora
  • English

Yoroi effettua la malware Analysis di BlueSky ransomware, che sfrutta l’ingegneria sociale

BlueSky è un ransomware individuato per la prima volta nel maggio 2022 e ha attirato l’attenzione dei ricercatori delle minacce per due motivi principali: il primo è che il gruppo dietro il ransomware non adotta il modello della doppia estorsione; la seconda è che i loro bersagli sono anche utenti normali perché il ransomware è stato individuato colpire software non originali.

Per questi motivi, Yoroi malware ZLab ha deciso di tenere traccia della minaccia, seguendo la distribuzione dei campioni, effettuando un’analisi tecnica del payload del ransomware.

Figura 1: flusso di controllo Bluesky

Analisi tecnica

Hash 9e302bb7d1031c0b2a4ad6ec955e7d2c0ab9c0d18d56132029c4c6198b91384f 
Minaccia ransomware 
Breve descrizione BlueSky ransomware 
SSDEEP 1536:G+5geBR2Q+a8M124Zl2i5SADBDg8trv4t9MBY5ySvV:GDeBgQ+a8M12Y2i59hrvWMBGvV 

Lo schema di caricamento dell’API

Si inizia eseguendo il PEB (Process Environment Block) per caricare dinamicamente le API. È una tecnica comune per non mostrarli staticamente nella tabella di importazione e si percorre uno dei tre elenchi collegati, situati in PEB_LDR_DATA come InLoadOrderModuleList. 

In questo modo si è in grado di enumerare i moduli contenuti all’interno della lista collegata e di confrontarli con i nomi hash nascosti all’interno del codice per importare correttamente quelli desiderati. 

In questo caso, le API vengono convertite in hash con l’algoritmo djb2 . 

Figura 2: caricamento dinamico delle API

La figura seguente mostra invece le routine per caricare dinamicamente la funzione:

Figura 3: “routine mw_load_function”

Le Stack Strings offuscate

Altre stringhe critiche vengono offuscate tramite il metodo stackstrings e una semplice routine per crittografarle 

Figura 4: routine di decrittografia delle stringhe

Tuttavia, l’algoritmo è facile da ripristinare ed è stata sviluppato un semplice script per decrittografare le stackstring: 

string = [123,82,90,123,45,56,32,88,94] 

decrypted = "" 

for i in string: 
    decrypted += chr((34 * (i - 94) % 127 + 127) % 127) 
print(decrypted)

Tecnica Anti-Debug

Una volta risolte le prime funzioni, si chiama NtSetInformationThread con ThreadHideFromDebugger nascondendo il thread per evitare che possa essere eseguito il debug.

Figura 5: NtSetInformationThread anti-debug

Aumento dei privilegi

Durante l’analisi del campione, si sono riscontrate somiglianze con Conti Ransomware nel modo in cui le stringhe vengono offuscate e in alcune altre routine, come il modo in cui BlueSky rimuove le copie shadow tramite l’interfaccia COM WMI. 

Il malware abusa dell ‘ “Interfaccia COM ICMLuaUtil (3E5FC7F9-9A51-4367-9063-A120244FBEC7)”. Tuttavia, questa tecnica è una tecnica ben nota e documentata disponibile pubblicamente su Internet, adottata sia nelle operazioni di intrusione che di sviluppo di malware. 

Figura 6: bypass dell’UAC tramite ICMLuaUtil

L’esempio chiama le API RtlAdjustPrivilege con il token “SeDebugPrivilege“, al fine di ottenere il privilegio di manipolare arbitrariamente ogni file e processo. 

Figura 7: prova del metodo di escalation dei privilegi

Generazione dell’ID vittima

BlueSky procede generando l’ID vittima eseguendo l’hashing con MD5 delle seguenti informazioni di sistema: 

  • MachineGuid (4 Bytes) 
  • DigitalProductId 
  • InstallDate 
  • C:\ Serial Number 

Quindi l’hash viene passato alla seguente routine personalizzata: 

Figura 8: routine personalizzata hash

Viene quindi creato un mutex “Global\\{generated_id}” in questo caso essendo “Global\1580B4213F8F3E90E4E0E3CD1F6FAC52” 

Figura 9: Creazione Mutex

La routine di crittografia

Ora è il momento di crittografare i file. 

La prima operazione dell’esempio consiste nell’acquisire un handle al provider di crittografia PROV_RSA_FULL chiamando CryptAcquireContextA : 

Figura 10: acquisizione di un handle a PROV_RSA_FULL

BlueSky memorizza le informazioni relative alla crittografia, nella chiave di registro “HKCU\SOFTWARE\1580B4213F8F3E90E4E0E3CD1F6FAC52\”. Per memorizzare le informazioni di ripristino, utilizza “ ChaCha20 + Curve25519 + RC4 (su RECOVERYBLOB) ”, mentre “ ChaCha20 + Curve25519 ” per la crittografia 

Figura 11: Informazioni sul ripristino di BlueSky

Sotto la routine di crittografia: 

Figura 12: routine di crittografia

 BlueSky crea un elenco dei file esclusi all’interno del codice. 

L’elenco è il seguente: 

  • Extensions (ldf, scr, icl, 386, cmd, ani, adv, theme, msi, rtp, diagcfg, msstyles, bin, hlp, shs, drv, wpx, bat, rom, msc, lnk, cab, spl, ps1, msu, ics, key, msp, com, sys, diagpkg, nls, diagcab, ico, lock, ocx, mpa, cur, cpl, mod, hta, exe, ini, icns, prf, dll, bluesky, nomedia, idx) 
  • Directories ($recycle.bin, $windows.~bt, $windows.~ws, boot, windows, windows.old, system volume information, perflogs, programdata, program files, program files (x86), all users, appdata, tor browser) 
  • Filenames (# decrypt files bluesky #.txt, # decrypt files bluesky #.html, ntuser.dat, iconcache.db, ntuser.dat.log, bootsect.bak, autorun.inf, bootmgr, ntldr, thumbs.db) 

Gestione delle eccezioni e altre funzionalità

L’esempio implementa anche alcune interessanti funzionalità di gestione delle eccezioni per evitare il crash del sistema. 

Nel dettaglio, prima di procedere alla cifratura BlueSky controlla se dopo aver chiamato CreateFileW il LastErrorValue è ERROR_SHARING_VIOLATION se true, l’esempio richiama NtQueryInformatonFile recuperando il FileProcessIdsUsingFileInformation che contiene un elenco dei PID che utilizzano il file. 

Se il PID non è uguale a se stesso o al PID di explorer.exe recuperato in precedenza, chiama NtQueryInformatonProcess   con ProcessInformationClass impostato su 29 (ProcessBreakOnTermination) per recuperare un valore che indica se il processo è considerato critico. 

In questo caso, il malware salta quel file e continua a crittografare gli altri. 

Figura 13: verifica della disponibilità dei file

L’esempio può impedire al sistema di entrare in modalità di sospensione o spegnere il display chiamando SetThreadExecutionState a ES_CONTINUOUS 

Figura 14: prevenzione della modalità di sospensione

 Al termine della crittografia, la richiesta di riscatto punta al blog degli aggressori: 

Figura 15: Sito Web BlueSky Ransomware 

Conclusione

Il ransomware Blusky è una prova che ancora oggi i criminali informatici utilizzano tecniche di ingegneria sociale altamente efficaci. Quando cerchiamo un software crackato, dobbiamo sapere che si potrebbe annidare al suo interno un un ransomware che ci chiederà un riscatto elevato.  

Quindi, è necessario sensibilizzare le persone ad evitare l’installazione di software crackati, non solo all’interno del perimetro aziendale, ma anche all’interno dei dispositivi domestici. È una misura preventiva semplice ma efficace per difendersi da minacce simili.  

Regole di Yara

rule bluesky_ransomware 
{ 
  meta: 
    author = "Yoroi Malware ZLab" 
    description = "Rule for BlueSky Ransomware" 
    last_updated = "2022-09-14" 
    tlp = "WHITE" 
    category = "informational" 
    hash = "9e302bb7d1031c0b2a4ad6ec955e7d2c0ab9c0d18d56132029c4c6198b91384f" 
 

  strings: 

     //sub_00407a30 

    $1 = {55 8b ec 83 ec ?? 56 e8 ?? ?? ?? ?? 85 c0 0f 84 ?? ?? ?? ?? 0f 10 05 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 0f 11 4? ?? 68 ?? ?? ?? ?? 0f 10 05 ?? ?? ?? ?? c7 4? ?? ?? ?? ?? ?? c7 4? ?? ?? ?? ?? ?? 0f 11 4? ?? e8 ?? ?? ?? ?? 0f 10 4? ?? 83 c4 ?? 8b d0 8d 4? ?? 50 83 ec ?? 8b cc 6a ?? 6a ?? 83 ec ?? 0f 11 01 8b c4 0f 10 4? ?? 0f 11 00 ff d2 85 c0 0f 88 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? e8 ?? ?? ?? ?? 83 c4 ?? 8d 4? ?? 51 ff d0 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? e8 ?? ?? ?? ?? 83 c4 ?? 8d 4? ?? 51 ff d0 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? e8 ?? ?? ?? ?? 83 c4 ?? 8d 4d c8 51 ff d0 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? e8 ?? ?? ?? ?? 83 c4 ?? 8d 4? ?? 51 ff d0 0f 10 4? ?? 8b 4? ?? 83 ec ?? 8b c4 83 ec ?? 8b 11 0f 11 00 8b c4 83 ec ?? 0f 10 4? ?? 0f 11 00 8b c4 83 ec ?? 0f 10 4? ?? 0f 11 00 8b c4 0f 10 4? ?? 51 0f 11 00 ff 52 28 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 8b f0 e8 ?? ?? ?? ?? 83 c4 ?? 8d 4? ?? 51 ff d0 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? e8 ?? ?? ?? ?? 83 c4 ?? 8d 4? ?? 51 ff d0 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? e8 ?? ?? ?? ?? 83 c4 ?? 8d 4? ?? 51 ff d0 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? e8 ?? ?? ?? ?? 83 c4 ?? 8d 4? ?? 51 ff d0 85 f6 78 ?? 8b 4? ?? 8d 5? ?? 52 68 ?? ?? ?? ?? 50 8b 08 ff 5? ?? 85 c0 78 ?? 8b 4? ?? 6a ?? ff 7? ?? 8b 08 50 ff 5? ?? 8b 4? ?? 85 c9 74 ?? 8b 01 51 ff 5? ?? 8b 4? ?? 85 c9 74 ?? 8b 01 51 ff 50 08 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? e8 ?? ?? ?? ?? 83 c4 ?? ff d0 5e 8b e5 5d c3} 

  condition: 
    uint16(0) == 0x5A4D and $1 
}