Transcript
Page 1: Petya Ransomware: sotto i riflettori

Petya ransomwareSOTTO I RIFLETTORI…

End Summer Camp 201631. AGO – 4. SET Forte Bazzera, VE

Autore: Gianfranco Tonello Forte Bazzera VE, 2 settembre 2016

Page 2: Petya Ransomware: sotto i riflettori

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

Page 3: Petya Ransomware: sotto i riflettori

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

Page 4: Petya Ransomware: sotto i riflettori

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

Page 5: Petya Ransomware: sotto i riflettori

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

Page 6: Petya Ransomware: sotto i riflettori

Petya.A: settore 0x37 nella fase 1

PETYA RANSOMWARE 6Gianfranco Tonello

Page 7: Petya Ransomware: sotto i riflettori

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

Page 8: Petya Ransomware: sotto i riflettori

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

Page 9: Petya Ransomware: sotto i riflettori

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

Page 10: Petya Ransomware: sotto i riflettori

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

Page 11: Petya Ransomware: sotto i riflettori

Petya.A: Salsa20 a 16 bit vers. Petya

PETYA RANSOMWARE 11Gianfranco Tonello

Page 12: Petya Ransomware: sotto i riflettori

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

Page 13: Petya Ransomware: sotto i riflettori

Petya.A: Richiesta riscatto (fase 3)Dal secondo avvio in poi, Petya visualizzerà le schermate relative al riscatto

PETYA RANSOMWARE 13Gianfranco Tonello

Page 14: Petya Ransomware: sotto i riflettori

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

Page 15: Petya Ransomware: sotto i riflettori

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

Page 16: Petya Ransomware: sotto i riflettori

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

Page 17: Petya Ransomware: sotto i riflettori

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

Page 18: Petya Ransomware: sotto i riflettori

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

Page 19: Petya Ransomware: sotto i riflettori

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

Page 20: Petya Ransomware: sotto i riflettori

Petya.A: Frequenza istogrammi

PETYA RANSOMWARE 20Gianfranco Tonello

Page 21: Petya Ransomware: sotto i riflettori

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

Page 22: Petya Ransomware: sotto i riflettori

Petya.B: green version

PETYA RANSOMWARE 22Gianfranco Tonello

Page 23: Petya Ransomware: sotto i riflettori

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

Page 24: Petya Ransomware: sotto i riflettori

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

Page 25: Petya Ransomware: sotto i riflettori

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

Page 26: Petya Ransomware: sotto i riflettori

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

Page 27: Petya Ransomware: sotto i riflettori

• 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

Page 28: Petya Ransomware: sotto i riflettori

• 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

Page 29: Petya Ransomware: sotto i riflettori

Gianfranco Tonello PETYA RANSOMWARE 29

Conclusioni

Page 30: Petya Ransomware: sotto i riflettori

Gianfranco Tonello PETYA RANSOMWARE 30

Domande

Page 31: Petya Ransomware: sotto i riflettori

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


Top Related