От «сбрасывателя паролей» к «архитектору безопасности»
Active Directory — это не просто база данных пользователей. Это ядро вашей корпоративной сети, «единая точка истины» для аутентификации и авторизации. И для злоумышленника это главная цель. Компрометация AD — это не инцидент, это «Game Over».
Проблема большинства администраторов в том, что они рассматривают AD как нечто статичное, настроенное один раз и работающее «пока не сломается». Они проводят аудит вручную, хаотично кликая по оснастке dsa.msc («Пользователи и компьютеры Active Directory»). Этот подход не работает. Он медленный, подвержен человеческим ошибкам и абсолютно невозможен в домене с тысячами объектов.
Это — путь «админа-реакционера».
Путь «архитектора будущего» — это проактивный, повторяемый и автоматизированный аудит. Нашим главным инструментом для этого будет PowerShell. Мы не будем кликать мышкой. Мы напишем скрипты, которые за 10 секунд найдут то, на что ушли бы часы ручного поиска: «мертвые души», вечные пароли и скрытых администраторов.
Этот гайд — практическое руководство по превращению вашего AD из «проходного двора» в управляемую крепость.
Методология аудита
Мы разделим наш аудит на три критически важных направления: Гигиена Объектов, Гигиена Паролей и Анализ Привилегий.
Подготовка: Загрузка модуля
Для всех операций нам понадобится модуль PowerShell для Active Directory. Он установлен по умолчанию на контроллерах домена. На рабочей станции администратора его можно установить как часть RSAT (Remote Server Administration Tools).
Перед началом работы убедитесь, что модуль загружен (хотя современные версии PowerShell делают это автоматически при вызове командлета):
PowerShell
# Импортируем модуль Active Directory
# Если вы запускаете скрипт не на КД, убедитесь, что RSAT установлен
Import-Module ActiveDirectory
Шаг 1. Гигиена Объектов: Поиск «мертвых душ»
«Мертвые души» — это неактивные (stale) учетные записи пользователей и компьютеров. Это спящие агенты. Уволенный сотрудник, чей аккаунт не отключили, или старый сервер, пылящийся в углу, — идеальная точка входа для атаки.
Поиск неактивных пользователей
Нам нужны пользователи, которые не входили в систему, скажем, 90 дней. Для этого существует мощный командлет Search-ADAccount.
PowerShell
# Устанавливаем порог неактивности (например, 90 дней)
$timespan = New-TimeSpan -Days 90
# Ищем УЧЕТНЫЕ ЗАПИСИ ПОЛЬЗОВАТЕЛЕЙ, которые были неактивны
# -AccountInactive: главный флаг для поиска
# -TimeSpan: использует нашу переменную $timespan
# -UsersOnly: ищем только пользователей
# -SearchBase: (Опционально) Укажите конкретный OU, если не хотите искать по всему домену
# 'OU=Users,OU=MyCompany,DC=domain,DC=local'
Search-ADAccount -AccountInactive -TimeSpan $timespan -UsersOnly |
Select-Object Name, SAMAccountName, LastLogonDate
Анализ результата: Этот список — ваш первый «список на выбывание». Каждую учетную запись нужно проверить: это уволенный сотрудник? Тестовый аккаунт? Если да — немедленно отключить (Disable), а не удалять.
Поиск неактивных компьютеров
Та же логика, но для компьютеров. Компьютер, который не аутентифицировался 90 дней, либо выведен из эксплуатации, либо «потерян». Его доверительные отношения с доменом могут быть использованы для атак.
PowerShell
# Устанавливаем порог неактивности
$timespan = New-TimeSpan -Days 90
# Ищем УЧЕТНЫЕ ЗАПИСИ КОМПЬЮТЕРОВ
# -ComputersOnly: теперь ищем только компьютеры
Search-ADAccount -AccountInactive -TimeSpan $timespan -ComputersOnly |
Select-Object Name, LastLogonDate, DistinguishedName
Анализ результата: Компьютеры из этого списка должны быть отключены в AD и, в идеале, удалены из домена.
Гигиена Паролей: Поиск «слабых звеньев»
Пароль — это первая линия обороны. Этими командами мы найдем самые вопиющие дыры в этой обороне.
Поиск пользователей с «вечным» паролем
Флаг PasswordNeverExpires — это бомба замедленного действия. Он часто ставится для «удобства» сервисным учетным записям, а потом про него забывают.
PowerShell
# Ищем всех ВКЛЮЧЕННЫХ пользователей
# У которых установлен флаг PasswordNeverExpires
# -Properties: По умолчанию Get-ADUser не загружает все атрибуты,
# мы должны явно запросить 'PasswordNeverExpires'
Get-ADUser -Filter 'Enabled -eq $true -and PasswordNeverExpires -eq $true' `
-Properties Name, PasswordNeverExpires |
Select-Object Name, DistinguishedName
Анализ результата: В этом списке не должно быть обычных пользователей. Для сервисных учеток — это допустимо, но только при условии, что для них используются сложные, генерируемые пароли (25+ символов) и они находятся под строгим контролем (в идеале, через gMSA).
Поиск пользователей, не требующих пароль (КРИТИЧНО)
Это самая грубая ошибка конфигурации. Флаг PasswordNotRequired.
PowerShell
# Ищем всех ВКЛЮЧЕННЫХ пользователей
# у которых установлен флаг PasswordNotRequired
Get-ADUser -Filter 'Enabled -eq $true -and PasswordNotRequired -eq $true' `
-Properties Name, PasswordNotRequired |
Select-Object Name, DistinguishedName
Анализ результата: Этот список должен быть пустым. Всегда. Если вы здесь кого-то нашли — это инцидент безопасности, требующий немедленного исправления.
Анализ Привилегий: Кто на самом деле «Админ»?
Это самый важный шаг. Большинство «админов» проверяют только прямое членство в группе «Администраторы домена». «Архитектор» знает про вложенные группы (nested groups).
Пользователь user@test.local может состоять в группе Helpdesk_L3, которая входит в Server_Admins, которая, в свою очередь, входит в Domain Admins. Руками вы этого не найдете.
H3: Полный рекурсивный аудит привилегированных групп
Мы используем флаг -Recursive командлета Get-ADGroupMember. Он раскроет всю цепочку вложенности.
PowerShell
# Список самых "опасных" групп. Добавьте свои, если нужно.
$PrivilegedGroups = @(
"Domain Admins",
"Enterprise Admins",
"Schema Admins",
"Administrators" # Встроенная группа локальных админов домена
)
Write-Host "--- НАЧАЛО АУДИТА ПРИВИЛЕГИЙ ---" -ForegroundColor Yellow
foreach ($Group in $PrivilegedGroups) {
Write-Host "`n[+] Проверка группы: $Group" -ForegroundColor Cyan
# -Recursive: Этот флаг делает всю магию.
# Он проходит по всем вложенным группам.
$members = Get-ADGroupMember -Identity $Group -Recursive
if ($members) {
$members | Select-Object Name, SAMAccountName, objectClass
} else {
Write-Host " (Группа пуста или не найдена)" -ForegroundColor Gray
}
}
Write-Host "`n--- АУДИТ ПРИВИЛЕГИЙ ЗАВЕРШЕН ---" -ForegroundColor Yellow
Анализ результата: Внимательно изучите этот список. Вы можете быть очень удивлены, кто на самом деле имеет права администратора домена. Ваша цель — Принцип Наименьших Привилегий (Principle of Least Privilege). Этот список должен быть минимально возможным. Каждый, кто в нем находится, — это потенциальный вектор атаки.
От аудита к автоматизации
То, что мы только что сделали, — это не просто набор команд. Мы создали методологию. Мы перешли от пассивного наблюдения к активному аудиту.
Но настоящий «архитектор» на этом не остановится.
Следующий шаг? Превратите эти скрипты в один Audit-AD.ps1. Настройте его запуск через Планировщик Задач Windows (Task Scheduler) раз в неделю. Настройте отправку отчета вам на почту (с помощью Send-MailMessage) или в Telegram-бот.
Вы только что создали автоматизированную систему раннего обнаружения угроз в Active Directory. Вы перестали быть «пожарным», который реагирует на инциденты. Вы стали «архитектором», который их предотвращает.
Теги: #powershell #activedirectory #security #automation #sysadmin #windows #аудит #infosec
🚀 Хотите стать архитектором будущего, а не просто админом? Эта статья — лишь верхушка айсберга. В нашем Telegram-канале «Admin Future» мы каждый день публикуем системные гайды, готовые скрипты, AI-лайфхаки и чеклисты, которые не найти в Google. Мы не просто постим команды — мы строим библиотеку знаний для тех, кто хочет расти от админа до архитектора. Подписывайтесь и становитесь экспертом: Admin Future