
Уязвимость BDU:2024-11128 LDAP Nightmare
Уязвимость BDU:2024-11128 (CVE-2024-49113), также известная как LDAP Nightmare, затрагивает реализацию протокола LDAP в Windows. Она связана с чтением за пределами буфера (Out-of-Bounds Read) при обработке LDAP-ответов с рефералами (перенаправлениями). Это позволяет удалённому злоумышленнику вызвать отказ в обслуживании (DoS), приводящий к перезагрузке системы или крашу процесса lsass.exe
(Local Security Authority Subsystem Service).
Уязвимые системы:
-
Windows Server 2008–2025
-
Windows 10/11 (все версии)
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H/E:U/RL:O/RC:C
Технический анализ уязвимости
Корень проблемы
Функция обработки LDAP-рефералов в Windows некорректно проверяет длину поля messageID
в ответах сервера. При получении специально сформированного пакета с подменённым messageID
возникает чтение данных за пределами выделенного буфера, что вызывает критическую ошибку.
Уязвимый код (упрощённо):
void ProcessLDAPReferral(LDAPMessage* response) {
int messageID = ExtractMessageID(response); // Некорректная проверка длины
...
}
Механика атаки
-
Инициация LDAP-запроса:
Атакующий отправляет через RPC вызовDsrGetDcNameEx2
запрос к контроллеру домена, запрашивая информацию о домене. -
Подмена ответа:
Злоумышленник разворачивает поддельный LDAP-сервер, который возвращает ответ с рефералом, содержащим недопустимыйmessageID
. -
Сбой обработки:
Клиентский код Windows неправильно интерпретируетmessageID
, читая память за пределами буфера, что приводит к крашуlsass.exe
или BSOD.
Разбор эксплойта LDAP Nightmare
Эксплойт использует фреймворк Metasploit и состоит из двух компонентов:
1. LDAP-сервер (UDP)
-
Цель: Прослушивает порт 389 и отправляет вредоносные ответы.
-
Формирование пакета:
def get_malicious_ldap_packet(message_id): # Создание пакета с рефералом и подменённым messageID referral = pureldap.LDAPSearchResultDone(resultCode=10, referral=['ldap://attacker.com']) packet = referral.toWire() packet = manipulate_message_id(packet, message_id) # Внедрение недопустимого ID return packet
2. RPC-триггер
-
Вызов DsrGetDcNameEx2:
dce.bind(nrpc.MSRPC_UUID_NRPC) request = nrpc.DsrGetDcNameEx2(DomainName=attacker_domain, ...) dce.request(request) # Инициирует LDAP-запрос к поддельному серверу
Условия
-
Контроль над DNS: Домен атакующего должен иметь SRV-записи:
_ldap._tcp.dc._msdcs.attacker.com → attacker_ip
-
Доступ к RPC-порту (49664) целевого сервера.
Способы защиты
1. Установка обновлений
Установите патчи Microsoft от 10.12.2024. Проверьте версию wldap32.dll
:
Get-Item "C:\Windows\System32\wldap32.dll" | Select-Object VersionInfo
Ожидаемая версия после патча: 10.0.19041.3803
(Win10 21H2).
2. Ограничение доступа к LDAP/RPC
-
Фаерволы: Блокируйте входящие подключения к портам 389 (LDAP) и 49664 (RPC) из ненадёжных сетей.
-
Групповые политики: Отключите анонимные LDAP-запросы через
gpedit.msc
:Computer Configuration → Policies → Windows Settings → Security Settings → Local Policies → Security Options → "Network access: Restrict anonymous access to Named Pipes and Shares" → Enabled
3. Мониторинг активности
-
Анализ LDAP-трафика: Используйте Wireshark для детекции пакетов с рефералами на нестандартные домены.
-
Сигнатуры SIEM: Настройте правила для обнаружения частых вызовов
DsrGetDcNameEx2
.
Пример правила для Splunk:source="win:security" EventCode=4663 ObjectType="RPC Server" AccessMask="0x1"
4. Резервирование служб
-
Кластеризация контроллеров домена: Обеспечьте отказоустойчивость AD через резервные DC.
-
Регулярные бэкапы: Используйте
wbadmin
для создания теневых копий системных разделов.
Рекомендации для администраторов
-
Проверка DNS-записей: Убедитесь, что SRV-записи домена защищены от подмены (DNSSEC).
-
Сегментация сети: Изолируйте контроллеры домена в отдельном VLAN.
