500/udp - Pentesting IPsec/IKE VPN
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 jest poświęcona 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
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 pojedynczą propozycją z ośmioma transformacjami w środku.
W zależności od odpowiedzi możesz uzyskać pewne informacje o punkcie końcowym:
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 akceptowalnych (ważna transformacja zostanie pokazana w wynikach).
0 zwrócone handshake; 1 zwrócone notify: Bramki VPN odpowiadają wiadomością notify, gdy żadna z transformacji nie jest akceptowalna (choć niektóre bramki 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:
A następnie przeprowadź atak brute-force na każdy z nich za pomocą ike-scan (może to zająć kilka minut):
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:
Mam nadzieję, że ważna transformacja zostanie odesłana. Możesz spróbować tego samego ataku używając iker.py. Możesz także spróbować wymusić transformacje za pomocą ikeforce:
W Grupie DH: 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).
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 pomiędzy odebranymi 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 identyfikatora dostawcy (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:
To można również osiągnąć za pomocą skryptu nmap ike-version
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:
Przede wszystkim spróbuj wykonać żądanie z fałszywym ID, próbując zebrać hash ("-P"):
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 powszechnych nazw grup do brute-forcingu:
Or use this dict (jest to kombinacja innych 2 dicts bez powtórzeń):
iker.py również używa ike-scan do bruteforcingu możliwych nazw grup. Stosuje swoją własną metodę, aby znaleźć ważne ID na podstawie wyników ike-scan.
ikeforce.py to narzędzie, które można wykorzystać do bruteforcingu 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 bruteforcingu 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 bruteforcingu serwera i sprawdzi, czy po wysłaniu poprawnego id serwer odpowiada jakimś pakietem. Oczywiście celem bruteforcingu id jest uzyskanie PSK, gdy masz ważne id. Następnie, z id i PSK będziesz musiał bruteforcingować 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).
(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.
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:
Hash zostanie zapisany w pliku hash.txt.
Możesz użyć psk-crack, john (używając ikescan2john.py) i hashcat, aby crack hash:
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 zmiana polega na tym, że 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.
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:
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.
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ł:
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.
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:
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.
Network Security Assessment 3rd Edition
port:500 IKE
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)