WannaCry Ransomware

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. 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 però non vuole essere un post con sfumature giornalistiche, ma un post che racconta la verità su Wannacrypt e molti dei 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.

Abitualmente, la maggior parte dei bug viene risolta in breve tempo e, finito il debugging del bug, Microsoft rilascia la patch. Ma questa volta non è stato così: nel gennaio del 2017 alcuni tecnici della NSA trovarono il bug e lo sfruttarono per creare un potente exploit. L’exploit doveva restare tra le porte dell’agenzia americana, ma per una serie di errori, il programma malevolo (e il relativo sorgente) diventarono accessibili al pubblico. Microsoft aveva già realizzato a Marzo una patch che correggeva questo bug ma molti utenti non avevano installato i soliti aggiornamenti di sicurezza. Il risultato è presto detto: migliaia di utenti infetti.

Questa è stata la mia prima analisi tecnica di un malware; effettuata ancora quando non conoscevo l’arte del reverse engineering. Questo articolo contiene molti errori, ma per storicità non l’ho rimosso. Se avete suggerimenti o avete notato qualche strafalcione, vi prego di segnalarmelo.

Analisi Tecnica

Come molti conoscenti mi hanno chiesto, ho provveduto ad analizzare il virus. Ecco come è andata: per prima cosa, ho “installato” il ransomware su una macchina virtuale Windows XP. Come ci aspettavamo, la prima schermata che si presenta è: “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). Andando avanti oltre a caratteri apparentemente privi di senso compiuto, troviamo 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

Estensioni:

.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, ignorando alcune cartelle che non deve criptare altrimenti il sistema diventerebbe instabile:

  • “Content.IE5”
  • “Temporary Internet Files”
  • “\Local Settings\Temp”
  • “\AppData\Local\Temp”
  • “\Program Files (x86)”
  • “\Program Files”
  • “\WINDOWS”
  • “\ProgramData”
  • “\Intel”
  • “$”

Anche se probabilmente, questi script non sono completi, noto che Wannacry usa il Command Prompt per andare a modificare chiavi di registro. In particolare vengono modificate le chiavi presenti in HKCU\SOFTWARE\Windows\CurrentVersion\Run\, 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.

Un’altra stringa che si può trovare all’interno di WannaCry (eseguita dal command prompt) è la seguente:

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

Lo script cancella tutte le copie shadows, ovvero tutte quelle copie di backup che consentono di recuperare i file nello stato originale. Anche in questo caso, si evidenzia la portata di WannaCry nell’estendere i danni anche alle copie di backup.

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. Vi invito a tenere i sistemi operativi aggiornati, sempre applicando le patch ufficiali e raccomando di NON pagare alcun riscatto.