Защита Active Directory от взлома: 12 шагов для малого бизнеса
За 15 лет в IT-аутсорсинге я разворачивал и спасал десятки доменов в офисах от 10 до 200 рабочих мест. И почти всегда катастрофа начиналась одинаково: бухгалтер открыла письмо «акт сверки.zip», шифровальщик за 40 минут прошёл по всем сетевым шарам, потому что у бухгалтера были права администратора, а пароль локального админа на всех ПК был один и тот же. Эта статья — концентрат того, что мы в ITfresh внедряем у новых клиентов в первые две недели обслуживания. Без идеализма, без покупки дорогих решений — только то, что реально работает в офисе на 30-50 человек.
Почему «у нас маленькая компания, нас не взломают» — миф 2026 года
Современные шифровальщики не ищут жертв вручную. Это конвейер: ботнет сканирует интернет на открытые RDP, фишинговые рассылки уходят миллионами, IAB (initial access broker) продаёт доступ к вашей сети за 200 долларов любому желающему. Им всё равно, оборот у вас 10 миллиардов или 30 миллионов в год. Шифрование 25 рабочих станций и сервера 1С парализует бизнес на неделю минимум, а средний ущерб для среднего и малого бизнеса в Москве по нашим наблюдениям за 2025 год — от 1.5 до 8 миллионов рублей с учётом простоя.
Хорошая новость: 90% этих инцидентов предотвращаются базовым hardening, который я опишу ниже. Это не CIS Benchmark Level 2 со 400 пунктами — это 12 шагов, которые реально внедрить силами одного инженера за две-три недели.
Шаг 1. Аудит того, что есть, без иллюзий
Прежде чем что-то закручивать, надо понять, что вы защищаете. Я начинаю с трёх PowerShell-скриптов, запускаемых на контроллере домена под учёткой Domain Admin. Первый — список всех учёток с правами выше обычного пользователя:
Get-ADGroupMember -Identity "Domain Admins" -Recursive |
Select-Object Name, SamAccountName, distinguishedName |
Export-Csv C:\audit\domain_admins.csv -NoTypeInformation -Encoding UTF8
Get-ADGroupMember -Identity "Enterprise Admins" -Recursive |
Select-Object Name, SamAccountName |
Export-Csv C:\audit\enterprise_admins.csv -NoTypeInformation -Encoding UTF8
Get-ADGroupMember -Identity "Schema Admins" -Recursive |
Select-Object Name, SamAccountName |
Export-Csv C:\audit\schema_admins.csv -NoTypeInformation -Encoding UTF8
В нормальном офисе на 30 человек в Domain Admins должно быть две учётки: одна моя инженерная и одна резервная break-glass с длинным паролем в сейфе. Если я нахожу там бухгалтера Марию Ивановну, потому что «ей надо было разово что-то установить в 2021 году» — это первая дыра, которую я закрываю.
Второй скрипт ищет неактивные учётки и пользователей, у которых пароль не меняется годами:
Get-ADUser -Filter * -Properties LastLogonDate, PasswordLastSet, Enabled |
Where-Object { $_.Enabled -eq $true -and $_.LastLogonDate -lt (Get-Date).AddDays(-90) } |
Select-Object Name, SamAccountName, LastLogonDate, PasswordLastSet |
Sort-Object LastLogonDate |
Export-Csv C:\audit\stale_users.csv -NoTypeInformation -Encoding UTF8
Третий — учётки сервисов с правами и их SPN, потому что именно по сервисным аккаунтам идут атаки Kerberoasting:
Get-ADUser -Filter { ServicePrincipalName -like "*" } -Properties ServicePrincipalName, MemberOf, PasswordLastSet |
Select-Object Name, SamAccountName, ServicePrincipalName, PasswordLastSet
Результаты этого аудита я обсуждаю с заказчиком на полуторачасовой встрече и получаю согласие удалить лишнее, прежде чем двигаться дальше.
Шаг 2. Принцип наименьших привилегий — на практике
Самая частая ошибка в малых офисах: «у нас все администраторы своих ПК, потому что иначе им неудобно». Я бескомпромиссно убираю локальных админов у пользователей. Если бухгалтеру нужно поставить обновление 1С — это делает инженер ITfresh за пять минут удалённо. Если дизайнеру нужен принтер — мы заранее раздаём драйверы через Print Management.
На уровне домена я создаю чёткую структуру OU и групп безопасности. Например для офиса финансовой компании на 35 человек структура выглядит так:
OU=Sotrudniki,DC=corp,DC=client,DC=ru
├── OU=Buhgalteria
├── OU=Prodazhi
├── OU=Marketing
├── OU=IT
└── OU=Rukovodstvo
OU=Servers,DC=corp,DC=client,DC=ru
├── OU=Domain Controllers (создаётся автоматически)
├── OU=File Servers
└── OU=1C Servers
OU=Workstations,DC=corp,DC=client,DC=ru
├── OU=Buhgalteria
├── OU=Prodazhi
└── OU=Marketing
OU=Groups,DC=corp,DC=client,DC=ru
├── OU=Security (SG_Buhgalteria_FullAccess, SG_1C_Users и т.д.)
└── OU=Distribution
OU=ServiceAccounts,DC=corp,DC=client,DC=ru
OU=PrivilegedAccounts,DC=corp,DC=client,DC=ru
Все права на сетевые ресурсы и приложения раздаются исключительно через группы безопасности (модель AGDLP: Account → Global → Domain Local → Permission). Когда в компанию приходит новый бухгалтер, я добавляю его в SG_Buhgalteria — и он автоматически получает доступ к нужным шарам, принтерам и базе 1С. Когда увольняется — отключаю учётку и убираю из всех групп одной командой.
Шаг 3. Парольная политика и Fine-Grained Password Policies
Стандартная парольная политика домена настраивается через Default Domain Policy (gpmc.msc). Мои базовые значения для офисов до 50 ПК:
- Минимальная длина пароля — 12 символов (для админов через FGPP — 16);
- Сложность включена (три из четырёх категорий);
- История паролей — последние 12;
- Срок действия — 180 дней (NIST SP 800-63B уже не требует ротации, но в России регуляторика другая, и Mimecast/Sophos в 2025 году рекомендуют 90-180 дней);
- Блокировка после 10 неудачных попыток на 15 минут с обнулением счётчика через 15 минут.
Для привилегированных учёток я дополнительно настраиваю Fine-Grained Password Policy через Active Directory Administrative Center (ADAC):
New-ADFineGrainedPasswordPolicy `
-Name "FGPP-Admins" `
-Precedence 10 `
-MinPasswordLength 16 `
-PasswordHistoryCount 24 `
-ComplexityEnabled $true `
-MinPasswordAge "1.00:00:00" `
-MaxPasswordAge "90.00:00:00" `
-LockoutThreshold 5 `
-LockoutDuration "00:30:00" `
-LockoutObservationWindow "00:30:00"
Add-ADFineGrainedPasswordPolicySubject -Identity "FGPP-Admins" -Subjects "Domain Admins"
Это даёт админам отдельный, более жёсткий профиль без необходимости поднимать ещё один домен.
Шаг 4. LAPS — обязательно, всегда, везде
Windows Local Administrator Password Solution автоматически генерирует уникальные пароли для встроенного локального администратора каждого компьютера и хранит их в Active Directory. Это закрывает атаку Pass-the-Hash, при которой злоумышленник с одного скомпрометированного ПК ходит по всему офису, потому что пароль локального админа везде одинаковый.
В Windows 11 22H2 и Windows Server 2019/2022/2025 LAPS уже встроен (Windows LAPS, не путать со старым Microsoft LAPS на MSI). Включаем его одной GPO. Сначала расширяем схему AD:
Update-LapsADSchema
Даём контроллерам домена право писать пароли:
Set-LapsADComputerSelfPermission -Identity "OU=Workstations,DC=corp,DC=client,DC=ru"
Затем создаём GPO «LAPS Settings» и привязываем к OU=Workstations:
- Computer Configuration → Administrative Templates → System → LAPS → Configure password backup directory:
Active Directory; - Password Settings: длина 20, complexity Large letters + small letters + numbers + specials, max password age 30 days;
- Name of administrator account to manage: пустое (управляем встроенным RID 500) или указываем кастомного, если переименовали.
Чтение пароля для конкретного хоста делается командой:
Get-LapsADPassword -Identity "PC-BUH-05" -AsPlainText
Доступ к паролю — только моей инженерной группе SG_LAPS_Readers, которую я делегирую через Set-LapsADReadPasswordPermission. Бухгалтер прочитать чужой пароль не сможет.
Шаг 5. Защита учётной записи krbtgt
Это сервисная учётка, которой Active Directory подписывает все Kerberos-билеты. Если злоумышленник получает её хеш — он печатает Golden Ticket и становится Domain Admin'ом без всяких паролей. Восстановление после такой компрометации стоит дороже, чем просто переустановка домена с нуля.
Мера профилактики простая: менять пароль krbtgt раз в полгода, два раза подряд с интервалом 10-24 часа (чтобы успели реплицироваться все DC и истекли активные TGT). Я использую штатный скрипт Microsoft New-KrbtgtKeys.ps1 (есть на github.com/microsoft/New-KrbtgtKeys.ps1):
# Первый сброс — режим тестирования
.\New-KrbtgtKeys.ps1 -mode 1 -OU "Domain Controllers"
# Через сутки — реальный сброс №1
.\New-KrbtgtKeys.ps1 -mode 4
# Подождать минимум 10 часов (или сутки), затем сброс №2
.\New-KrbtgtKeys.ps1 -mode 4
В календаре у меня стоит напоминание на январь и июль каждого года. После любого инцидента (увольнение админа, подозрение на компрометацию) — немедленный двойной сброс.
Шаг 6. Отключение NTLMv1 и LLMNR
NTLMv1 — устаревший протокол аутентификации, хеши которого ломаются за минуты на современном GPU. LLMNR (Link-Local Multicast Name Resolution) и NetBIOS позволяют любому в сегменте перехватывать запросы и собирать NTLMv2-хеши инструментом Responder за пять минут.
В GPO «AD Hardening Baseline», привязанной к корню домена, я выставляю:
- Computer Configuration → Policies → Windows Settings → Security Settings → Local Policies → Security Options → Network security: LAN Manager authentication level → Send NTLMv2 response only. Refuse LM & NTLM (значение 5);
- Network security: Minimum session security for NTLM SSP based (Server и Client) → Require NTLMv2 session security + Require 128-bit encryption;
- Computer Configuration → Administrative Templates → Network → DNS Client → Turn off multicast name resolution → Enabled (это и есть LLMNR);
- Computer Configuration → Administrative Templates → Network → Network Provider → Hardened UNC Paths → \\*\SYSVOL и \\*\NETLOGON с флагами RequireMutualAuthentication=1, RequireIntegrity=1.
NetBIOS over TCP/IP отключаю на уровне сетевого адаптера через GPO Preferences или скрипт PowerShell в стартап-сценарии.
Шаг 7. SMB Signing и отключение SMBv1
SMB Signing защищает от атаки NTLM Relay (она же SMB Relay), при которой злоумышленник перехватывает аутентификацию и пробрасывает её на другой сервер от имени жертвы. Включаю обязательную подпись и для клиента, и для сервера:
# На всех серверах и рабочих станциях через GPO либо PowerShell:
Set-SmbServerConfiguration -RequireSecuritySignature $true -EnableSecuritySignature $true -Force
Set-SmbClientConfiguration -RequireSecuritySignature $true -EnableSecuritySignature $true -Force
# Удаляем SMBv1 окончательно
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Если в офисе остался старый сетевой сканер или NAS, который умеет только SMBv1 — это повод его заменить. Уязвимость EternalBlue, через которую распространялся WannaCry в 2017 году, до сих пор актуальна для незакрытых SMBv1.
Шаг 8. Аудит и журналирование
Без логов вы не узнаете, что вас взломали, до того момента, пока не получите записку от шифровальщика. Минимум, который я включаю через GPO «AD Audit Policy» по пути Computer Configuration → Policies → Windows Settings → Security Settings → Advanced Audit Policy Configuration:
- Account Logon → Audit Credential Validation: Success and Failure;
- Account Logon → Audit Kerberos Authentication Service: Success and Failure;
- Account Logon → Audit Kerberos Service Ticket Operations: Success and Failure;
- Account Management → все подкатегории: Success and Failure;
- DS Access → Audit Directory Service Changes: Success;
- Logon/Logoff → Audit Logon: Success and Failure;
- Logon/Logoff → Audit Special Logon: Success;
- Object Access → Audit File Share: Success and Failure;
- Privilege Use → Audit Sensitive Privilege Use: Success and Failure;
- System → Audit Security State Change: Success.
Размер журнала Security расширяю до 1 ГБ (Computer Configuration → Administrative Templates → Windows Components → Event Log Service → Security → Maximum Log Size) и настраиваю overwrite as needed.
Ключевые Event ID, на которые я настраиваю алерты в Wazuh (бесплатный SIEM, который у нас стоит у большинства клиентов):
- 4625 — failed logon. Более 20 за минуту с одного источника = brute force;
- 4740 — учётная запись заблокирована;
- 4768/4769 — TGT/Service Ticket. Запросы с шифрованием RC4 от современных клиентов = Kerberoasting;
- 4624 type 3 + type 10 — сетевой и интерактивный логон. Логон Domain Admin на рабочую станцию = аномалия;
- 1102 — очистка журнала безопасности. Всегда инцидент;
- 4688 — создание процесса. Включаю отдельно через Audit Process Creation + добавляю Include command line in process creation events;
- 4104 — выполнение PowerShell ScriptBlock. Видим, какие команды реально выполняются.
Шаг 9. Изоляция контроллеров домена
DC должны жить в собственном VLAN. На периметре — Mikrotik или pfSense, который пропускает на DC только нужные порты с рабочих станций: 53 (DNS), 88 (Kerberos), 389/636 (LDAP/LDAPS), 445 (SMB для GPO), 135 + динамический RPC, 3268 (Global Catalog). Доступ к RDP контроллера домена — только из jump-сервера, и только моей инженерной группе.
На самих DC выкручиваю Windows Firewall с правилом «всё запрещено, кроме явно разрешённого». Никаких сторонних ролей: DC — это только AD DS, DNS и при необходимости DHCP. Никакого 1С, файлового сервера, антивирусной консоли на одном хосте с контроллером.
Tier-модель в духе Microsoft я в малом офисе упрощаю до двух уровней: Tier 0 — DC и инфраструктура AD, Tier 1 — серверы приложений и рабочие станции. Учётка с правами Domain Admin никогда не логинится на рабочую станцию пользователя. Для администрирования рабочих станций используется отдельная учётка с правами локального админа через LAPS, либо Just-In-Time через PAM-решение (для офиса 50 ПК достаточно простого регламента).
Шаг 10. Резервное копирование, которое реально восстанавливается
Бэкап AD без проверки восстановления — это не бэкап, а самообман. Я делаю System State Backup всех DC ежесуточно через Windows Server Backup или Veeam Backup & Replication:
wbadmin start systemstatebackup -backupTarget:\\backup-srv\ad-backup -quiet
Бэкап-сервер ОБЯЗАТЕЛЬНО не в домене. Это отдельная Windows-машина или Linux-NAS с собственными учётными записями. Если шифровальщик пройдёт по всему домену — бэкап-сервер останется чистым. Доступ к удалению старых копий — только у локальной учётки бэкап-сервера, которой нет в AD.
Раз в квартал я тестирую восстановление: разворачиваю DC в изолированной сети из бэкапа, проверяю репликацию, целостность NTDS.dit, поднимаю тестовый клиент. Если за 4 часа домен не встаёт — план ИБ требует пересмотра.
Дополнительно настраиваю AD Recycle Bin (включается один раз и навсегда):
Enable-ADOptionalFeature -Identity "Recycle Bin Feature" `
-Scope ForestOrConfigurationSet -Target "corp.client.ru"
Это позволяет восстановить случайно удалённый OU за минуту через ADAC, без поднятия бэкапа.
Шаг 11. EDR и контроль запуска приложений
Антивирус по сигнатурам в 2026 году ловит около 30% угроз. Современный шифровальщик упакован, обфусцирован и распознаётся только по поведению. EDR — обязательная вторая линия защиты. У клиентов ITfresh мы используем Kaspersky EDR Optimum или MaxPatrol EDR в зависимости от бюджета и требований по импортозамещению.
Дополнительно к EDR на рабочих станциях бухгалтерии и руководства я настраиваю AppLocker через GPO Computer Configuration → Windows Settings → Security Settings → Application Control Policies → AppLocker. Базовые правила:
- Executable Rules: Allow всё из C:\Program Files и C:\Windows + Deny запуск из %TEMP%, %APPDATA%, %LOCALAPPDATA% (именно туда сохраняются вложения из почты и архивы);
- Script Rules: Deny выполнение .ps1, .vbs, .bat для группы пользователей (админы — исключение);
- Packaged App Rules: Allow подписанные Microsoft.
Не забываем включить службу Application Identity (AppIDSvc) автозапуском через GPO, иначе AppLocker не работает.
Шаг 12. Регулярная проверка и обучение
Hardening — это не разовый проект, а процесс. Я ставлю клиенту в расписание ежеквартальные работы:
- Прогон PingCastle (бесплатный аудитор AD) и закрытие новых находок;
- Прогон BloodHound в безопасном режиме для визуализации путей атак;
- Сверка Domain Admins, Enterprise Admins, Schema Admins со списком разрешённых;
- Тест восстановления одного DC из бэкапа в изолированной среде;
- Проверка, что LAPS-пароли действительно ротируются (Get-LapsADPassword по случайным 5 хостам);
- Обновление Windows Server до последнего CU + перезагрузка DC по очереди;
- Обзор Windows Event Forwarding и проверка, что критичные события долетают до Wazuh.
Раз в полгода — фишинговая симуляция для сотрудников через GoPhish. После первой такой рассылки в одной фирме на 40 человек на ссылку кликнули 23 пользователя. Через три месяца повторного обучения и второй рассылки — кликнули шесть. Это не про «наказание», а про осознание.
Сколько это стоит и зачем платить аутсорсеру
Все 12 шагов внедряются штатными средствами Windows Server 2019/2022/2025 без покупки нового софта. Если у вас уже есть инфраструктура и грамотный системный администратор в штате — он справится сам, статья даёт ему план. Если штатного админа нет или он перегружен текущими задачами — это типовой проект для аутсорсера.
В ITfresh такой hardening входит в пакет Comfort и Premium IT-аутсорсинга для юрлиц до 50 рабочих мест в Москве. По нашему опыту, развёртывание занимает 25-40 часов работы инженера в течение двух-трёх недель, без остановки бизнеса. После этого — ежеквартальные ревизии и реакция на инциденты в режиме 24/7.
Я не верю в «универсальную защиту от всего». Я верю в дисциплину: внедрить базу, мониторить, восстанавливаться из бэкапа за час, не давать обычным пользователям прав админа. Этих 12 шагов достаточно, чтобы ваш офис на 30-50 человек перестал быть лёгкой мишенью.
FAQ
Имеет ли смысл внедрять LAPS в офисе на 20 компьютеров?
Да. В малом офисе локальный администратор с одинаковым паролем — самая частая причина массовой компрометации после фишинга. Windows LAPS встроен в Windows 11 22H2 и Windows Server 2019/2022/2025, разворачивается за полдня одной GPO и хранит пароли в самой Active Directory. Для 20 ПК это бесплатное решение без какого-либо стороннего софта.
Как часто нужно менять пароль учётной записи krbtgt?
Microsoft рекомендует раз в 180 дней — два сброса с интервалом не менее 10 часов (чтобы прокатилась репликация и истекли активные TGT). Мы в ITfresh ставим календарное напоминание на январь и июль и используем штатный скрипт New-KrbtgtKeys.ps1. При подозрении на компрометацию — немедленно, дважды подряд.
Можно ли полностью отключить NTLM в офисе на 30 человек?
Полностью — почти никогда. Останется legacy-софт, сетевые принтеры, NAS и сканеры с поддержкой только NTLMv2. Реалистичный план: отключить NTLMv1, включить аудит NTLM (Network Security: Restrict NTLM: Audit NTLM authentication), две недели смотреть логи и составить белый список серверов-исключений. После этого ставим Deny all и оставляем явные exceptions.
Сколько времени и денег займёт hardening AD для офиса 50 ПК?
Полный план из этой статьи мы у клиентов разворачиваем за 2-3 недели работ инженера в режиме part-time без покупки дополнительного софта (всё штатное Windows Server 2022). Стоимость в нашем тарифе IT-аутсорсинга — это 30-50 часов работ. EDR и SIEM — отдельно, опционально, начиная с 1500 рублей за хост в месяц.
Что важнее: купить EDR или сначала закрыть базовые дыры в GPO?
Сначала базу. EDR на дырявом домене — это сигнализация в доме без замков. Внедрите LAPS, отключите LLMNR и NTLMv1, включите SMB Signing, настройте парольную политику и аудит. Это бесплатно и закрывает 80% типовых атак. EDR имеет смысл, когда базовый hardening уже сделан и нужно ловить продвинутые угрозы.
Нужен hardening Active Directory в вашем офисе?
Семёнов Е.С. и команда ITfresh берут на полное IT-обслуживание юрлица до 50 рабочих мест в Москве. Аудит AD проведём бесплатно за первую неделю обслуживания.
- Telegram: @ITfresh_Boss
- Телефон: +7 903 729-62-41