Собесов

SOC Яндекса — расследование инцидента (логи Windows + PowerShell)

Кейсы и метрикиSecurity Operations CenterСложнаяSenior

Условие

Сотрудник johndoe обратился в СИБ, заметив, что на его ноутбуке стали открываться окна с терминалом. В архиве — логи с его ПК на момент инцидента. Логи разложены по категориям:

  • win_events_powershell_logs — события PowerShell;
  • processes_running_processes — список процессов;
  • win_events_process_audit — аудит процессов Windows;
  • network_extra_process_connections — сетевые соединения процессов.

Вопросы

  1. Как скомпрометировали устройство? Название вредоносного файла; как сотрудник его получил.
  2. Какие инструменты использовал злоумышленник? Что пытался сделать?
  3. IP-адрес C&C-сервера злоумышленника.
  4. (сложнее) Как злоумышленник обошёл Windows Defender?
  5. (сложнее) Как злоумышленник обошёл AMSI?

Решение прислать в виде отчёта: процесс анализа + ответы на вопросы.

Решение

Подход — методология

Когда у нас 4 категории логов, начинаем сверху вниз: процессы → аудит процессов → PowerShell → сеть. Цель — построить цепочку:

Входной артефакт (файл) → Запущенные процессы → Что они делали → Куда стучали → Почему не сработали защиты

1. Точка входа: processes_running_processes + win_events_process_audit

Ищем подозрительные родительско-дочерние пары:

  • outlook.exe или chrome.execmd.exe/powershell.exe/wscript.exe/mshta.exe — классический фишинг (макрос или html-аттач).
  • explorer.exe*.exe из Downloads или Temp — пользователь вручную запустил скачанный файл.
  • winword.exepowershell.exe — макрос в DOC.

Из логов имя файла будет видно, например, Invoice_2025_03.docm или Order_details.lnk. Часто LNK-файлы запускают powershell.exe через cmd.exe со скрытым окном.

Гипотеза ответа на вопрос 1: сотрудник получил файл через email (фишинг). Имя файла — указано в CommandLine родительского outlook.exe или в process_audit при создании нового процесса. Часто это .lnk, .iso, .docm, .zip → .js.

2. Инструменты атакующего: PowerShell-логи

PowerShell module logging и Script Block Logging (Event ID 4104) показывают целиком исполнившиеся скрипты. Что искать:

  • IEX (New-Object Net.WebClient).DownloadString(...) — загрузка stage-2.
  • Invoke-Mimikatz, Invoke-Kerberoast, Invoke-PowerShellTcp — известные инструменты.
  • Reflection.Assembly + [Reflection.Assembly]::Load(...) — рефлективная загрузка .NET.
  • Reverse shell-паттерн: socket = New-Object Net.Sockets.TCPClient(...) ; powershell -nop -ep bypass -....

Гипотеза ответа на вопрос 2: PowerShell Empire / Sliver / Cobalt Strike Beacon — характерные паттерны. Цель — установить C2-канал, провести разведку (whoami, net user /domain, ipconfig /all) и закрепиться.

3. C&C-сервер: network_extra_process_connections

Фильтруем по PID PowerShell или подозрительного процесса; ищем исходящие соединения на нестандартные порты или внешние IP.

# Псевдо-фильтр (если CSV)
grep -P '\bpowershell\.exe\b' connections.csv | awk -F',' '$5 ~ /^(45\.|185\.|176\.)/'

Реальные C2 часто на 443/8080/4444/8443. IP — пишем именно тот, который видим в логе, а не «угадываем».

4. Обход Windows Defender

Типичные техники:

  • Add-MpPreference -ExclusionPath: добавление папки в исключения. Фиксируется в Microsoft-Windows-Windows Defender/Operational (Event ID 5007 — изменение настроек).
  • Stop-MpComputerService / Set-MpPreference -DisableRealtimeMonitoring $true — отключение защиты в реальном времени.
  • AMSI bypass + obfuscation (вместе с пунктом 5).
  • Запуск из памяти (рефлективная загрузка) минует сигнатурный сканер на диске.

В PowerShell-логах ищем Set-MpPreference, Add-MpPreference -ExclusionPath, Stop-Service WinDefend.

5. Обход AMSI

AMSI (Anti-Malware Scan Interface) перехватывает PowerShell-скрипты до выполнения. Известные обходы:

  • Patching amsi.dll!AmsiScanBuffer в памяти процесса:
    [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
  • Obfuscation: разбивка строк через [char] + конкатенацию, base64-кодирование (-EncodedCommand).
  • WPM (Write-Process-Memory) для изменения возвращаемого AMSI значения на «Clean».
  • Загрузка ранее версии CLR / новый AppDomain.

Ищем в Script Block Logging строки с amsiInitFailed, AmsiUtils, AmsiScanBuffer, длинные base64 после -EncodedCommand, [Convert]::FromBase64String(...).

Структура отчёта

  1. Хронология событий (timeline) — таблица время, источник, событие.
  2. Цепочка атаки по MITRE ATT&CK:
    • Initial Access (фишинг — T1566)
    • Execution (PowerShell — T1059.001)
    • Defense Evasion (Disable AV — T1562.001, AMSI bypass — T1562.001/T1059.001)
    • Command and Control (T1071.001 — HTTPS)
    • Discovery / Privilege Escalation / Persistence (если есть в логах)
  3. IOC (Indicators of Compromise): имя файла, хеш, IP C2, домены, пути исключений.
  4. Рекомендации по реагированию.

Подводные камни

  1. Хронология ≠ порядок в файле. Сортируем по таймстемпам всё сразу — иначе пропустишь причинно-следственные связи.
  2. PID повторяется. Один и тот же PID может быть переиспользован после process exit. Используйте process_creation_time + pid как ключ.
  3. -EncodedCommand всегда подозрителен. Декодируйте base64 → видите истинный скрипт. Иногда base64 многослойный.
  4. Doppelganger-имена. powerShell.exe vs powershell.exe (с большой S) — на NTFS регистрозависимо в PE-имени, но пути нечувствительны. Ищите редкие написания.
  5. C2-IP может быть legitimate proxy. Bing CDN, Cloudflare — могут быть прокси для C2. Сверяйте с GeoIP и WHOIS.
  6. AMSI bypass не всегда логируется. Если AMSI отключили до загрузки модуля — последующие скрипты не попадут в Script Block log. Ищем именно первый скрипт с патчингом.
  7. Не доверяйте именам процессов. svchost.exe без -k параметра — почти точно malware. Проверяйте CommandLine.

Эталонный ответ

Структура отчёта: timeline → MITRE-цепочка → IOC → рекомендации.

Конкретные ответы зависят от логов, но типовые:

  1. Точка входа — фишинговый аттач (.lnk/.docm/.iso), запущенный пользователем; имя файла — из process_audit или OutLook-логов.
  2. Инструменты — PowerShell + framework (Empire/Sliver/CS Beacon); цель — закрепиться, разведать AD.
  3. C&C-IP — внешний адрес из network_extra_process_connections для PID PowerShell (порт обычно 443/8080).
  4. Defender — отключён через Set-MpPreference -DisableRealtimeMonitoring $true или добавление exclusion-path.
  5. AMSI — обход через AmsiUtils.amsiInitFailed = $true или базовая обфускация + -EncodedCommand.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти