petya ransomware: sotto i riflettori
TRANSCRIPT
Petya ransomwareSOTTO I RIFLETTORI…
End Summer Camp 201631. AGO – 4. SET Forte Bazzera, VE
Autore: Gianfranco Tonello Forte Bazzera VE, 2 settembre 2016
Petya ransomware: la genesiPetya è il primo ransomware che cifra la Master File Table invece di cifrare i file di documento.
• Petya.A (red version) - Marzo 2016
• Petya.B (green version) - Maggio 2016
• Petya.C - Luglio 2016
PETYA RANSOMWARE 2Gianfranco Tonello
Petya.A: Attacco (fase 1)• Petya si diffonde via email, sfruttando l’ingegneria sociale per indurre la vittima ad eseguire l’allegato infetto;
• L’allegato infetto contiene il dropper di Petya, il quale necessita delle autorizzazioni di Administrator per infettare il Master Boot Record;
• L’esecuzione del dropper di Petya con i diritti di Administrator, comporta la sovrascrittura dei primi 58 settori dell’hard disk e la visualizzazione del BSOD (Blue Screen of Death)
Nome file Bewerbungsmappe-gepackt.exe
MD5 af2379cc4d607a45ac44d62135fb7015
Dimensione 230912 byte
PETYA RANSOMWARE 3Gianfranco Tonello
Petya.A: infezione dell’MBR nella fase 1
• Il settore 0 dell'MBR è infettato dal codice di loader del Petya. La
lunghezza di questo codice è di 147 byte.
• I settori dall'1 al 0x21 sono cifrati con XOR 0x37.
• Dal settore 0x22 al 0x35 troviamo il codice virale di Petya
Ransomware.
• Nel settore 0x36 è memorizzata la key utilizzata per la cifratura, un
vettore, gli indirizzi Tor-Onion e l'ID della vittima.
• Il settore 0x37 è utilizzato per la verifica della key, in questa fase
ogni byte del settore contiene il valore 0x37.
• Nel settore 0x38 vi troviamo l'MBR originale cifrato con XOR 0x37
• Il settore 0x39 è vuoto, contiene solo zeri.
PETYA RANSOMWARE 4Gianfranco Tonello
Petya.A: settore 0x36 nella fase 1
Struttura del settore 0x36
� Off 0x0: (1 byte) valore che indica lo stato del disco
� 0: disco da cifrare
� 1: disco cifrato
� 2: disco de-cifrato
� Off 0x01: (32 byte) key utilizzata per la cifratura
� Off 0x21: (8 byte) vettore di inizializzazione
utilizzato nella cifratura
� Off 0x29: (128 byte) indirizzi Tor-Onion per pagare
il riscatto
� Off 0xa9: (90 byte) ID della vittima
PETYA RANSOMWARE 5Gianfranco Tonello
Petya.A: settore 0x37 nella fase 1
PETYA RANSOMWARE 6Gianfranco Tonello
Petya.A: fase 2 (il primo boot)Il codice dell'MBR viene carico al
seguente indirizzo: 0:7c00
L'MBR infetto da Petya va a leggere
0x20 settori partendo dal settore 0x22
e li carica all'indirizzo: 0:8000, dove
salta a quell'indirizzo con un JMP.
Ora all'indirizzo 0:8000 avremo tutto il
codice del Petya attivo in memoria.
Lettura del settore 0x36:
Se il primo byte del settore 0x36, cioè quella
del campo "stato del disco", vale 0, allora
inizierà la procedura di cifratura (falso chkdsk),
altrimenti visualizzerà le istruzioni del riscatto.
Falso chkdsk ->
PETYA RANSOMWARE 7Gianfranco Tonello
Petya.A: settore 0x36 nella fase 2
1. Petya legge il settore 0x36 in memoria
2. Imposta a 1 il valore del primo byte del
settore 0x36 caricato in memoria (stato
del disco)
3. Copia la key da 32 byte in un buffer
interno e azzera quella in memoria del
settore 0x36
4. Riscrive il settore 0x36 modificato
PETYA RANSOMWARE 8Gianfranco Tonello
Petya.A: settore 0x37 nella fase 2Petya va a cifrare il settore 0x37 (che conteneva tutti i byte di valore 0x37) con la key a 32 byte (residente in memoria)
Settore 0x37 prima della cifratura (fase 1) Settore 0x37 dopo la cifratura (fase 2)
PETYA RANSOMWARE 9Gianfranco Tonello
Petya.A: cifratura con Salsa20 nella fase 2• Algoritmo utilizzato per la cifratura è Salsa20
• Master Table (64 byte):
• "expand 32-byte k"
• Key da 32 byte
• Vettore di inizializzazione da 8 byte (settore 0x36)
• Contatore da 8 byte (valore iniziale 0)
Salsa20 è un algoritmo di cifratura che esegue operazioni a 32 bit (add, xor, rot)
La versione di Salsa20 implementata in Petya.A esegue operazioni a 16 bit !!!
PETYA RANSOMWARE 10Gianfranco Tonello
Petya.A: Salsa20 a 16 bit vers. Petya
PETYA RANSOMWARE 11Gianfranco Tonello
Petya.A: cifratura della MFT nella fase 2Settore 0x39: numero di cluster cifrati Cifratura della Master File Table
1. Scrittura del settore 0x39 con tutti zeri (lo ripete su
tutti i dischi collegati)
2. Lettura del Boot Sector
3. Calcola la posizione dell'MFT sul disco
4. Legge 2 settori dell'MFT
5. Dal record con attributo 0x80 determina il numero
totale di settori da cifrare e il settore assoluto da
cui iniziare
6. Cifratura dei settori dell'MFT con la key a 32 byte e
il vettore a 8 byte (vengono cifrati 8 settori alla
volta fino al raggiungimento del numero
prestabilito)
7. Scrittura del settore 0x39 con il numero totale dei
cluster cifrati
8. Reboot del computer
PETYA RANSOMWARE 12Gianfranco Tonello
Petya.A: Richiesta riscatto (fase 3)Dal secondo avvio in poi, Petya visualizzerà le schermate relative al riscatto
PETYA RANSOMWARE 13Gianfranco Tonello
Petya.A: Verifica della Key (fase 3)La lunghezza della key inserita deve essere compresa tra 16 e 73 caratteri. Solo i caratteri compresi tra lo spazio ' ' asc(0x20) e la '~' asc (0x7e) saranno stampati a video.
Dalla key inserita vengono presi i primi 16 caratteri che appartengono al seguente insieme:
123456789abcdefghijkmnopqrstuvwxABCDEFGHJKLMNPQRSTUVWX
Dalla Key da 16 byte si ottiene una Key da 32 byte come rappresentato in figura:
PETYA RANSOMWARE 14Gianfranco Tonello
Petya.A: Decifrare la MFT (fase 3)• Lettura del settore 0x36 per leggere il vettore da 8 byte
• Lettura del settore 0x37
• Tramite la Key da 32 byte ottenuta e il vettore da 8 byte decifra il settore 0x37, se ogni byte del settore 0x37 ha valore 0x37 allora la key da 32 byte è esatta, nel caso contrario visualizza messaggio di "Invalid key! "
• Se la chiave è esatta, pone a 2 il primo byte del settore 0x36 e scrive la key da 32 byte nel medesimo settore.
• Decifra il master File Table (MFT)
• Legge il settore 0x38 dove è memorizzato l'MBR cifrato con XOR 0x37, dopo averlo decifrato lo scrive nel settore 0.
• Decifra i settori da 0x1 a 0x21 che erano cifrati con XOR 0x37
• In casi paricolari (se all'offset 0 x1b8 dell'MBR contiene la DWORD 0x37373737) allora decifra ulteriori settori sempre con XOR 0x37
• Al termine chiede di riavviare il computer
PETYA RANSOMWARE 15Gianfranco Tonello
Petya.A: Come determinare la Key senza pagare 1/3
Petya utilizza il settore 0x37 per verificare la correttezza della chiave inserita.
Dal settore 0x37 possiamo determinare i valori XOR utilizzati per la cifratura:
Sector 0x37encrypted
xor
0x37
Table with512 key xor
B0 B1 B2 B3
PETYA RANSOMWARE 16Gianfranco Tonello
Petya.A: Come determinare la Key senza pagare 2/3
Settore 0x37 cifrato: Tabella con le 512 xor key:
XOR 0x37
Output Salsa20 con
Contatore = 0 (T 0)
Output Salsa20 con
Contatore = 1 (T 1)
Output Salsa20 con
Contatore = 2 (T2)
Output Salsa20 con
Contatore = 3 (T 3)
Output Salsa20 con
Contatore = 4 (T 4)
Output Salsa20 con
Contatore = 5 (T 5)
Output Salsa20 con
Contatore = 6 (T 6)
Output Salsa20 con
Contatore = 7 (T 7)
PETYA RANSOMWARE 17Gianfranco Tonello
Petya.A: Come determinare la Key senza pagare 3/3
T 0 T 1 T 2 T 3 T 4 T 5 T 6 T 7
T 0 - 25 23 18 18 40 18 36
T 1 25 - 22 13 19 29 27 35
T 2 23 22 - 19 25 39 13 29
T 3 18 13 19 - 24 30 18 28
T 4 18 19 25 24 - 38 16 42
T 5 40 29 39 30 38 - 36 16
T 6 18 27 13 18 16 36 - 34
T 7 36 35 29 28 42 16 34 -
Numero di bit differenti tra le tabelle (output di Salsa20)
Come calcolare la key:
• Ogni tabella contiene 512 bit
• Lunghezza key è 8 caratteri
• F. O.: MIN num. di bit differenti
• Algoritmi:
• Genetici
• MetaEuristici (Cuckoo Search, etc)
• Visual Image (similitudine) output di Salsa20
PETYA RANSOMWARE 18Gianfranco Tonello
Petya.A: Visual ImageTabella con le 512 xor key: Scala a 16 grigi (4 bit): Filtro LBP Scala a 16 grigi (4 bit):
PETYA RANSOMWARE 19Gianfranco Tonello
Petya.A: Frequenza istogrammi
PETYA RANSOMWARE 20Gianfranco Tonello
Petya.A: Similitudine istogrammi
T 0 T 1 T 2 T 3 T 4 T 5 T 6 T 7
T 0 - 84,74 86,32 83,60 80,60 73,91 82,16 90,33
T 1 84,74 - 88,89 89,97 89,64 76,51 86,63 86,99
T 2 86,32 88,89 - 84,01 86,28 70,35 89,13 84,54
T 3 83,60 89,97 84,01 - 83,63 76,12 81,19 88,23
T 4 80,60 89,64 86,28 83,63 - 77,09 83,88 83,18
T 5 73,91 76,51 70,35 76,12 77,09 - 69,81 78,81
T 6 82,16 86,63 89,13 81,19 83,88 69,81 - 83,15
T 7 90,33 86,99 84,54 88,23 83,18 78,81 83,15 -
Similitudine (%) istogrammi tabelle (output di Salsa20)
PETYA RANSOMWARE 21Gianfranco Tonello
Istogrammi intersezione
Petya.B: green version
PETYA RANSOMWARE 22Gianfranco Tonello
Petya.B: Salsa20 a 32 bit ma con errori•Il dropper di Petya.B se eseguito senza diritti di Administrator eseguirà il ransomware Mischa per la cifratura dei file di documento
•Password iniziale di 16 caratteri, che diventa da 32 caratteri <psw 16><psw 16> concatenando i primi 16 caratteri con se stesso
• Salsa20 viene applicato con operazioni a 32 bit
• La creazione della tabella di input di Salsa20 ha un errore nell’utilizzo dell’istruzione assembly CWD, che comporta la sovrascrittura della word più significativa con il segno della word meno significativa, questo implica che solo 8 caratteri della password saranno coinvolti nella cifratura
B0 B2 B3 B4 B5 B6 B7 B8 B9B10B11B12B13B14B15B1
32 byte
Key 32 byte
Key 16 byte
Key
Extractor 16 byte
B0 B2 B3 B4 B5 B6 B7 B8 B9B10B11B12B13B14B15B1 B0 B2 B3 B4 B5 B6 B7 B8 B9B10B11B12B13B14B15B1
0:5C22 push bp
0:5C23 mov bp, sp
0:5C25 push si
0:5C26 mov si, [bp+arg_0]
0:5C29 sub al, al
0:5C2B mov ah, [si+1]
0:5C2E mov cl, [si]
0:5C30 sub ch, ch
0:5C32 add ax, cx
0:5C34 cwd
0:5C35 pop si
0:5C36 leave
0:5C37 retn
PETYA RANSOMWARE 23Gianfranco Tonello
Petya.B: Schema di cifratura con Salsa20
e x p an d 0x20 1
6
K0 K1 K2 K3 K4 K5 K6
K31
K7 K8 K9 K10
K15
K28
K11
K12 K14K13 V0 V1 V2 V3 V4 V5 V6 V7
- b y0 0 0 0 0 0 0 0 K19K16 K18K17
K23K20 K22K21 K27K24 K26K25 K30K29 t e 0x20 k
0 1 2 3 4 5 6 7 8 9 A B C D E F
00
10
20
30
Master Table
00
10
20
30
e x 0 0n d 0 0
6
K0 K1 ? ? K4 K5 ?
?
? K8 K9 ??
K28
?K12 ?K13 V0 V1 ? ? V4 V5 ? ?
- 0 00 0 0 0 0 0 0 0 ?K16 ?K17
?K20 ?K21 ?K24 ?K25 ?K29 t e 0 0
0 1 2 3 4 5 6 7 8 9 A B C D E F
Table 1
00
10
20
30
e x 0 0n d 0 0
6
K0 K1 ? ? K4 K5 ?
?
? K8 K9 ??
K28
?K12 ?K13 V0 V1 ? ? V4 V5 ? ?
- 0 00 0 0 0 0 0 0 0 ?K16 ?K17
?K20 ?K21 ?K24 ?K25 ?K29 t e 0 0
0 1 2 3 4 5 6 7 8 9 A B C D E F
Table 2Shuffle
+
? =0 se W_LO >= 0
-1 se W_LO < 0
S0 S1 S2 S3
S20 S21 S22 S23
S40
S4 S5 S6 S7 S8 S9 S10
S59
S11 S12 S13 S14
S19
S56
S15
S16 S18S17 S24 S25 S26 S27 S28 S29 S30 S31
S41 S42 S43S32 S33 S34 S35 S36 S37 S38 S39 S47S44 S46S45
S51S48 S50S49 S55S52 S54S53 S58S57 S60 S61 S62 S63
0 1 2 3 4 5 6 7 8 9 A B C D E F
00
10
20
30
Tab_3: XOR keys
PETYA RANSOMWARE 24Gianfranco Tonello
Petya.B: Come determinare la Key senza pagare 1/2
Settore 0x37 cifrato: Tabella con le 512 xor key:
XOR 0x07
Output Salsa20 con
Contatore = 0 (T 0)
Output Salsa20 con
Contatore = 1 (T 1)
Output Salsa20 con
Contatore = 2 (T2)
Output Salsa20 con
Contatore = 3 (T 3)
Output Salsa20 con
Contatore = 4 (T 4)
Output Salsa20 con
Contatore = 5 (T 5)
Output Salsa20 con
Contatore = 6 (T 6)
Output Salsa20 con
Contatore = 7 (T 7)
PETYA RANSOMWARE 25Gianfranco Tonello
Petya.B: Come determinare la Key senza pagare 2/2
T 0 T 1 T 2 T 3 T 4 T 5 T 6 T 7
T 0 - 259 256 247 279 258 262 271
T 1 259 - 253 274 254 263 257 268
T 2 256 253 - 269 269 258 258 253
T 3 247 274 269 - 260 245 255 242
T 4 279 254 269 260 - 243 277 246
T 5 258 263 258 245 243 - 242 253
T 6 262 257 258 255 277 242 - 255
T 7 271 268 253 242 246 253 255 -
Numero di bit differenti tra le tabelle (output di Salsa20)
Come calcolare la key:
• Ogni tabella contiene 512 bit
• Lunghezza key è 8 caratteri
• Algoritmi per il Petya.A falliscono
• Brute Force: 548 combinazioni (tempo
di calcolo di qualche settimana nel caso
peggiore)
e x p an d 0x20 1
6
K0 K1 K2 K3 K4 K5 K6
K31
K7 K8 K9 K10
K15
K28
K11
K12 K14K13 V0 V1 V2 V3 V4 V5 V6 V7
- b y0 0 0 0 0 0 0 0 K19K16 K18K17
K23K20 K22K21 K27K24 K26K25 K30K29 t e 0x20 k
0 1 2 3 4 5 6 7 8 9 A B C D E F
00
10
20
30
Master Table
PETYA RANSOMWARE 26Gianfranco Tonello
• Usa la stessa interfaccia della versione «green»
• Corretto bug sulla chiave nella fase di cifratura con Salsa20, adesso tutti i 16 caratteri della chiave sono coinvolti
• Attualmente non è possibile determinare la chiave utilizzata dopo che la MFT è stata cifrata
• Venduto come servizio
Gianfranco Tonello PETYA RANSOMWARE 27
Petya.C: Corretto bug sulla chiave
• Petya è il primo ransomware che ha approcciato la cifratura della MFT
• L’errata applicazione di Salsa20 può comportare il recupero della chiave di cifratura
• La chiave di cifratura è possibile recuperarla anche nella fase 1
• La cifratura della MFT necessita essere Administrator, questo ha comportato che il dropper di Petya possa rilasciare il ransomware «Mischa» nel caso non si possedesse di tali autorizzazioni
• Evoluzione di Petya fino al raggiungimento della maturità, dove sono stati corretti tutti i bug !
• Petya viene venduto come «servizio» ad altri cyber-criminali
• E’ possibile mitigare l’attacco intercettando a basso livello la sovrascrittura del Master Boot Record, in questo modo Petya non potrà infettare l’MBR e quindi cifrare la MFT.
• L’autore di Petya sembra essere un fan di James Bond
Gianfranco Tonello PETYA RANSOMWARE 28
Conclusioni
Gianfranco Tonello PETYA RANSOMWARE 29
Conclusioni
Gianfranco Tonello PETYA RANSOMWARE 30
Domande
Ing. Gianfranco Tonello
Email: [email protected]
Linkedin: https://it.linkedin.com/in/gianfranco-tonello-77078843
Grazie per l’attenzione
Gianfranco Tonello PETYA RANSOMWARE 31
Autore