ESCalator
6.56K subscribers
477 photos
1 video
18 files
190 links
Tips and tricks от команды экспертного центра безопасности Positive Technologies (PT ESC)
Download Telegram
Деобфусцируем имена функций .NET вручную 🙌

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

Предположим, что у нас уже есть дамп необходимого процесса и некоторое знание о том, где в памяти лежала нужная нам нагрузка, а также бинарь, который мы смогли оттуда достать (о том, как это делать автоматизировано расскажем как-нибудь в другой раз).

Откроем бинарь в dnSpy и увидим следующую картину (скриншот 1).

Вспомним, что существует de4dot и попробуем скормить ему бинарь. Взяв то, что похоже на наиболее актуальную версию среди кучи форков (или форков форков (или форков форков форков)), выполним команду:

>  de4dotex .\sample.bin -vv


Результат на скриншоте 2.

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

🐍Попробуем сделать это на питоне, используя связку dnfile и dncil, набросав код для сбора обфусцированных имен функций и полей (скриншот 3).

Теперь необходимо написать логику по патчингу имен непосредственно в бинаре. Однако, есть момент, связанный с тем, что...такой функциональности у dncil нет.

Перепишем то же самое на C#, позаимствовав dnlib.dll у de4dot, дабы не страдать с самостоятельной ее сборкой. А чтобы не путаться среди кучи меню Visual Studio, просто приведем .csproj к следующему виду (требуется .Net 4.8 и его SDK):

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>10.0</LangVersion>
<Nullable>enable</Nullable>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<Reference Include="dnlib">
<HintPath>dnlib.dll</HintPath>
</Reference>
</ItemGroup>
</Project>


Заведем класс Utils, с двумя функциями — проверкой валидности имени и формированием нового имени (скриншот 4). Наконец, опишем основную логику по переименованию типов, методов, свойств, полей и событий классов (скриншот 5). Результат прогона программы представлен на скриншоте 6.

Видно, методы и поля были переименованы и все отработало успешно. При этом важно понимать, что не всегда можно вот так «в лоб» деобфусцировать имена с сохранением функциональности программы. Например, если образ будет в рантайме искать какую-то функцию по ее строковому имени — после подобных манипуляций он ее не найдет.

Для статического же анализа такой подход вполне удобен — вместо тонны одинакового мусора, не вмещающегося в экран, можно получить короткие имена интересующих полей. Если повторно пройтись глазами по полученному бинарю, то можно найти еще какое-то количество обфусцированных полей: имена переменных в методах, некоторые структуры и т.д. При желании их можно исправить аналогичным образом.

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

В альтернативном случае можно сразу обращаться к dnlib или инструментам на его основе.

Happy reversing!

#TI #reverse #malware #tip
@ptescalator
🔥27👍109
Новое подключение к старым техникам 📡

В ходе расследования инцидентов команда PT ESC IR обнаружила реверс-шелл, разработанный на .NET и наблюдаемый с 2023 года. Злоумышленниками он использовался для управления скомпрометированными хостами. ВПО создает процесс cmd.exe и перенаправляет поток ввода/вывода на управляющий сервер, который, как правило, являлся одним из хостов во внутренней инфраструктуре. Для безопасного сетевого соединения использовалась техника защищенного TCP-клиента с SSL/TLS.

Особенность инструмента в том, что он реализован средствами компонента System.Windows.Data из состава Windows Presentation Framework. Сама техника не новая — примитивы выполнения кода с использованием System.Windows.Data активно применяются при эксплуатации уязвимостей. Рассмотрим его реализацию подробнее.

В функции Main (скриншот 1) демонстрируется техника прямого выполнения через ObjectDataProvider из пространства имен System.Windows.Data. Несмотря на отсутствие явного вызова метода, при последовательной настройке свойств ObjectInstance, MethodParameters и, в завершение, MethodName объект автоматически инициирует выполнение указанного метода (Connect.Start) — прямо во время его инициализации в методе Main. Использование обертки ExpandedWrapper<Connect, ObjectDataProvider> указывает на заимствование паттерна из известных gadget-цепочек для десериализации, хотя в данном случае эксплуатация происходит напрямую, без этапа сериализации.

Метод Connect.Start (скриншот 2) запускает системную командную оболочку (cmd.exe) в качестве дочернего процесса, асинхронно перехватывает ее вывод через обработчик P_OutputDataReceived и перенаправляет данные обратно на C2-сервер, одновременно используя кастомный делегат (Delegate.Combine) для динамической связи с компонентом Px, отвечающим за сетевую передачу команд и результатов. Такая архитектура позволяет злоумышленнику выполнять произвольные команды в контексте cmd.exe на зараженной машине, сохраняя взаимодействие основанным на легитимных API .NET.

В методе Net.Run (скриншот 3) реализована сетевая C2-логика, устанавливающая зашифрованное соединение с удаленным сервером через TcpClient и SslStream с принудительным использованием TLS 1.2; IP-адрес и порт берутся из зашифрованных конфигурационных данных (скриншот 4) и расшифровываются «на лету» с помощью AES256 в режиме CBC/NoPadding, причем для генерации ключа используется PBKDF2 (RFC 2898), на вход которого передается строковое значение пароля и соли (скриншот 5).

Для расшифровки данных конфигурации можно воспользоваться следующими рецептами CyberChef:

1. Генерация ключа, в который необходимо передать App.PasswordHash и App.SaltKey;

2. Алгоритм расшифровки.

🗂 Вредоносные файлы были расположены в легитимных каталогах:

C:\Program Files\Internet Explorer\mshealthupdate.exe

C:\Program Files\Common Files\System\msadds.exe

C:\Program Files\Common Files\System\ado\msader.exe

Для закрепления в инфраструктуре и запуска исполняемых файлов злоумышленники использовали планировщик задач Windows.

Данный инструмент схож с реализацией общеизвестной утилиты ncat. Для вызова вредоносного метода используется легитимный класс ObjectDataProvider из системной библиотеки WPF, применяются делегаты для динамического подключения обработчиков, не оставляя четкой цепочки вызовов в IL-коде. Для шифрования вывода консоли используется TLS 1.2 и игнорируются ошибки сертификата (ValidateServerCertificate => true), что позволяет работать с любым C2, включая динамические IP.

YARA:

rule MSADDShell {
strings:
$v1 = "net_handlerDelOutDataNet"
$v2 = "P_OutputDataReceived"
$v3 = "add_OutputDataReceived"
$v4 = "SendDataFwd"
$v5 = "OnhandlerDelFwfPx"
$v6 = "OnhandlerDelOutDataNet"
$v7 = "msadds.exe" wide
condition:
uint16(0) == 0x5A4D and 5 of ($v*) and filesize < 100KB
}


#IOC #yara #dfir #detect #win #ti #ir
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍9👏61
Как молот грома помешал клешням безмолвия 🦀

Во время расследования инцидентов команда Incident Response при поддержке департамента Threat Intelligence обнаружила следы использования вредоносного ПО KrustyLoader.

Впервые это ВПО было описано в январе 2024 года экспертами из Volexity и Mandiant: они обнаружили его использование в атаках, нацеленных на эксплуатацию RCE-уязвимостей нулевого дня в Ivanti Connect Secure. Тогда же было указано, что KrustyLoader написан для Linux, однако позже появились версии для Windows. Примечательно, что на момент исследования загрузчик использовала только одна группировка, которую мы называем QuietCrabs.

Дальнейшее расследование позволило обнаружить активность другой группировки в инфраструктуре жертвы. Интересно, что действия второй группировки, вероятно, помешали QuietCrabs реализовать атаку и стали причиной, по которой на эту атаку обратили внимание.

Мы предполагаем, что второй группой является Thor. На основе изучения сетевой инфраструктуры злоумышленников и данных телеметрии мы пришли к выводу, что они проводили массовые атаки на российские компании. Для получения первоначального доступа к инфраструктуре группировка эксплуатировала ряд уязвимостей типа RCE (Remote Code Execution), например CVE-2025-53770, CVE-2021-27065.

😠 В статье мы покажем цепочки атак, которые обнаружили во время расследования, и расскажем про инструменты, используемые злоумышленниками. Читайте материал в нашем блоге.

#IR #TI #APT
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥1284👏1
Мы бы очень хотели сделать для вас обзор «томатного гозе», но в пятницу вы проголосовали за новый разбор (Ex)Cobalt... 🙄

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

Наряду с хорошо известными и проверенными инструментами — бэкдором Cobint, шифровальщиками Babuk и Lockbit, а также разного рода сетевыми туннелями — группа продолжает создавать и развивать новые средства, такие как Pumakit и Octopus 🐙

Обзор инструментов группы, которые она применяла в атаках в 2024–2025 годах, можно посмотреть в нашей статье.

#dfir #ir #linux #ti #malware
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20😁15👏11🍾41
He may not, as unvalued persons do, Carve for himself (W. Shakespeare)


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

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

В случае карвинга событий журналов ОС Windows хорошо зарекомендовала себя техника «забудь про BinXML»: для полноценного декодирования содержимого полей единичного события необходимы шаблоны, хранящиеся в заголовке чанка, который по понятным причинам может просто отсутствовать. Не пытаясь даже искать такие шаблоны, можно составить текстовое описание единичного события, где однозначно выделяются даты, хранимые в стандартных расположениях, коды событий и несколько других служебных полей, а также декодируемые «как текст» (с вырезанием служебных последовательностей BinXML) байтовые последовательности, содержащие данные для подстановки в шаблоны.

В итоге подобная техника позволяет получить существенно больше данных, нежели при попытке восстановления чанков EVTX: имея дату, код события EventID и тип журнала, хранимый в виде текста, можно понять, о чем идет речь (скриншот 1).

Схожий подход может применяться и для «живых» систем, где атакующие предприняли попытку удаления данных с целью сокрытия следов своих перемещений.

🔎 Для поиска остаточных данных таблицы MFT, помимо восстановления единичных записей стандартного формата, в ряде случаев хорошо работает техника поиска единичных атрибутов: как правило, ценность представляют атрибуты типа 0x30, то есть $FILE_NAME, содержащие четыре метки времени, имя файла и его размер (скриншот 2). В отдельных случаях такие единичные атрибуты даже для «живой» системы позволяют обнаружить, например, в файле подкачки (pagefile.sys) следы присутствия вредоносных файлов, отсутствующие в других артефактах. Подобные результаты также возможно получить с помощью поиска USN-записей, содержащих одну метку времени и имя файла, с которым производились какие-либо операции ФС (скриншот 3).

💽 Для поиска исполняемых файлов в образе диска хорошо работает тактика поиска заголовка PE с последующей оценкой размера файла по совокупному размеру секций. При небольшом усложнении алгоритма возможно реализовать более точный подход: определение энтропии конечных фрагментов файла с последовательным уменьшением размера фрагмента до момента перехода эмпирически определенного порогового значения «снизу вверх» при соблюдении паддинга в ряде случаев позволяет получить исполняемые файлы с совпадением по хешу. Однако даже «вырубленные топором» исполняемые файлы ВПО или их фрагменты прекрасно детектируются с помощью YARA-правил (скриншоты 4, 5).

📁 Для восстановления файлов реестра возможно использование поиска по заголовку с определением размера файла по полю HiveBinsDataSize: данное приближение в ряде случаев позволяет получить набор файлов, пригодных для обработки классическими инструментами. Характерной особенностью в данном случае является наличие в заголовке даты модификации и типа файла (primary/log), а также имени файла в UTF-16 размером 64 байта. Несмотря на то что для некоторых потенциально интересных с точки зрения форензики файлов (UsrClass.dat) структура пути не позволяет определить с достаточной точностью исходное размещение файла, для большинства случаев имеющейся информации вполне достаточно.

Наконец, прекрасно зарекомендовала себя техника поиска в образе диска читаемых текстовых фрагментов, ассоциируемых с выявленным инструментарием атакующих: в ряде случаев она позволяет восстановить командлайны и логи использованных инструментов, включая пароли, имена УЗ и подобные «приятные мелочи» (скриншот 6).

#yara #dfir #ir #windows
@ptescalator
🔥1612👍7
Использование DefendNot в атаках с XWorm 🪱

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

🌹 Отдельно примечателен выбор инфраструктуры: для распространения компонентов используется GitHub-репозиторий death-note. Забавно, что автор отсылает к известному произведению Death Note, где старшеклассник получает в руки особую тетрадь.

В первой цепочке в качестве первичного стейджа использовались VBScript-файлы (скриншот 2), содержащие обфусцированный скрипт. После запуска жертвой VBS-файла происходило скачивание с GitHub-репозитория злоумышленника текстового файла-приманки (скриншот 3) и его запуск для создания видимости легитимного процесса, а также выгрузка и запуск вредоносного VBE-скрипта «SCRRC4ryuk.vbe» (скриншот 4).

Указанный скрипт выполнял деактивацию средств защиты Windows, в том числе Microsoft Defender с использованием проекта DefendNot, а также дропал и запускал дополнительный модуль telegram_worker.vbs, отвечающий за скрытую съемку экрана и отправку скриншотов в Telegram с использованием API и бота. Дополнительно перед запуском DefendNot злоумышленники выполняли ряд PowerShell-команд, таких как Set-MpPreference и Add-MpPreference, для отключения механизмов защиты и добавления в исключения каталогов, где размещаются и запускаются вредоносы.

После этого запускался DefendNot, который регистрирует фиктивный антивирус через Windows Security Center и переводит Defender в отключенное состояние штатными средствами ОС. Завершающим этапом из того же репозитория загружался и запускался исполняемый файл, идентифицированный как XWorm RAT.

Во второй цепочке в начальном стейдже использовались LNK-файлы. Ярлык либо напрямую загружал и исполнял PowerShell-скрипт из GitHub-репозитория, либо выполнял эквивалентную команду в Base64-представлении (скриншот 4). Запущенный PowerShell-скрипт (скриншот 5) создавал текстовый файл, заполнял его псевдослужебным (скриншот 3) содержимым и открывал для пользователя, маскируя вредоносную активность под офисный документооборот. После этого скрипт загружал из того же GitHub-репозитория файл SCRRC4ryuk.vbe с последующим запуском. Дальнейшие стадии полностью совпадают с первой цепочкой и также приводят к развертыванию XWorm RAT на рабочей станции жертвы.

🕵️ Изучив метаданные семплов XWorm, нам удалось обнаружить более ранние атаки, датируемые концом сентября, где вместо GitHub-репозитория распространение ВПО осуществлялось через облачные файловые хранилища, такие как Dropbox, Box и Яндекс.Диск. Это может свидетельствовать об эволюции инфраструктуры распространения и постепенном смещении акцента в сторону GitHub как удобной и менее подозрительной для пользователя площадки доставки.

💡 Отдельного внимания заслуживает использование DefendNot. Изначально он позиционируется как открытый PoC-проект, демонстрирующий возможность регистрации фиктивного антивируса в Windows Security Center и последующего штатного отключения Microsoft Defender без эксплуатации уязвимостей. Базовый сценарий установки и запуска сводится к однострочной команде PowerShell вида:

irm https://dnot.sh/ | iex


С ее помощью загружается установочный скрипт, скачивается и распаковывается архив, после чего PoC разворачивается в каталоге C:\Program Files\defendnot\ и запускается. В процессе работы DefendNot добавляет себя в автозагрузку текущего пользователя, сохраняя эффект отключения Defender после перезагрузки.

На практике подобные инструменты ранее практически не встречались в реальных атаках, поэтому задокументированное использование DefendNot в кампании указывает на растущую заинтересованность злоумышленников в переиспользовании публичных исследовательских разработок для отключения встроенных средств защиты.

#TI #Phishing #malware #win
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥9💯63