Как отключить протокол LLMNR, за минуту

LLMNR logo

Доброго времени суток! В прошлой статье я вас научил алгоритму диагностики на системах хранения данных, когда перестает работать FC порт на контроллере. Двигаемся дальше и сегодня затронем тему безопасности. В данной публикации пойдет речь, о протоколе LLMNR, его назначении и вообще использовании в современных реалиях. Я покажу разные методы как отключать LLMNR на доменных рабочих станциях и серверах, а так же локально на нужных системах. Давайте приступать.

Что такое протокол LLMNR?

LLMNR (Link-Local Multicast Name Resolution / Механизм широковещательного разрешения имен) - это сетевой протокол, который пришел за протоколом NetBIOS. Network Basic Input/Output System это очень старый протокол, который появился в самых первых версиях Windows и исторически, для обратной совместимости включался в последующие релизы. NetBIOS, а уже и LLMNR позволяет локально разрешать имена в локальной сети

LLMNR помогает серверам/рабочим станциям на ОС Windows за счет стека IPV4 и IPV6 выполнять разрешение имен без использования сервера DNS. В любой крупной организации за разрешение DNS имени других клиентов выступает сервер DNS, но если он недоступен или у вас не используется, то хост передает широковещательный запрос LLMNR по локальной сети, чтобы проверить, сможет ли ответить какой-либо другой хост, все это делается на уровне L2.

Link-Local Multicast Name Resolution был разработан для работы в средах, где нет доступа к DNS-серверам, и позволяет устройствам находить друг друга по имени. Он работает по порту UDP 5355. Протокол принимает host-to- IP на основе многоадресных пакетов и отправляет их по всей локальной сети на уровне L2

Зачем нужно отключать LLMNR?

LLMNR необходим только в том случае, если DNS-сервер недоступен в домене, что уже само по себе странно, так как сам домен тогда просто перестает работать. Когда процесс запускается, он запрашивает у всех прослушивающих сетевых интерфейсов повтор, если имя хоста является авторитетным. У протокола LLMNR нет механизма аутентификации, поэтому на отправленный запрос по сути может отвечать кто угодно, открывая возможность к потенциальным атакам. Злоумышленники могут прослушивать такие запросы и отвечать на них, представляясь не тем кем они являются, это ведет к несанкционированному доступу в среде Active Directory. В результате этого злоумышленник получит хэш учетных данных пользователя. Имея на руках хеш жертвы, мы можем попытаться перевести хеш в автономный режим и взломать его.

LLMNR может быть подвержен атакам, таким как spoofing (подмена) имен. Поэтому важно использовать его с осторожностью и в безопасных средах, а лучше вообще отключать чем мы и займемся

Как проверить текущее состояние LLMNR

Перед тем как мы начнем процедуру отключения протокола Link-Local Multicast Name Resolution, давайте проверим его статус. Проще всего это сделать через PowerShell. Запустите оснастку в режиме администратора и введите:

$(Get-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -name EnableMulticast).EnableMulticast

Если в ответ вы получаете "1" или ошибку, показанную ниже, то это означает, что LLMNR активен.

Get-ItemProperty : Cannot find path 'HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient' because it does not exist.
At line:1 char:3
+ $(Get-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows N ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (HKLM:\Software\...ws NT\DNSClient:String) [Get-ItemProperty], ItemNotFo
undException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand

Проверка статуса LLMNR

Если статус "0", то LLMNR выключен.

Проверка статуса LLMNR на Windows Server

Массовая проверка серверов

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

# Тут вы указываете путь до вашего созданного файла
$servers = Get-Content -Path "C:\Temp\RDS\servers-term.txt"

# Создать массив для хранения результатов
$results = @()

# Начинаем на каждом сервере производить обработку
foreach ($server in $servers) {
try {
# Получаем значение EnableMulticast
$enableMulticast = Invoke-Command -ComputerName $server -ScriptBlock {
Get-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -Name EnableMulticast -ErrorAction Stop
} | Select-Object -ExpandProperty EnableMulticast

# Добавляем результат в массив
$results += [PSCustomObject]@{
ServerName = $server
EnableMulticast = $enableMulticast
}
} catch {
# В случае ошибки добавляем информацию об ошибке
$results += [PSCustomObject]@{
ServerName = $server
EnableMulticast = "Error: $_"
}
}
}

# Выводим в табличном виде результаты
$results | Format-Table -AutoSize

Массовая проверка LLMNR

Отключение LLMNR через групповую политику

Так как у меня Active Directory, то правильным централизованным инструментом должна выступать групповая политика. Создайте новую GPO или возьмите нужную, в которой вы будите менять настройки.

Я советую применять данную политику верхнеуровнево на все серверы и компьютеры домена, но изначально с помощью фильтрации GPO сделайте нацеливание на пилотную группу. После тестирования можно будет ее расширять или сразу применять на группу authenticated users (Прошедшие проверку)

Я создал отдельную GPO с именем Disable_NNLMR и открыл ее на редактирование. OU применения у меня это корень домена.

Отключение NNLMR через GPO

Переходим в раздел:

Computer Configuration - Administrative Templates - Network - DNS Client - Turn off multicast name resolution

Turn off multicast name resolution

В русской локализации это:

Конфигурация компьютера - Политики - Административные шаблоны - Сеть - DNS-клиент - Отключить многоадресное разрешение имен

Отключить многоадресное разрешение имен

Далее вам остается дождаться обновление групповой политики или сделать ее форсированно. Из приятного, что для отключения NNLMR протокола не требуется перезагрузка сервера. В результате этой политики на клиентах будет создан ключ реестра, о котором мы поговорим чуть ниже.

Отключаем протокол LLMNR через реестр

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

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient\EnableMulticast со значением "0", с типом REG_DWORD

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

EnableMulticast

Запустите командную строку от имени администратора и выполните команду, которая в реестр добавит нужный ключ EnableMulticast.

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" /v EnableMulticast /t REG_DWORD /d 0 /f

Отключение протокола LLMNR через реестр

То же самое можно сделать и еще одним методом в групповой политике, создав с ее помощью ключ реестра. Создайте так же политику и перейдите к ее редактированию. Перейдите в раздел:

Computer Configuration - Preferences - Windows Settings - Registry (В русской версии: Конфигурация компьютера - Настройки - Конфигурация Windows - Реестр)

Щелкаем по пустому пространству правым кликом и из контекстного меню выберите "New - Registry Item".

Создание ключа реестра с помощью GPO

  • Action - Выбираем "Create"
  • Hive - HKEY_LOCAL_MACHINE
  • Key Path - SOFTWARE\Policies\Microsoft\Windows NT\DNSClient
  • Value Name - EnableMultiCast
  • Value type - REG_DWORD
  • Value data - 0

Создание ключа реестра EnableMultiCast через GPO

Далее ждем применения политики и все готово.

Можно еще создать текстовый файл с определенным содержанием, единственное потом ему изменить расширение с txt на reg.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient]
"EnableMulticast"=dword:00000000

EnableMulticast файл

Далее запускаем данный файл и соглашаемся с добавлением.

Добавление ключа реестра

Как отключить LLMNR через PowerShell

PowerShell очень универсальное средство управления системами Windows, чтобы вам деактивировать использование протокола NNLMR необходимо запустить консоль Powershell в режиме администратора. Далее выполните там команду:

New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" -Name "EnableMulticast" -Value 0 -PropertyType DWord -Force

Как отключить LLMNR через PowerShell

Проверим, что ключ EnableMultiCast появился в реестре, для этого сделаем запрос:

Get-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" -Name "EnableMulticast"

Проверка ключа реестра EnableMultiCast через Powershell

Если необходимо создать данный параметр на списке серверов, то нужно подготовить тестовый файл, где на каждой строке будет уникальное имя сервера и передать его командам:

# Путь к файлу со списком серверов
$servers = Get-Content -Path "C:\Temp\servers.txt"

# Проходим по каждому серверу в списке
foreach ($server in $servers) {
try {
# Определяем путь к ключу реестра
$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient"

# Проверяем, существует ли ключ
if (-not (Test-Path $regPath -ErrorAction SilentlyContinue)) {
# Создаем ключ, если он не существует
New-Item -Path $regPath -Force | Out-Null
}

# Устанавливаем значение реестра
Set-ItemProperty -Path $regPath -Name "EnableMulticast" -Value 0 -Type DWord -ErrorAction Stop

Write-Host "Ключ реестра создан или обновлен на сервере: $server"
} catch {
Write-Host "Ошибка при работе с сервером $server $_"
}
}

Как отключить LLMNR с помощью локальной политики

Данный метод будет полезен, когда у вас нет может не быть Active Directory, либо же вы хотите точечно через графический интерфейс создать настройку. Запустите окно "Выполнить" и введите:

gpedit.msc и нажмите Enter

Открываем gpedit.msc

Переходим по пути:

Конфигурация компьютера - Административные шаблоны - Сеть - DNS-клиент - Отключить многоадресное разрешение имен

Отключить многоадресное разрешение имен gpedit.msc

В английской локализации путь будет такой:

Computer Configuration - Administrative Templates - Network - DNS Client - Turn off multicast name resolution

Отключаем протокол LLMNR с помощью SCCM

Если у вас на работе используется System Center Configuration Manager, то вы можете взять команду описанную выше для PowerShell, создать ps1 файл и запускать его в SCCM для коллекции или отдельных компьютеров.

Run Scripts SCCM

На этом у меня все. Мы с вами рассмотрели разные методы избавления вашей системы от протокола NNLMR, что очень полезно. Никогда не забывайте про эту настройку, чтобы максимально быть в цифровой безопасности. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.

Оцените статью
Настройка серверов windows и linux
Добавить комментарий