Широковещательные протоколы NetBIOS over TCP/IP, LLMNR и mDNS (Multicast DNS) используются для разрешения имен в Windows сетях, в которых отсутствует (недоступен) DNS сервер (обычно это домашние или небольшие офисные/SOHO сети). В корпоративных сетях с DNS серверами, эти протоколы обычно не нужны. Более того, эти широковещательные протоколы легко могут использоваться злоумышленниками для реализации спуфинг, relay и MITM атак, позволяющих перехватить учетные данных пользователей в локальной подсети (в т.ч. можно получить хэши NTLM). Разберемся, как отключить протоколы LLMNR, NetBIOS и mDNS в доменной сети Windows вручную и через GPO.
Широковещательные протоколы LLMNR, NetBIOS и mDNS в Windows сетях
DNS является предпочтительным методом разрешения имен в Windows сетях. Если в сети отсутствуют DNS сервера, используются альтернативные разрешающие протоколы в следующем порядке:
- MulticastDNS (mDNS)
- Link-Local Multicast Name Resolution (LLMNR)
- NetBIOS (NBNS)
Протокол LLMNR (механизм широковещательного разрешения имен) присутствует во всех версиях Windows, начиная с Vista и позволяет IPv6 и IPv4 клиентам разрешать имена соседних компьютеров без использования DNS сервера за счет широковещательных запросов в локальном сегменте сети L2. Этот протокол также автоматически используется при недоступности DNS (в рабочих группах Windows этот протокол используется для сетевого обнаружения/Network Discovery). Для передачи данных используется порт UDP/5355.
Протокол 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 все записи о соседних компьютерах в локальных сети:
nbtstat -c
Сетевой протокол Multicast DNS (mDNS) доступен начиная с версии Windows 10 1703 ( в Windows Server с версии 2019). Позволяет разрешать имена хостов в IP-адреса в небольших локальных сетях без использования центрального DNS-сервера. Уникальность имен в пределах локальной сети обеспечивается присваиванием суффикса
.local
. Предполагалось, что mDNS должен полностью заменить устаревшие протоколы NetBIOS и LLMNR. Для разрешения имен используется многоадресная рассылка UDP пакетов на порт 5353. mDNS также широко используется для автоматического обнаружения сетевых принтеров и других служб в локальной сети.
Протоколы NetBIOS, LLMNR и mDNS позволяют компьютерам в рабочей группе найти друг друга по именам при недоступности DNS сервера. В доменных сетях эти протоколы можно отключить.
Отключение протокола LLMNR с помощью GPO
В доменной среде широковещательные запросы LLMNR на компьютерах и серверах домена можно отключить с помощью групповой политики. Для этого:
- В консоли
GPMC.msc
создайте новую или отредактируйте имеющуюся политику GPO, которую нужно применить ко всем рабочим станциям и серверам; - Перейдите в раздел Computer Configuration -> Administrative Templates -> Network -> DNS Client;
- Включите политики Turn off multicast name resolution и Turn off smart multi-homed name resolution, изменив их значения на Enabled
- Дождитесь обновления параметров GPO на клиентах или обновите их вручную командой
gpupdate /force
.
Можно отключить 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 -Force
New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" -Name DisableSmartNameResolution -Value 1 -PropertyType DWORD -Force
Отключение протокола NetBIOS over TCP/IP в Windows
Отключить NetBIOS можно в настройках сетевого адаптера:
- Откройте свойства сетевого подключения в панели
ncpa.cpl
- Выберите протокол TCP/IPv4 и откройте его свойства;
- Нажмите кнопку Advanced, затем перейдите на вкладку WINS и выберите опцию Disable NetBIOS over TCP (Отключить NetBIOS через TCP/IP);
- Сохраните изменения.
Если у вас на компьютере несколько сетевых интерфейсов (или отдельных VLAN), нужно будет отключить NetBIOS в свойствах каждого их них.
Проверьте статус NetBIOS over TCP/IP для сетевых адаптеров из командной строки:
ipconfig /all |find "NetBIOS"
NetBIOS over Tcpip. . . . . . . . : Disabled
Можно отключить поддержку NetBIOS для конкретного сетевого адаптера через реестр. Для каждого сетевого адаптера компьютера есть отдельная ветка с его TCPIP_GUID внутри HKLM\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 через GPO?
В редакторе групповых политик или новых административных ADMX шаблонов GPO для Windows нет отдельного параметра, позволяющего отключить протокол NETBIOS over TCP/IP на компьютере. Чтобы отключить NETBIOS для всех адаптеров компьютера воспользуйтесь таким логон скриптом PowerShell.
$regkey = "HKLM:SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces"
Get-ChildItem $regkey |foreach { Set-ItemProperty -Path "$regkey\$($_.pschildname)" -Name NetbiosOptions -Value 2 -Verbose}
Можно использовать более простой код с WMI запросом:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration | % {$_.SetTcpipNetbios(2)}
Сохраните этот код в файл disableNetbios.ps1, скопируйте его в каталог вашей GPO и запускайте на клиентах через Computer Configuration -> Policies -> Windows Settings -> Scripts -> Startup -> PowerShell Scripts.
Затем откройте командную строку и проверьте, что NetBIOS отключен для ваших сетевых адаптеров (кроме туннельных интерфейсов):
wmic nicconfig get caption,index,TcpipNetbiosOptions
Отключаем mDNS в Windows
Для отключения протокола mDNS в Windows, нужно создать на компьютере параметр EnableMDNS со значением 0 в ветке реестра HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters.
Можно создать этот параметр командой:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" /v " EnableMDNS" /t REG_DWORD /d "0" /f
Либо применить параметр реестра через Group Policy Preferences (Computer Configuration > Preferences > Windows Settings > Registry)
- Action: Update
- Hive: HKEY_LOCAL_MACHINE
- Key Path: SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
- Value name: EnableMDNS
- Value type: DWORD
- Value data: 0
Также в GPO можно создать правило Windows Defender Firewall, которое будет блокировать входящий трафик mDNS на клиентах. Можно отключить правило mDNS (UDP-In) только для доменного профиля, чтобы ноутбуки пользователей при работе за пределами домена (офиса) могли обнаруживать в сети соседние устройства через mDNS.
Чтобы проверить, что на компьютере отключены NetBIOS, LLMNR и mDNS, выполните команды:
netstat -nao | FIND /i ":137 "
netstat -nao | FIND /i ":5353 "
netstat -nao | FIND /i ":5355 "
Если эти протоколы разрешения имен отключены, команды не должны вернуть открытых портов.
Ну LLMNR не является устаревшим протоколом, он как раз относительно свежий и появился на замену NetBIOS. Но у него задачи другие — он для небольших сетей. Ну и конечно для корпоративных сетей, где DNS настроен корректно, включенный LLMNR совсем не нужен и его стоит отключить — тут я согласен. )
В общем то да, вы правы, протокол LLMNR относительно свежий, но это не умоляет того факта, что он в домене не нужен
Ну да, я так и написал что согласен. 🙂
LLMNR не поддерживает ipv4 (по крайней мере так говорит книга проектирование сетевой инфраструктуры Windows server 2008 Тони Нортроп и Макин)
Да, так и есть. Именно благодаря этому, несколько компьютеров на базе Windows Vista и выше, подключенные к одному коммутатору, могут видеть друг друг безо всякой настройки сетевых интерфейсов в Windows. )
просто написано — протокол присутствует во всех версиях Windows, начиная с Vista и позволяет IPv6 и IPv4 клиентам
но причем тут клиенты ipv4?
Согласно RFC 4795 — протокол LLMNR работает для ipv4 и ipv6 клиентов.
Насчет реализации его MSFT — не уверен, возможно и есть какие-то свои особенности.
Достаточно просто ввести команду обвновления политик: gpupdate /force
Я поправил бы ваш код на вот такой:
Get-ChildItem -Path ‘HKLM:SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces\’ | Set-ItemProperty -Name NetbiosOptions -Value 2
Но потом я нашел на, мой взгляд, более правильное решение:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration | % {$_.SetTcpipNetbios(2)}
унимание! admx-шаблон политики отрабатывает не правильно(windows server 2012 r2), нужно создать параметр DisableSmartNameResolution со значением 1. EnableMulticast это другая политика
Specifies that a multi-homed DNS client should optimize name resolution across networks. The setting improves performance by issuing parallel DNS, link local multicast name resolution (LLMNR) and NetBIOS over TCP/IP (NetBT) queries across all networks. In the event that multiple positive responses are received, the network binding order is used to determine which response to accept.
If you enable this policy setting, the DNS client will not perform any optimizations. DNS queries will be issued across all networks first. LLMNR queries will be issued if the DNS queries fail, followed by NetBT queries if LLMNR queries fail.
If you disable this policy setting, or if you do not configure this policy setting, name resolution will be optimized when issuing DNS, LLMNR and NetBT queries.
Registry Hive HKEY_LOCAL_MACHINE
Registry Path Software\Policies\Microsoft\Windows NT\DNSClient
Value Name DisableSmartNameResolution
Value Type REG_DWORD
Enabled Value 1
Disabled Value 0
ну ты pridoorok конечно, читай сам что написано:
EnableMulticast 0
If you enable this policy setting, LLMNR will be disabled on all available network adapters on the client computer.
DisableSmartNameResolution 1
If you enable this policy setting, the DNS client will not perform any optimizations. DNS queries will be issued across all networks first. LLMNR queries will be issued if the DNS queries fail, followed by NetBT queries if LLMNR queries fail.
Вместо “Turn off smart multi-homed name resolution” нужно включить “Turn off multicast name resolution”
Я выключил оба.
то есть включил оба )