Attacco SSH fingerprint fuzzy

Creato il 27 agosto 2010 da Nightfly

Rileggendo un libro interessantissimo, "Hacking: The Art of Exploitation, 2nd Edition", ci siamo soffermati su una tipologia di attacco piuttosto particolare. In questo post, vorremmo raccontarla, quanto meno per l'idea che ne sta alla base: si tratta dell'"SSH fingerprint fuzzy".
Lo scenario di riferimento per questo attacco, è il man-in-the-middle, quindi lo rivedremo al volo prima di esaminare lʼoggetto vero e proprio di questo post.

Lʼattacco man-in-the-middle consiste nell'interporsi fra due host in modo da poterne intercettare le comunicazioni, anche se cifrate. Facciamo un esempio: supponiamo che l'host Slient voglia comunicare verso SSH Server in SSH. SSH permette una comunicazione cifrata, essendo un sistema ibrido, ossia attraverso un sistema di cifratura asimmetrica viene scambiata la chiave che verrà utilizzata dal sistema di cifratura simmetrica. Una volta instaurata la comunicazione cifrata, chiunque intercetti il traffico non sarà in grado di interpretare i dati. Quello che l'attacco man-in-the-middle si prefigge di realizzare è una situazione come quella mostrata sotto: attraverso il poisoning dell'ARP di Client, si farà in modo che allʼindirizzo IP di SSH Server corrisponda il MAC address dell'attaccante.

A questo punto non rimarrà altro che realizzare due canali cifrati, uno verso Client e lʼaltro verso SSH Server; entrambi saranno convinti di parlarsi direttamente, senza rendersi conto che, in realtà, tra di loro esiste un terzo, per così dire, incomodo. Date un'occhiata a MTM-SSH per avere maggiori dettagli su quanto sopra.

Ora poniamoci nella situazione in cui ci stiamo connettendo ad un host che conosciamo, ma da un client che non abbiamo mai utilizzato. Ebbene, ci verrà mostrato un alert del tipo:

The authenticity of host '192.168.1.6 (192.168.1.6)' can't be established.
RSA key fingerprint is 37:cc:ed:98:05:2a:de:a2:77:50:9e:a3:73:83:f9:38.

Are you sure you want to continue connecting (yes/no)?

Se ci ricordassimo esattamente il fingerprint dell'host verso il quale ci stiamo connettendo, nel caso in cui fossimo soggetti ad attacchi MITM, ci accorgeremmo immediatamente che cʼè qualcosa che non va. Infatti ci ritroveremmo con un fingerprint completamente diverso da quello a noi noto. Ma studi su questo argomento, hanno mostrato come l'attenzione nell'esame del fingerprint sia rivolta soltanto alla parte iniziale ed a quella finale della stringa. Ciò significa che il cervello potrebbe facilmente essere ingannato, se vi fosse il modo di trovare una chiave pubblica con un fingerprint sufficientemente simile a quello della chiave originale.

Un programma in grado di realizzare quanto detto sopra è ffp (http://freeworld.thc.org/papers/ffp.html).

Dovrete scaricare i sorgenti e compilarli. Una volta fatto, i passi da fare sono i seguenti:

Supponiamo che lʼhost su cui volete fare i test sia 192.168.0.6. Tramite ssh-keyscan potete
risalire alla chiave pubblica:

ssh-keyscan -t rsa 192.168.0.6 > rsa_pub

# 192.168.0.6 SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4

cat rsa_pub

192.168.0.6 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxjj6JFc7CSA/
Jxb61vM62Jv7cr4qHzVuhddKvMDFBs4NtR89dAflsCG67UVxrbYj0oYk1hD0eKKoJxgiE0+TTxxTXN8u
b6w9v9TvM/h1uE5NH3iklvpTxF87N3pkLrTZ6aoYJmu69CsGfKd
+eSFTUUHcVS93na3e99MAeFn9kS3PAFPqjJUVLaUygfkk/hirOqta4i6DwUdAM6blvgouE7id7c/Mp
+ToO8Ph57owK6RFSl4SMfW6usuhCLqyFZRCG2KKVJeULd1gX974oaR8/
NlN6A7Znp2WlUq1OcLlMvHgadXKN6Q2YTq1Y9Yev//1tnG5h3Yj+V2lncSVEKrJUQ==

Quella ottenuta è la chiave pubblica RSA con indicazioni aggiuntive, quali, ad esempio, la versione di protocollo supportata (in questo caso solo la 2).

Per generare il fingerprint relativo a questa chiave diamo il comando:

ssh-keygen -f rsa_pub -l
2048 b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45 192.168.0.6 (RSA)

Abbiamo ottenuto il fingerprint della chiave, che come si vede, è a 2048 bit.

Adesso lanciamo ffp:

ffp -f md5 -k rsa -b 2048 -t b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45

l'output sarà simile al seguente:

---[Initializing]---------------------------------------------------------------
Initializing Crunch Hash: Done
Initializing Fuzzy Map: Done
Initializing Private Key: Done
Initializing Hash List: Done
Initializing FFP State: Done
---[Fuzzy Map]------------------------------------------------------------------
Length: 32
Type: Inverse Gaussian Distribution
Sum: 15020328
Fuzzy Map: 10.83% | 9.64% : 8.52% | 7.47% : 6.49% | 5.58% : 4.74% | 3.96% :
3.25% | 2.62% : 2.05% | 1.55% : 1.12% | 0.76% : 0.47% | 0.24% :
0.09% | 0.01% : 0.00% | 0.06% : 0.19% | 0.38% : 0.65% | 0.99% :
1.39% | 1.87% : 2.41% | 3.03% : 3.71% | 4.46% : 5.29% | 6.18% :
---[Current Key]----------------------------------------------------------------
Key Algorithm: RSA (Rivest Shamir Adleman)
Key Bits / Size of n: 2048 Bits
Public key e: 0x10001
Public Key Bits / Size of e: 17 Bits
Phi(n) and e r.prime: Yes
Generation Mode: Sloppy
State File: /var/tmp/ffp.state
Running...
---[Current State]--------------------------------------------------------------
Running: 0d 00h 00m 00s | Total: 0k hashs | Speed: nan hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: 05:a9:cb:fa:7d:92:7e:91:f1:6e:08:f9:6c:4e:a6:30
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 22.987161%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 01m 00s | Total: 14656k hashs | Speed: 244274 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:89:8e:82:19:54:07:b5:ba:02:8f:43:62:2e:4c
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 55.404576%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 02m 00s | Total: 29208k hashs | Speed: 243398 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:8b:8c:f0:38:01:b6:cf:cb:44:1e:ba:c9:83:25
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 56.821103%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 03m 00s | Total: 43819k hashs | Speed: 243440 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:db:b4:50:b0:43:92:e6:99:0d:53:5e:60:7a:45
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 58.155741%
.....
---[Current State]--------------------------------------------------------------
Running: 0d 00h 10m 00s | Total: 143226k hashs | Speed: 238710 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:ba:f3:c7:08:93:50:6b:c7:9a:15:1d:49:3e:85
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 58.808909%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 11m 00s | Total: 157814k hashs | Speed: 239112 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:ba:f3:c7:08:93:50:6b:c7:9a:15:1d:49:3e:85
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 58.808909%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 12m 00s | Total: 172309k hashs | Speed: 239318 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:ba:f3:c7:08:93:50:6b:c7:9a:15:1d:49:3e:85
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 58.808909%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 13m 00s | Total: 186840k hashs | Speed: 239539 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:ba:f3:c7:08:93:50:6b:c7:9a:15:1d:49:3e:85
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 58.808909%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 14m 00s | Total: 201167k hashs | Speed: 239485 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:ba:f3:c7:08:93:50:6b:c7:9a:15:1d:49:3e:85
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 58.808909%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 15m 00s | Total: 215206k hashs | Speed: 239118 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:ba:f3:c7:08:93:50:6b:c7:9a:15:1d:49:3e:85
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 58.808909%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 16m 00s | Total: 229921k hashs | Speed: 239501 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:ba:f3:c7:08:93:50:6b:c7:9a:15:1d:49:3e:85
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 58.808909%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 17m 00s | Total: 244732k hashs | Speed: 239933 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:bb:8a:c4:da:b6:c3:4f:fb:60:0f:e1:b4:5e:c5
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 59.901515%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 18m 00s | Total: 259554k hashs | Speed: 240328 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:bb:8a:c4:da:b6:c3:4f:fb:60:0f:e1:b4:5e:c5
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 59.901515%
......
---[Current State]--------------------------------------------------------------
Running: 0d 00h 29m 00s | Total: 422022k hashs | Speed: 242542 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:bb:8a:c4:da:b6:c3:4f:fb:60:0f:e1:b4:5e:c5
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 59.901515%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 30m 00s | Total: 435715k hashs | Speed: 242064 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:bb:8a:c4:da:b6:c3:4f:fb:60:0f:e1:b4:5e:c5
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 59.901515%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 31m 00s | Total: 449764k hashs | Speed: 241808 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:bb:8a:c4:da:b6:c3:4f:fb:60:0f:e1:b4:5e:c5
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 59.901515%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 32m 00s | Total: 463226k hashs | Speed: 241264 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:a3:bb:8a:c4:da:b6:c3:4f:fb:60:0f:e1:b4:5e:c5
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 59.901515%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 33m 00s | Total: 477715k hashs | Speed: 241270 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:ad:8b:fa:cc:cf:50:f5:22:a0:18:6e:4d:eb:39:ce
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 63.359768%
---[Current State]--------------------------------------------------------------
Running: 0d 00h 34m 00s | Total: 492301k hashs | Speed: 241324 hashs/s
--------------------------------------------------------------------------------
Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
Hash Algorithm: Message Digest 5 (MD5)
Digest Size: 16 Bytes / 128 Bits
Message Digest: b1:ad:8b:fa:cc:cf:50:f5:22:a0:18:6e:4d:eb:39:ce
Target Digest: b1:a3:8b:fa:cc:b3:0b:8f:b4:66:06:3e:95:6b:3e:45
Fuzzy Quality: 63.359768%
--------------------------------------------------------------------------------
Exiting and saving state file /var/tmp/ffp.state

Come potete vedere dalle varie righe Running, che indicano da quanto tempo il programma è in esecuzione, l'output è stato tagliato. Dopo 34 minuti, il Message Digest che abbiamo ottenuto, ci piace abbastanza: abbiamo infatti una Fuzzy Quality superiore al 63% e quanto ottenuto assomiglia al Target Digest. Possiamo interrompere con Control+C.

Gli stati di esecuzione vengono salvati su /var/tmp/ffp.state per cui possiamo riprendere l'elaborazione da dove abbiamo lasciato semplicemente col comando ffp senza opzioni.

Per estrarre dal file ffp.state le coppie di chiavi SSH, diamo il comando:

ffp -e

il cui output sarà:

---[Restoring]------------------------------------------------------------------
Reading FFP State File: Done
Restoring environment: Done
Initializing Crunch Hash: Done
--------------------------------------------------------------------------------
Saving SSH host key pairs: [00] [01] [02] [03] [04] [05] [06] [07] [08] [09]

Vediamo i file creati nella directory /tmp:

ls /tmp/ssh-rsa0*

ssh-rsa00 ssh-rsa01.pub ssh-rsa03 ssh-rsa04.pub ssh-rsa06 sshrsa07.pub ssh-rsa09 ssh-rsa00.pub ssh-rsa02 ssh-rsa03.pub ssh-rsa05 ssh-rsa06.pub sshrsa08 ssh-rsa09.pub ssh-rsa01 ssh-rsa02.pub ssh-rsa04 ssh-rsa05.pub ssh-rsa07 sshrsa08.pub

Per vedere i fingerprint relativi alle chiavi create, diamo il comando sotto:

for i in $(ls -1 /tmp/ssh-rsa0*.pub); do ssh-keygen -l -f $i; done

Visualizzeremo informazioni simili alle seguenti:

2048 b1:ad:8b:fa:cc:cf:50:f5:22:a0:18:6e:4d:eb:39:ce /tmp/ssh-rsa00.pub (RSA)
2048 b1:a3:bb:8a:c4:da:b6:c3:4f:fb:60:0f:e1:b4:5e:c5 /tmp/ssh-rsa01.pub (RSA)
2048 b1:aa:8b:9a:75:aa:76:08:50:35:24:f0:29:eb:bb:45 /tmp/ssh-rsa02.pub (RSA)
2048 b1:63:8f:0a:08:20:4f:ed:48:d6:a1:fe:cd:88:3e:45 /tmp/ssh-rsa03.pub (RSA)
2048 b1:83:8b:fa:da:98:03:d6:c2:1f:c7:05:2e:eb:eb:75 /tmp/ssh-rsa04.pub (RSA)
2048 b1:a3:ba:f3:c7:08:93:50:6b:c7:9a:15:1d:49:3e:85 /tmp/ssh-rsa05.pub (RSA)
2048 b1:a3:95:f5:c6:d7:5f:0f:7e:bd:2a:92:95:d8:9e:f5 /tmp/ssh-rsa06.pub (RSA)
2048 b1:a3:87:f7:05:62:fd:2b:eb:8a:48:cd:28:ba:1e:d5 /tmp/ssh-rsa07.pub (RSA)
2048 b1:a3:db:b4:50:b0:43:92:e6:99:0d:53:5e:60:7a:45 /tmp/ssh-rsa08.pub (RSA)
2048 b1:a3:b0:ba:d0:ad:22:88:63:7b:f6:e4:30:61:3e:55 /tmp/ssh-rsa09.pub (RSA)

Scegliamo quella che più ci soddisfa o, nel caso non ve ne fosse nessuna, continuiamo la
ricerca.

A presto.


Potrebbero interessarti anche :

Possono interessarti anche questi articoli :