Короткий ответ
Компрометация администратора — не «ещё один логон». Отзовите живые сессии (RDP, WinRM, SSH, VPN, консоли), сбросьте Kerberos-билеты на hop-ах, смените пароль и SSH-ключи, проверьте группы (Domain Admins, sudo, локальные Administrators). Если украдена учётка из Domain Admins / эквивалент и есть признаки подделки билетов — планируйте ротацию krbtgt по документированной процедуре Microsoft (два сброса с репликацией), не «пароль DA в чат и забыли».
Порядок: стоп сессий → Disable или сброс секрета → аудит групп и новых учёток → полный список секретов. Вход как факт — подозрительный вход. Lateral — отдельная тема.
Симптомы и как отличить
- 4624 Type 10/3 + 4672 на DC/jump с
10.0.10.55. - 4728/4732:
ivan.petrovдобавлен в привилегированную группу, или он сам кого-то добавил. - На
host.example:sudo/ новый ключ в/root/.ssh/authorized_keys. - GPO/скрипты менялись вне окна change.
| Сигнал | Не компрометация админа | Куда |
|---|---|---|
| Daily-учётка Ивана без 4672 | рядовой вход | вход |
| Плановый WinRM из Ansible | inventory + заявка | сверка источника |
| Helpdesk сбросил пароль по звонку | социнженерия — тоже инцидент | процедура идентификации |
| Локальный админ ПК, не DA | всё равно IR, другой радиус | изоляция ПК |
Возможные причины
- Daily-drive совпадал с privileged (почта и браузер под DA).
- Фишинг / кража пароля jump без MFA.
- Кража TGT/хеша с заражённого
WS-042. - Утечка ключа SSH
id_rsaбез пароля. - Break-glass использовали в ежедневной работе.
- Редко: компрометация самого DC — тогда это уже восстановление леса, не один Disable.
Диагностика
С чистого бастиона.
1. Кто и откуда
$u = 'ivan.petrov'
Get-ADUser $u -Properties MemberOf, Enabled, PasswordLastSet, LastLogonDate, SID
Get-ADPrincipalGroupMembership $u | Select-Object Name
Get-WinEvent -ComputerName 'DC01' -FilterHashtable @{ LogName='Security'; Id=4672,4624,4728,4732,4720; StartTime=(Get-Date).AddDays(-7) } |
Where-Object { $_.Message -match $u }2. Сессии
query user /server:DC01
Get-Process -ComputerName 'DC01' -ErrorAction SilentlyContinue | Where-Object { $_.ProcessName -match 'wsmprovhost|winlogon' }WinRM/SSH с 10.0.10.55: журналы WinRM, journalctl -u ssh. Не сканируйте лес «как атакующий» — читайте логи.
3. Ключи Linux
sudo grep -R . /home/ivan.petrov/.ssh/authorized_keys /root/.ssh/authorized_keys
sudo last -F root ivan.petrov
sudo grep ivan.petrov /var/log/auth.log | tail4. Признаки Golden Ticket уровня «надо krbtgt»
Не эвристика с форума. Практические триггеры, которые обсуждают с владельцем AD: долгоживущие TGT привилегированных учёток после смены пароля, невозможность объяснить 4624 DA с хостов вне jump, компрометация DC. Решение о двойном сбросе krbtgt — отдельное, с backup NTDS и окном. Не делайте его «на всякий» для локального админа одного ПК.
Решение
Сценарий A. Локальный / sudo на одном host.example
- Завершить сессии
loginctl terminate-user, TTY. passwd/ новые ключи, старыеauthorized_keysвычистить.- Проверить
sudoers, новые UID, cron root. - Хост не считать чистым, пока не пройден процесс.
Сценарий B. Domain Admin / эквивалент
- Disable
ivan.petrovи его-adm, если разделены. - Сбросить пароль из другой учётки.
- Снять с групп, которые не положены.
- Ревизия недавно созданных пользователей и SPN.
- Ротация секретов сервисов, которые этот админ мог знать (см. статью про учётные данные).
krbtgt— только по решению AD-владельца и runbook Microsoft, два раза с ожиданием репликации; не третьим пунктом «на автомате».
Disable-ADAccount -Identity 'ivan.petrov'
Set-ADAccountPassword -Identity 'ivan.petrov' -Reset -PassThru
# пароль передайте по регламенту, не в теле тикета открытым текстом навсегдаСценарий C. Облачный админ параллельно
Revoke сессий Entra, PIM, break-glass проверить не его ли это был. Почта админа — ящик.
Запишите в тикет, с какого прыжка вы меняли секрет: не с WS-042.
Как проверить, что проблема устранена
- Учётка Disabled или включена с новым секретом,
PasswordLastSetсвежий. - Нет 4672 с чужих IP после отсечки.
- Группы соответствуют матрице доступа.
authorized_keysбез неизвестных строк.- Список hop-ов, где могли кешировать билет, прогнан (logoff/reboot hop по регламенту).
- Если делали
krbtgt— репликация OK, тест логона рядовых пользователей, документация окна.
Если не помогло
- Снова 4728 от той же учётки — секрет не сменили везде (hybrid, второй лес, Azure AD Connect).
- Вход идёт NTLM с старым хешем — пароль сменили, но не везде реплицировали DC; проверьте
repadmin /replsummary, не «ещё раз Disable». - Root на Linux с консоли гипервизора без SSH-лога — физический/OOB доступ, меняйте пароли BMC отдельно.
- Подозрение на DC implant — не «ещё раз сменить пароль», а IR + backup NTDS, вне этой статьи.
Профилактика
- Tiering: DA не на
WS-042, только jump. - MFA, PAM/PIM, короткие TTL.
- Отдельные SSH-ключи на бастион, passphrase, не копировать ключ DA на почту.
- Алерт 4728/4732 на Domain Admins, 4672 с не-jump.
- Регулярная смена break-glass по конверту.
FAQ
Сразу ли reset krbtgt при любом взломанном админе?
Нет. Сначала сессии и пароль этой учётки. krbtgt — когда есть основания считать, что могли выписать произвольные TGT. Это disruptive.
Нужно ли перезагружать все серверы?
Не как первый шаг. Logoff сессий и смена секрета важнее. Reboot hop-ов — по списку, где точно сидели билеты.
Можно ли оставить админа Enabled «чтобы чинил»?
Нет. Выдайте временную новую privileged-учётку после проверки личности, старую считайте грязной.
SSH-ключ украли, пароль нет
Ключ = секрет. Удалите строку из authorized_keys, выпустите новый ключ, проверьте agent forwarding на заражённом ПК.
Локальный Administrator RID-500 на каждой станции
Если его пароль был единый LAPS-нарушение — ротируйте LAPS/пароли локальных админов, это уже массовая ветка учёток.