Короткий ответ
Неизвестный процесс на host.example или WS-042: зафиксируйте PID, родителя, командную строку, путь, SHA-256, владельца, сеть. Не kill -9 / Stop-Process -Force до этого — потеряете дерево и сокеты. Не копируйте бинарь на прод-шару. Изоляция узла — если есть сеть наружу/шифр/привилегии, параллельно сбору.
Дальше: слушатель, трафик, троян, артефакты.
Симптомы и как отличить
- Мониторинг: новый процесс
svcupdate.exeизC:\Users\ivan.petrov\AppData\Local\Temp. - Linux:
/tmp/.xилиkthreaddс пользовательским UID (подделка имени). - 4688: родитель
winword.exe→powershell.exe. - Служба 7045, которой нет в эталоне.
| Процесс | Скорее легитимный | Проверка |
|---|---|---|
MsMpEng.exe | Defender | путь C:\Program Files\Windows Defender |
sshd | пакет | dpkg -S $(readlink /proc/PID/exe) |
| Ваш агент мониторинга | inventory | подпись/пакет |
python в /opt/app | приложение | unit-файл, владелец сервиса |
Возможные причины
- Malware после фишинга/трояна.
- Админский скрипт без заявки.
- Обновление ПО, которое мониторинг ещё не знает.
- Криптомайнер (CPU + сеть).
- Остаток отладки (
nc,tcpdumpзабыли). - Редко: руткит, прячущий exe — тогда расхождение
psvsss, нужна память.
Диагностика
Сохраняйте вывод в IR-каталог.
1. Windows
Get-CimInstance Win32_Process | Where-Object { $_.ProcessId -eq 4242 } |
Select-Object ProcessId, ParentProcessId, Name, ExecutablePath, CommandLine, CreationDate, CSName
Get-Process -Id 4242 | Select-Object Id, Path, Company, StartTime, CPU
Get-FileHash -Algorithm SHA256 -Path (Get-Process -Id 4242).Path
Get-AuthenticodeSignature -FilePath (Get-Process -Id 4242).Path
Get-NetTCPConnection -OwningProcess 4242 -ErrorAction SilentlyContinue
Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq 4242 }4688 (если аудит процесса включён):
Get-WinEvent -FilterHashtable @{ LogName='Security'; Id=4688; StartTime=(Get-Date).AddHours(-24) } |
Where-Object { $_.Message -match '4242|Temp\\svcupdate' }Поднимите дерево вверх по ParentProcessId до services.exe/explorer.exe/winword.exe.
2. Linux host.example
ps -fp 4242
pstree -sp 4242
sudo ls -l /proc/4242/exe
sudo sha256sum /proc/4242/exe
tr '\0' ' ' < /proc/4242/cmdline; echo
tr '\0' ' ' < /proc/4242/environ | head -c 500; echo
sudo ss -tpn | grep 4242
sudo lsof -p 4242 | head
dpkg -S "$(sudo readlink /proc/4242/exe)" 2>/dev/null || rpm -qf "$(sudo readlink /proc/4242/exe)" 2>/dev/nulldpkg -S пустой на файл в /tmp — не пакет.
3. Сетевой след
Куда ходит: внутренний DC vs внешний IP. Внешний неизвестный + неизвестный бинарь = изоляция. Свой backup-порт — трафик.
Решение
Сценарий A. Явный чужой бинарь, сеть есть
- Изолировать узел (сеть), процесс пока можно оставить для дампа памяти, если IR так решит.
- Скопировать файл на IR-носитель (не шару пользователей).
- После копии — остановка процесса штатно (
Stop-Process,systemctl stop, затем kill если не умер). - Persistence: задачи, cron, службы.
- Переустановка/эталон для рабочей станции; для сервера — решение владельца.
Сценарий B. Похоже на своё ПО
Владелец сервиса подтверждает hash и путь. Внести в baseline мониторинга. Процесс не убивать.
Сценарий C. Уже умер, PID нет
Остаются Prefetch/Amcache, 4688, journalctl, файлы в Temp по mtime. Не объявляйте «само прошло».
Подпись, пакет и расхождение имени
После hash сверьте Get-AuthenticodeSignature / dpkg -S. Пустой Publisher и путь в C:\Users\ivan.petrov\AppData\Local\Temp на WS-042 — не «инсталлятор 1С». На host.example бинарь в /dev/shm или /var/tmp с сетевыми сокетами на 10.0.10.55 как dest — изоляция, не nice. Сохраните /proc/PID/maps (короткий head) если подозреваете injected thread: это улика, не инструкция injection.
Командная строка длиннее 2–3 КБ с -enc в PowerShell — фиксируйте, не запускайте decode на проде. Родитель services.exe vs winword.exe меняет класс инцидента. Если процесс уже (deleted), скопируйте /proc/PID/exe на IR-диск немедленно: после kill файла не будет.
Не убивайте сразу MsMpEng / rsyslog / ваш агент мониторинга «потому что CPU»: сначала путь. Ложный IR по собственному агенту хуже, чем лишние 10 минут, но неизвестный путь важнее чувства.
Как проверить, что проблема устранена
- PID нет, бинарь в карантине/удалён после копии hash.
- Автозапуск чист.
- Нет повторного старта того же SHA-256.
- Сеть узла соответствует решению (изолирован или возвращён).
- Тикет содержит дерево PPID и hash.
Зафиксируйте integrity level / UID: процесс пользователя ivan.petrov vs SYSTEM/root меняет радиус ротации секретов. Сетевой dest 10.0.10.55 занесите в IOC, не пингуйте его с прод- hop «проверить, жив ли C2».
Если не помогло
- Процесс перезапускается — systemd/задача/WMI, не один PID.
/proc/PID/exe=(deleted)— копируйте из/proc/PID/exeсразу, потом kill.- Имя как у ядра, UID не 0 vs 0 — смотрите exe path.
- На всех серверах один hash — массовый деплой malware или забытый пакет; не лечите один узел.
Профилактика
- Application control / подписанные бинари где зрелость есть.
- Аудит 4688 хотя бы на серверах.
- Запрет интерактива DA на серверах приложений.
- Мониторинг процессов не из пакета (
dpkg -V, инвентарь). - Temp не исполняемый (
noexec) на Linux, где приложение позволяет. Хеш неизвестного PID всегда в тикет до kill. Не копируйте бинарь на пользовательскую шару «для коллег».
FAQ
Можно ли сразу удалить файл?
После hash и копии — да, если это не единственный образец и процесс остановлен. До hash — нет.
Task Manager «End task» на WS-042 пользователем
Для пользовательского adware иногда ок. Для сервера — нет, пока нет снимка.
Hash совпал с внутренним установщиком
Сверьте путь. Установщик в Temp после деплоя бывает. Командная строка и родитель решают.
Нужен ли полный RAM dump
Сервер / подозрение на ручной доступ / процесс прячется — да. Случайный onedrive.exe на ПК — обычно нет.
Процесс слушает 0.0.0.0
Это уже порт, не только PID.