పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3

Этой статьей мы завершаем цикл публикаций, посвященных анализу вредоносного программного обеспечения. В మొదటి భాగం мы провели детальный анализ зараженного файла, который получила по почте одна европейская компания, и обнаружили там шпионскую программу AgentTesla. Во రెండవ భాగం описали результаты поэтапного анализа основного модуля AgentTesla.

Сегодня Илья Померанцев, специалист по анализу вредоносного кода CERT Group-IB, расскажет о первом этапе анализа ВПО — полуавтоматической распаковке сэмплов AgentTesla на примере трех мини-кейсов из практики специалистов CERT Group-IB.

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

Сэмпл №1

Исходный файл — это документ MS Word, который эксплуатирует уязвимость CVE-2017-11882.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
В результате происходит загрузка и запуск пейлоада.

Анализ дерева процессов и поведенческих маркеров показывает инжект в процесс RegAsm.exe.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Имеются характерные для AgentTesla поведенческие маркеры.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Скачанный сэмпл — это исполняемый .NET-файл, защищенный протектором .NET Reactor.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Откроем его в утилите dnSpy x86 и перейдем к точке входа.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Перейдя в функцию DateTimeOffset, мы обнаружим код инициализации нового .NET-модуля. Поставим బ్రేక్ పాయింట్ на интересующей нас строке и запустим файл.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
В одном из возвращенных буферов можно увидеть MZ-сигнатуру (0x4D 0x5A). Сохраняем его.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Сдампленный исполняемый файл — это динамическая библиотека, которая является лоадером, т.е. извлекает из секции ресурсов полезную нагрузку и производит ее запуск.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
При этом сами необходимые ресурсы в дампе отсутствуют. Они находятся в родительском сэмпле.

వినియోగ dnSpy обладает двумя крайне полезными функциональными возможностями, которые помогут нам довольно быстро создать «франкенштейна» из двух связанных файлов.

  1. Первая позволяет «вклеить» в родительский сэмпл динамическую библиотеку.

    పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3

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

    పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3

Сохраняем нашего «франкенштейна», ставим బ్రేక్ పాయింట్ на строке, возвращающей буфер с дешифрованными ресурсами, и производим дамп по аналогии с предыдущим этапом.

Второй дамп — это написанный на VB.NET исполняемый файл, который защищен знакомым нам протектором కన్ఫ్యూజర్ఎక్స్.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
После снятия протектора используем написанные ранее YARA-правила и убедимся в том, что распакованное ВПО — действительно AgentTesla.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3

Сэмпл №2

Исходный файл — документ MS Excel. К исполнению вредоносного кода приводит встроенный макрос.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
В результате запускается PowerShell-скрипт.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Скрипт дешифрует код на C# и передает ему управление. Сам код является загрузчиком, что также видно из отчета песочницы.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Полезная нагрузка представляет собой исполняемый .NET-файл.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Открыв файл в dnSpy x86, можно увидеть, что он обфусцирован. Снимаем обфускацию утилитой de4dot и возвращаемся к анализу.

В ходе исследования кода можно обнаружить следующую функцию:

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
В глаза бросаются закодированные строки EntryPoint и ఇన్వోక్. Ставим బ్రేక్ పాయింట్ на первую строку, запускаем и сохраняем значение буфера byte_0.

Дамп вновь является приложением на .NET и защищен కన్ఫ్యూజర్ఎక్స్.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Снимаем обфускацию с помощью de4dot и загружаем в dnSpy. Из описания файла понимаем, что столкнулись с CyaX-Sharp loader.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Этот загрузчик обладает обширным функционалом для противодействия анализу.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Этот функционал включает обход встроенных систем защиты Windows, отключение Windows Defender, а также механизмы обнаружения песочниц и виртуальных машин. Есть возможность подгружать полезную нагрузку из сети или хранить ее в секции ресурсов. Запуск выполняется через инжект в собственный процесс, в дубликат собственного процесса или же в процессы MSBuild.exe, vbc.exe и RegSvcs.exe в зависимости от выбранного злоумышленником параметра.

Однако для нас они менее существенны, чем AntiDump-функция, которую добавляет కన్ఫ్యూజర్ఎక్స్. Ее исходный код можно найти на గ్యాలరీలు.

Для отключения защиты воспользуемся возможностью dnSpy, которая позволяет редактировать IL- కోడ్.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Сохраняемся и ставим బ్రేక్ పాయింట్ на строку вызова функции дешифровки полезной нагрузки. Она находится в конструкторе основного класса.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Запускаем и дампим полезную нагрузку. Используя ранее написанные YARA-правила, убеждаемся, что перед нами AgentTesla.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3

Сэмпл №3

Исходный файл — это исполняемый VB Native PE32-файл.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Анализ энтропии показывает наличие большого фрагмента зашифрованных данных.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
При анализе формы приложения в VB Decompiler можно заметить странный пиксельный фон.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
График энтропии bmp-картинки идентичен графику энтропии исходного файла, а размер составляет 85% от размера файла.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Общий вид изображения свидетельствует об использовании стеганографии.

Обратим внимание на вид дерева процессов, а также на наличие маркера инжекта.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Это говорит о выполнении распаковки. Для загрузчиков на Visual Basic (они же VBKrypt లేదా VBInjector) характерно использование shellcode для инициализации полезной нагрузки, а также для выполнения самого инжекта.

Анализ в VB Decompiler показал наличие события లోడ్ у формы FegatassocAirballoon2.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Перейдем в IDA pro по указанному адресу и изучим функцию. Код сильно обфусцирован. Фрагмент, который нас интересует, представлен ниже.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Здесь производится сканирование адресного пространства процесса в поисках сигнатуры. Такой подход крайне сомнителен.

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

Во-вторых, значение сигнатуры iWGK. Думаю, очевидно, что 4 байта слишком мало, чтобы гарантировать уникальность. А если учитывать первый пункт, вероятность ошибиться довольно высока.

В действительности искомый фрагмент прикреплен к концу найденной ранее bmp-картинки по смещению 0xA1D0D.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
ప్రదర్శన షెల్కోడ్ осуществляется в две стадии. Первая производит дешифровку основного тела. При этом ключ определяется перебором.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Сдампим дешифрованный షెల్కోడ్ и посмотрим на строки.

Во-первых, теперь мы знаем функцию создания дочернего процесса: CreateProcessInternalW.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Во-вторых, нам стал известен механизм закрепления в системе.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Вернемся к исходному процессу. Поставим బ్రేక్ పాయింట్ CreateProcessInternalW и продолжим выполнение. Далее наблюдаем связку NtGetContextThread/NtSetContextThread, которая меняет адрес начала выполнения на адрес ShellCode.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Подключаемся к созданному процессу отладчиком, активируем событие Suspend on libraryu load/unload, возобновляем процесс и дожидаемся подгрузки .NET-библиотек.

Далее при помощи ProcessHucker дампим регионы, содержащие в распакованном виде .NET-приложение.

Останавливаем все процессы и удаляем закрепившуюся в системе копию ВПО.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Сдампленный файл защищен протектором .NET Reactor, который легко снимается при помощи утилиты de4dot.

పోలింగ్ విఫలమైంది: ఏజెంట్ టెస్లాను శుభ్రమైన నీటికి పరిచయం చేద్దాం. పార్ట్ 3
Воспользовавшись написанными ранее YARA-правилами, убеждаемся, что перед нами AgentTesla.

యొక్క సారాంశాన్ని లెట్

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

Анализ вредоносного объекта, который мы провели, требует много времени и усилий, и эту работу должен выполнять специальный сотрудник в компании, однако не все компании готовы держать в штате аналитика.

Одна из услуг, которую оказывает Лаборатория компьютерной криминалистики и анализа вредоносного кода Group-IB — реагирование на киберинциденты. А, чтобы заказчики не тратили время на согласование документов и обсуждение в разгар кибератаки, Group-IB запустила ఇన్సిడెంట్ రెస్పాన్స్ రిటైనర్, услугу по реагированию на инциденты по предварительной подписке, включающую также этап анализа вредоносного кода. Более подробную информацию об этом можно найти ఇక్కడ.

Если вы хотите сами еще раз изучить, как проводится распаковка сэмплов AgentTesla, и увидеть, как это делает специалист CERT Group-IB, можете скачать запись вебинара по этой теме ఇక్కడ.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి