Короткий ответ
Подозрение на перемещение атакующего по сети: ищите необычные аутентификации, не «как взламывают». На Windows: 4624 Logon Type 3, 4648, 5140 на admin$/C$/IPC$, WinRM (5985/5986) не с jump. На Linux: SSH/sudo с 10.0.10.55 / WS-042 на host.example. Не запускайте свой массовый сетевой «тест тех же шаров» как имитацию атаки. Изолируйте источник, затем ротация учёток.
Связанные: вход, админ, процесс.
Симптомы и как отличить
- После фишинга на
WS-042ночью 4624 на FS01 и DC. - 5140 Object Name
\admin$. wsmprovhostна сервере, клиент не Ansible jump.lastнаhost.example: входivan.petrovс адреса ПК, с которого SSH не положен.
| Событие | Легитимно, если | Подозрительно, если |
|---|---|---|
| Type 3 на FS01 | пользователь открыл шару | admin$, время 03:00, DA |
| WinRM | jump/Ansible inventory | с WS-042 бухгалтера |
| SSH | бастион | с users VLAN на prod |
| 4648 | scheduled task свой | cmd от winword |
Возможные причины
- Украденные креды и ручной обход шаров/RDP/SSH.
- malware с модулем копирования на admin$.
- Легитимный софт (инвентаризация, AV-консоль, backup) без белого списка в голове дежурного.
- Пользователь с локальным админом ходит на соседние ПК.
- Jump забыли, админы WinRM «с любого».
- Редко: ошибка времени, SIEM склеивает чужое.
Диагностика
С коллектора/DC, не с заражённого WS-042.
1. Windows логоны Type 3 / 10 с одного источника
$src = '10.0.10.55'
Get-WinEvent -ComputerName 'DC01' -FilterHashtable @{ LogName='Security'; Id=4624,4648,4768,4769; StartTime=(Get-Date).AddDays(-3) } |
Where-Object { $_.Message -match [regex]::Escape($src) -or $_.Message -match 'ivan\.petrov' } |
Select-Object TimeCreated, Id, @{n='M';e={$_.Message.Substring(0,[Math]::Min(400,$_.Message.Length))}}На целевом сервере:
Get-WinEvent -FilterHashtable @{ LogName='Security'; Id=5140,5145; StartTime=(Get-Date).AddDays(-3) } -ErrorAction SilentlyContinue |
Where-Object { $_.Message -match 'admin\$|C\$' }
Get-WinEvent -FilterHashtable @{ LogName='Microsoft-Windows-WinRM/Operational'; StartTime=(Get-Date).AddDays(-3) } -ErrorAction SilentlyContinue |
Select-Object -First 30 TimeCreated, Id, MessageWinRM слушает ли всем:
Get-NetTCPConnection -LocalPort 5985,5986 -State Listen2. Linux SSH граф
sudo grep -E 'Accepted|Failed' /var/log/auth.log | grep -E '10.0.10.55|WS-042|ivan.petrov'
sudo last -F -n 50
ss -tnp | grep sshdНа нескольких хостах — тот же источник. Не for h in all; ssh с грязной учётки.
3. Процесс на источнике
Если WS-042 ещё включён: процесс, сеть Established на 445/5985/22 к серверам.
Решение
Сценарий A. Источник один ПК
Изолировать WS-042, считать creds украденными (пользователь и локальный админ и что в память попало). Смена паролей широким кругом, если Type 3 шли под DA — см. админ-инцидент.
Сценарий B. Источник jump/сервер
Сервер-плацдарм: изоляция, не «ещё один патч». Ревизия WinRM/SSH allow-list.
Сценарий C. Легитимный софт
Внесите в baseline (AV-консоль, inventory). Задокументируйте, чтобы следующий дежурный не повторял IR. Но проверьте, что софт не скомпрометирован (необычное время).
# сдерживание SMB admin$ с клиентского VLAN — на файрволе сегмента, не disable SMB на DCОграничение административных шар — отдельный hardening, в инциденте режьте источник.
Карта хостов и ложный «инвентарь»
Постройте граф: WS-042 → (445/5985/22) → цели за окно. Источник 10.0.10.55 может быть inner VPN, не физический ПК: тогда режьте туннель, не только розетку. Легитимный Ansible с jump должен быть в inventory; WinRM с пользовательского VLAN — нет. Не закрывайте SMB целиком на DC: сломаете логон. Режьте admin$ политикой/файрволом сегмента и источник.
После смены пароля закройте SMB-сессии явно. NTLM с закешированным хешем живёт. На Linux ForwardAgent yes с бастиона разносит ключ ivan.petrov дальше, чем SSH-лог на первом hop: проверьте authorized_keys на всех, куда он мог прыгнуть, не только host.example. Второй плацдарм часто сервер, не ПК: смотрите 4624 Type 3 с серверов на серверы.
Не подтверждайте гипотезу запуском своих admin-share «как атакующий».
Как проверить, что проблема устранена
- Нет новых 4624 Type 3 / SSH Accept с грязного IP после изоляции.
- Сессии SMB закрыты.
- Учётки, которыми ходили, ротированы.
- WinRM/SSH с users VLAN не проходит (тест со своего IR- hop по политике, не с malware).
- Карта хостов в тикете полная.
Сегментация users/servers и WinRM только с jump закрывают класс атак сильнее, чем «ещё один антивирус». Алерт: 4624 Type 3 DA с WS-042; SSH Accept с users на host.example. LAPS, не единый локальный пароль. После IR проверьте, не остался ли mapped \\dc01\admin$ в профиле ivan.petrov. Источник 10.0.10.55 занесите в IOC на коллекторе.
Если не помогло
- Новые цели появляются — второй плацдарм, не дочистили. Повторите топ источников 4624.
- NTLM с старым хешем после смены пароля — репликация DC, время, Cred Guard не было.
- Linux ключ агента forwarding с бастиона — уберите
ForwardAgent, ключи на бастионе ротируйте. - «Lateral» оказался DFS/реплика — смотрите процесс, не только 5140.
Профилактика
- Админские шары и WinRM только с jump.
- Нет локального админа у пользователя на
WS-042. - Сегментация users/servers.
- Алерт: 4624 Type 3 DA с рабочей станции; SSH с users на prod.
- LAPS, не единый локальный пароль. После IR снимите mapped admin$ из профиля, если он там остался. Jump-only для WinRM зафиксируйте в матрице портов.
FAQ
Это обязательно ransomware-предвестник?
Часто да, не всегда. Всё равно стоп и учётки. Ждать записку — поздно.
Можно ли отключить Netlogon на час?
Нет. Сломаете домен. Режьте хост-источник.
Type 3 на SYSVOL с ПК
Политики так ходят. Смотрите учётку и admin$, не любой 5140.
Нужен ли захват всего трафика SPAN
Не первый час. Хватит логов логонов. SPAN — если нет логов и цель критична.
Иван админ 1С, ему «можно» WinRM на app-сервер
Тогда белый список и jump, не WS-042 с почтой. Инцидент всё равно, если время и IP чужие.