500/udp - Pentesting IPsec/IKE VPN
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
IPsec широко визнаний як основна технологія для забезпечення безпеки комунікацій між мережами (LAN-to-LAN) та від віддалених користувачів до мережевого шлюзу (віддалений доступ), слугуючи основою для корпоративних VPN рішень.
Встановлення асоціації безпеки (SA) між двома точками управляється IKE, який працює під егідою ISAKMP, протоколу, призначеного для аутентифікації та обміну ключами. Цей процес розгортається в кілька фаз:
Фаза 1: Створюється захищений канал між двома кінцевими точками. Це досягається за допомогою попередньо поділеного ключа (PSK) або сертифікатів, використовуючи або основний режим, який включає три пари повідомлень, або агресивний режим.
Фаза 1.5: Хоча не є обов'язковою, ця фаза, відома як Фаза розширеної аутентифікації, перевіряє особу користувача, який намагається підключитися, вимагаючи ім'я користувача та пароль.
Фаза 2: Ця фаза присвячена узгодженню параметрів для забезпечення безпеки даних за допомогою ESP та AH. Вона дозволяє використовувати алгоритми, відмінні від тих, що використовуються в Фазі 1, для забезпечення Ідеальної впередньої секретності (PFS), що підвищує безпеку.
Порт за замовчуванням: 500/udp
Конфігурація IPSec може бути підготовлена лише для прийняття однієї або кількох трансформацій. Трансформація - це комбінація значень. Кожна трансформація містить ряд атрибутів, таких як DES або 3DES як алгоритм шифрування, SHA або MD5 як алгоритм цілісності, попередньо поділений ключ як тип аутентифікації, Diffie-Hellman 1 або 2 як алгоритм розподілу ключів і 28800 секунд як термін дії.
Отже, перше, що вам потрібно зробити, це знайти дійсну трансформацію, щоб сервер міг з вами спілкуватися. Для цього ви можете використовувати інструмент ike-scan. За замовчуванням Ike-scan працює в основному режимі і надсилає пакет до шлюзу з заголовком ISAKMP і єдиною пропозицією з вісімкою трансформацій всередині.
Залежно від відповіді ви можете отримати деяку інформацію про кінцеву точку:
Як ви можете бачити в попередній відповіді, є поле під назвою AUTH зі значенням PSK. Це означає, що vpn налаштовано з використанням попередньо поділеного ключа (і це дійсно добре для pentester). Значення останнього рядка також дуже важливе:
0 повернено handshake; 0 повернено notify: Це означає, що ціль не є шлюзом IPsec.
1 повернено handshake; 0 повернено notify: Це означає, що ціль налаштована для IPsec і готова виконати переговори IKE, і один або кілька з трансформацій, які ви запропонували, є прийнятними (дійсна трансформація буде показана в виході).
0 повернено handshake; 1 повернено notify: Шлюзи VPN відповідають повідомленням notify, коли жодна з трансформацій не є прийнятною (хоча деякі шлюзи цього не роблять, у такому випадку слід спробувати подальший аналіз і переглянуту пропозицію).
Отже, в цьому випадку у нас вже є дійсна трансформація, але якщо ви в 3-му випадку, то вам потрібно трохи брутфорсити, щоб знайти дійсну трансформацію:
По-перше, вам потрібно створити всі можливі трансформації:
А потім перебрати кожен з них за допомогою ike-scan (це може зайняти кілька хвилин):
Якщо брутфорс не спрацював, можливо, сервер відповідає без рукостискань навіть на дійсні трансформації. Тоді ви можете спробувати той же брутфорс, але використовуючи агресивний режим:
Сподіваюсь, дійсна трансформація буде відображена назад. Ви можете спробувати ту ж атаку за допомогою iker.py. Ви також можете спробувати брутфорс трансформацій за допомогою ikeforce:
У 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 виявить, який постачальник, він надрукує його:
Це також можна досягти за допомогою скрипта nmap ike-version
Щоб мати можливість захопити хеш, вам потрібна дійсна трансформація, що підтримує агресивний режим, та правильний ID (ім'я групи). Ви, ймовірно, не будете знати дійсну назву групи, тому вам доведеться використовувати метод брутфорсу. Для цього я б рекомендував вам 2 методи:
По-перше, спробуйте надіслати запит з фальшивим ID, намагаючись зібрати хеш ("-P"):
Якщо не повертається хеш, то, ймовірно, цей метод брутфорсу спрацює. Якщо повертається якийсь хеш, це означає, що буде надіслано фальшивий хеш для фальшивого ID, тому цей метод не буде надійним для брутфорсу ID. Наприклад, може бути повернуто фальшивий хеш (це трапляється в сучасних версіях):
Але якщо, як я вже сказав, не повертається хеш, то вам слід спробувати брутфорсити загальні назви груп, використовуючи ike-scan.
Цей скрипт спробує брутфорсити можливі ID і поверне ID, для яких повертається дійсне з'єднання (це буде дійсна назва групи).
Якщо ви виявили конкретну трансформацію, додайте її в команду ike-scan. І якщо ви виявили кілька трансформацій, не соромтеся додати новий цикл, щоб спробувати їх усі (вам слід спробувати їх усі, поки один з них не спрацює належним чином).
Ви можете використовувати словник ikeforce або той, що в seclists з загальними назвами груп для брутфорсу:
Or use this dict (is a combination of the other 2 dicts without repetitions):
iker.py також використовує ike-scan для брутфорсу можливих імен груп. Він слідує власному методу, щоб знайти дійсний ID на основі виходу ike-scan.
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. І якщо ви виявили кілька трансформацій, не соромтеся додати новий цикл, щоб спробувати їх усі (вам слід спробувати їх усі, поки один з них не спрацює належним чином).
(From the book Network Security Assessment: Know Your Network): Також можливо отримати дійсні імена користувачів, підслуховуючи з'єднання між VPN-клієнтом і сервером, оскільки перший пакет агресивного режиму, що містить ID клієнта, надсилається у відкритому вигляді.
Нарешті, якщо ви знайшли дійсну трансформацію та ім'я групи, і якщо агресивний режим дозволено, тоді ви можете дуже легко отримати хеш, який можна зламати:
Хеш буде збережено в hash.txt.
Ви можете використовувати psk-crack, john (використовуючи ikescan2john.py) та hashcat для crack хешу:
Агресивний режим IKE в поєднанні з попередньо поділеним ключем (PSK) зазвичай використовується для групової аутентифікації. Цей метод доповнюється XAuth (Розширена аутентифікація), яка служить для введення додаткового рівня аутентифікації користувача. Така аутентифікація зазвичай використовує сервіси, такі як Microsoft Active Directory, RADIUS або подібні системи.
Перехід до IKEv2 демонструє помітну зміну, де EAP (Розширений протокол аутентифікації) використовується замість XAuth для аутентифікації користувачів. Ця зміна підкреслює еволюцію практик аутентифікації в рамках безпечних комунікаційних протоколів.
Отже, ви можете захопити дані входу, використовуючи fiked, і перевірити, чи є якийсь стандартний логін (Вам потрібно перенаправити трафік IKE на fiked
для прослуховування, що можна зробити за допомогою ARP спуфінгу, більше інформації). Fiked буде діяти як VPN-кінець і захопить облікові дані XAuth:
Також, використовуючи IPSec, спробуйте здійснити атаку MitM і заблокувати весь трафік на порт 500, якщо тунель IPSec не може бути встановлений, можливо, трафік буде відправлений у відкритому вигляді.
Щоб брутфорсити XAUTH (коли ви знаєте дійсну назву групи id та psk), ви можете використовувати ім'я користувача або список імен користувачів та список паролів:
Таким чином, ikeforce спробує підключитися, використовуючи кожну комбінацію ім'я користувача:пароль.
Якщо ви знайшли один або кілька дійсних трансформацій, просто використовуйте їх, як у попередніх кроках.
У Kali VPNC використовується для встановлення IPsec тунелів. Профілі повинні знаходитися в каталозі /etc/vpnc/
. Ви можете ініціювати ці профілі за допомогою команди vpnc.
Наступні команди та конфігурації ілюструють процес налаштування VPN-з'єднання з VPNC:
У цьому налаштуванні:
Замініть [VPN_GATEWAY_IP]
на фактичну IP-адресу VPN-шлюзу.
Замініть [VPN_CONNECTION_ID]
на ідентифікатор VPN-з'єднання.
Замініть [VPN_GROUP_SECRET]
на груповий секрет VPN.
Замініть [VPN_USERNAME]
та [VPN_PASSWORD]
на облікові дані аутентифікації VPN.
[PID]
символізує ідентифікатор процесу, який буде призначено, коли vpnc
ініціюється.
Переконайтеся, що фактичні, безпечні значення використовуються для заміни заповнювачів під час налаштування VPN.
Оцінка безпеки мережі, 3-е видання
port:500 IKE
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)