Active Directory — это сердце большинства корпоративных сетей Windows. Контроллер домена знает всех пользователей, все компьютеры и все права. Поэтому его защита определяет безопасность всей организации: если кто-то получил контроль над доменом, дальше защищать уже нечего. Хорошая новость в том, что большинство реальных проблем AD не экзотика, а набор повторяющихся слабых мест: устаревшие протоколы, избыточные права, забытые учётные записи и отсутствие журналирования.

В этой статье мы разберём, как проверить и укрепить домен itpages.lab.local с контроллером srv-dc01 и рядовыми серверами в сети 192.168.10.0/24. Все примеры оборонительные: мы ищем слабости у себя, чтобы закрыть их раньше, чем это сделает кто-то чужой. Команды выполняй в тестовой среде или в окно обслуживания и всегда имей актуальную резервную копию состояния системы контроллера домена.

Оценка и первоочередные меры

Шаг 1. Инвентаризация привилегированных групп

Начни с вопроса: кто в домене может всё? Членство в группах Domain Admins, Enterprise Admins, Schema Admins и Administrators должно быть минимальным и объяснимым. Типичная картина в старых доменах — десятки «временных» администраторов, которые так и остались навсегда.

Import-Module ActiveDirectory
foreach ($g in 'Domain Admins','Enterprise Admins','Schema Admins','Administrators') {
    "== $g"
    Get-ADGroupMember -Identity $g -Recursive |
      Select-Object Name, SamAccountName, objectClass
}

Для каждого участника ответь: зачем ему эти права, пользуется ли он ими ежедневно, есть ли у него отдельная административная учётная запись. Администратор должен читать почту и открывать браузер под обычной учёткой, а для управления серверами использовать отдельную. Это называется разделением учётных записей и сильно снижает ущерб от компрометации рабочей станции.

Шаг 2. Поиск «мёртвых» и рискованных учётных записей

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

# Не входили более 90 дней
$cut = (Get-Date).AddDays(-90)
Get-ADUser -Filter {Enabled -eq $true -and LastLogonDate -lt $cut} `
  -Properties LastLogonDate | Select Name, LastLogonDate

# Пароль без срока действия
Get-ADUser -Filter {PasswordNeverExpires -eq $true -and Enabled -eq $true} |
  Select Name, SamAccountName

# Учётные записи с SPN (сервисные), проверить сложность паролей
Get-ADUser -Filter {ServicePrincipalName -like "*"} `
  -Properties ServicePrincipalName, PasswordLastSet |
  Select Name, PasswordLastSet

Отключи то, что не нужно, а затем через месяц удали. Для сервисных учётных записей, чьи пароли старые и короткие, переходи на групповые управляемые учётные записи служб (gMSA): пароль в них длинный, случайный и меняется автоматически.

Шаг 3. Отказ от устаревших протоколов

Старые протоколы аутентификации оставлены ради совместимости, но делают сеть уязвимой для перехвата и подмены. Основные кандидаты на отключение: SMBv1, LM и NTLMv1, а также анонимный перебор общих ресурсов. Сначала включи аудит и посмотри, кто ими пользуется, потом отключай.

# Проверка и отключение SMBv1
Get-SmbServerConfiguration | Select EnableSMB1Protocol
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force

# Требовать подпись SMB
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force

# Уровень аутентификации LAN Manager: только NTLMv2 (значение 5)
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Lsa `
  -Name LmCompatibilityLevel -Value 5

Для массового применения вместо ручных команд используй групповые политики: Computer Configuration, Windows Settings, Security Settings, Local Policies, Security Options. Подпись LDAP на контроллере также стоит сделать обязательной, предварительно проверив журнал событий с идентификаторами 2886-2889, которые показывают клиентов с небезопасным подключением.

Шаг 4. Модель администрирования по уровням

Классическая идея tiered administration: делим ресурсы на три уровня. Tier 0 — контроллеры домена и всё, что управляет идентификацией. Tier 1 — серверы приложений. Tier 2 — рабочие станции. Администратор более высокого уровня никогда не входит на машины более низкого: иначе его учётные данные окажутся в памяти ненадёжного узла.

Практически это реализуется так: создай группы T0-Admins, T1-Admins, T2-Admins; добавь в политики «Запретить локальный вход» и «Запретить вход через службы удалённых рабочих столов» для групп более высокого уровня на машинах нижнего. Добавь привилегированных пользователей в группу Protected Users, чтобы для них отключались слабые способы аутентификации и кэширование.

Add-ADGroupMember -Identity 'Protected Users' -Members 'adm.ivanov'

Перед добавлением проверь, что учётной записи не нужны NTLM и делегирование: в Protected Users они недоступны.

Шаг 5. Локальные администраторы и LAPS

Если на всех рабочих станциях и серверах одинаковый пароль локального администратора, компрометация одной машины открывает остальные. Решение — Windows LAPS: каждый компьютер получает уникальный пароль, хранящийся в AD и обновляемый по расписанию.

Update-LapsADSchema
Set-LapsADComputerSelfPermission -Identity 'OU=Servers,DC=itpages,DC=lab,DC=local'
# Просмотр пароля уполномоченным администратором
Get-LapsADPassword -Identity srv-web01 -AsPlainText

Доступ на чтение паролей выдавай узкой группе и логируй. Затем в групповой политике включи LAPS, задай длину не менее 16 символов и срок смены 30 дней.

Шаг 6. Журналирование и обнаружение

Укрепление без наблюдения — половина работы. Включи расширенную политику аудита и собирай события в центральное хранилище. Особенно важны входы (4624, 4625), блокировки (4740), изменения в привилегированных группах (4728, 4732, 4756), создание и изменение учётных записей (4720, 4738), очистка журнала (1102).

auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Security Group Management" /success:enable /failure:enable
auditpol /set /subcategory:"User Account Management" /success:enable /failure:enable
auditpol /set /subcategory:"Directory Service Changes" /success:enable
wevtutil sl Security /ms:536870912

Последняя команда увеличивает размер журнала безопасности примерно до 512 МБ, чтобы события не затирались слишком быстро. Для PowerShell включи журналирование блоков скриптов (Script Block Logging) и модулей: оно пригодится при расследовании. Настрой пересылку событий на сервер сбора, например на srv-scan01, через Windows Event Forwarding, и создай оповещения хотя бы на изменение состава Domain Admins и очистку журнала.

Шаг 7. Резервные копии и восстановление

Защита должна включать план восстановления. Делай регулярные копии состояния системы контроллеров домена и храни хотя бы одну копию вне домена, в изолированном месте, недоступном с администраторских учёток. Проверь процедуру восстановления в тестовой среде: непроверенная копия — это надежда, а не защита.

wbadmin start systemstatebackup -backuptarget:E: -quiet
wbadmin get versions

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

Шаг 8. Регулярная самопроверка

Используй бесплатные инструменты оценки состояния AD, которые показывают конфигурационные недочёты и дают баллы риска: например, PingCastle и Purple Knight. Они работают в режиме чтения и подходят для периодического контроля. Запускай их раз в квартал, сравнивай результаты и отслеживай тренд. Все найденные пункты вноси в общий список задач вместе с отчётами сканера уязвимостей.

Шаг 9. Групповые политики и безопасные базовые настройки

Ручная настройка каждого сервера не масштабируется. Используй базовые конфигурации безопасности Microsoft (Security Baselines) и применяй их через групповые политики к организационным подразделениям. Начни с тестового подразделения, затем расширяй. Особое внимание: политика паролей и блокировки, брандмауэр Windows во всех профилях, запрет автозапуска со съёмных носителей, защита учётных данных (Credential Guard) там, где позволяет оборудование.

Get-NetFirewallProfile | Select Name, Enabled, DefaultInboundAction
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled True -DefaultInboundAction Block
Get-MpComputerStatus | Select AMServiceEnabled, RealTimeProtectionEnabled
gpresult /r /scope computer

Последняя команда показывает, какие политики реально применились к узлу: так ты поймёшь, почему настройка не действует. Для Windows Server srv-dc01 отдельно проверь, что на контроллере нет лишних ролей и программ: чем он «скучнее», тем лучше. Не запускай на нём браузеры, почтовые клиенты и сторонние службы без необходимости.

Шаг 10. Шаблоны сертификатов и службы Kerberos

Если в домене развёрнут центр сертификации (AD CS), ошибки в шаблонах сертификатов нередко становятся путём к повышению привилегий. Проверь, кому разрешено запрашивать сертификаты, кто может задавать произвольные имена субъекта и нужны ли вообще устаревшие шаблоны. Инструменты оценки (PingCastle, Locksmith) покажут рискованные шаблоны в режиме чтения. Для Kerberos включи шифрование AES и отключи RC4 там, где нет зависимости, а пароль служебной учётной записи krbtgt меняй по плану, дважды с интервалом, достаточным для репликации.

Шаг 11. Процесс, а не разовая акция

Укрепление домена нельзя завершить за выходные. Оформи его как план на квартал: первый месяц — привилегированные группы, устаревшие протоколы и аудит, второй — LAPS, политики и модель уровней, третий — резервные копии, проверка восстановления и самооценка. После каждого этапа замеряй результат тем же инструментом оценки, чтобы видеть динамику. Важно согласовывать изменения с владельцами приложений: многие «странные» настройки существуют потому, что от них зависит старая система учёта или принтер. Лучше найти такую зависимость на стадии аудита, чем во время аварии. Назначь ответственного за домен и раз в месяц проводи короткую встречу, где разбираются новые находки, изменения в привилегированных группах и результаты проверок журналов. Так защита становится привычкой команды, а не заданием, которое все откладывают.

Не забывай и про рядовые серверы: srv-web01 и другие узлы, включённые в домен, должны получать те же базовые политики, обновления и аудит. Часто именно забытый файловый сервер на старой версии Windows становится слабым звеном, через которое учётные данные попадают в чужие руки. Составь список всех систем в домене, отметь версию ОС и дату последнего обновления, а устаревшие либо обнови, либо изолируй в отдельный сегмент с жёсткими правилами межсетевого экрана и отдельной учётной записью обслуживания.

Частые ошибки и как их избежать

  • Вход администратора домена на рядовые машины. Один вход под Domain Admins на заражённую рабочую станцию — и данные учётной записи могут оказаться доступны чужим. Строго разделяй уровни и используй отдельные учётки.
  • Отключить протокол без предварительного аудита. Резкое отключение NTLM или SMBv1 ломает старые принтеры, сканеры и приложения. Сначала включай аудит, составляй список зависимых систем, потом переходи на замены и только затем запрещай.
  • Забытые сервисные учётные записи. Пароль в десять лет и права администратора домена «чтобы работало» — классика. Инвентаризируй такие записи, давай минимум прав и переводи на gMSA.

Что дальше

Защита строится из нескольких слоёв — вот соседние темы серии: