Анализ упакованного образца Agent Tesla
Для анализа был предоставлен следующий файл:
- OUTSTANDING STATEMENT.xlz.exe
A24BF02CE43A846463532E46211962EC7E883E682ABBDE61F922FCD46FC301BC
Общее описание
В декабре 2020 года вредоносное программное обеспечение было направлено на корпоративную почту АО «Центр развития трудовых ресурсов», которая является нашим клиентом и использует систему tLab. Данное вредоносное ПО не обнаруживалось антивирусным программным обеспечением на статическом, сигнатурном уровне, однако наша система tLab обнаружила данную угрозу на поведенческом и эвристическом уровнях.
По результатам первичной оценки, в рамках технической поддержки системы tLab, данный образец был предоставлен нам для глубокого ручного анализа (reverse engineering) в недрах нашей вирусной лаборатории.
По результатам исследования образца выяснилось, что это угроза нулевого дня. Дата создания образца совпадает с днем его обнаружения.
Позже данный факт был опубликован в АО «Центр развития трудовых ресурсов»
Мы провели динамический и статический анализ данного образца в системе tLab. Анализ показал, что образец является шпионским ПО и отвечает за сбор конфиденциальных данных пользователя (жертвы), таких как: аутентификационные данные веб ресурсов (браузера), vpn, ftp и email клиентов. Исходя из характера данной атаки (не массовость), ее можно отнести к целевой.
В ходе ручного анализа мы также нашли много схожих характеристик с вредоносным ПО AgentTesla.
Общая схема работы образца OUTSTANDING STATEMENT.xlz.exe
На первой стадии, исследуемый образец распаковывает ресурс под именем dx, который является url-encoded base64 строкой. В результате получается PE файл.
Во второй стадии, библиотека использует второй ресурс под именем hLuPu.png, преобразовывает его в массив байт. Далее выполняется операция xor с заранее известным ключом и в результате получается gzip архив, который содержит вредоносную нагрузку.
На третьей стадии происходит внедрение вредоносного кода в целевой процесс.
Анализ
Файл представляет собой программу написанную на C#, содержащую вредоносную нагрузку. С помощью статического и динамического анализа, нам удалось извлечь вредоносную нагрузку. Образец содержит несколько визуальных форм, с помощью которых злоумышленники маскировали наличие вредоносного функционала
При запуске программы, в методе Main(), создается форма StudentScores
Управление передается на функцию инициализации формы
Далее вызывается функция wx() c основным вредоносным функционалом
Функция wx() раскодирует файл с именем dx из ресурсов и выполняет метод Buta.
Всего, в ресурсах вредоносного ПО находится три файла
dx - это URL-encoded строка в формате Base 64
Остальные два файла имеют расширение png и содержат закодированную информацию. Файл с именем q
Файл с именем hLuPu
Данный PE файл является динамической библиотекой написанной на C#. Библиотека обфусцирована с помощью Deep Sea 4.1. В ней мы находим вызываемый метод Buta
В метод Buta передается объект, в качестве аргумента
SoapDate это класс, с двумя строками, одна из которых совпадает с именем png файла в ресурсах первого файла
Код метода Buta
Алгоритм работы метода Buta:
- В начале выполняется sleep на 41.5 секунд
-
Ресурс hLuPu превращается в Bitmap объект
-
Bitmap декодируется в массив байтов. Данный способ декодирования полезной нагрузки описан в статье Commodity .NET Packers use Embedded Images to Hide Payloads следуя которой мы можем однозначно идентифицировать, что данный образец использует упаковщик “Cyax”. Суть алгоритма в использовании RGB модели PNG изображения и формирование соответствующего ей байтового массива.
-
Получившийся в результате массив байтов декодируется функцией xor, ключом wNspdaa
-
Получившийся архив распаковывается алгоритмом gzip и в результате получается конечная полезная нагрузка
-
В полезной нагрузке запускается функция, которая является входной точкой
Для автоматизации процесса извлечения полезной нагрузки, нами был написан следующий скрипт:
using System; |
SHA256 полезной нагрузки:
DE87F049D9DC99A60D457FDAC61C332BB88F5BCFF042AA395F55BCEE4A3C17E8
Полезная нагрузка также написана на C# и содержит набор функция для внедрения кода в процесс. Для внедрения кода используется техника Process Hollowing.
Первым шагом является создание процесса RegSvcs.exe, с параметром CREATE_SUSPENDED (константа 0x00000004)
Далее, с помощью функции GetThreadContext и взятия 41 байта из результата, идет получение структуры PEB целевого процесса, которая содержит информацию о процессе.
После получения структуры PEB, происходит чтение базового адреса (ImageBaseAddress) процесса RegSvcs.exe
Перед выделением памяти в процессе, он подготавливается функцией NtUnmapViewOfSection
Функция VirtualAllocEx выделяет память для вредоносного кода внутри процесса RegSvcs.exe
Запись вредоносного кода в процесс функцией WriteProcessMemory
Запуск процесса RegSvcs.exe функцией ResumeThread
Сохранив массив байтов, который используется в качестве аргумента WriteProcessMemory, мы получим еще один PE. Функционал данного образца схож с функционалом файла описанного в статье New Agent Tesla Variant Spreading by Phishing и мы предполагаем, что он тоже является вариантом AgentTesla. Образец является стилером, написанном на C#.
SHA256 образца:
E701BED0853C2F782B0710F7895D7DCE22A58DBB0042DB56A7D9509929C8F05E
Выполнение образца AgentTesla начинается с функции D(), которая проверяет запущен ли уже стилер, чтобы предотвратить повторный запуск
Далее мусорный код, в котором несколько раз выполняется Sleep. Количество раз зависит от переданного заранее предопределенного параметра в функцию A.b.A(). Данная функция в коде встречается повсеместно
Получение имени пользователя (в данном случае имя пользователя - john)
Получение текущего ip адреса
Основной функционал представлен в виде подобных функций
Все имена закодированы и после раскодирования мы можем увидеть пути к данным различных браузеров
Алгоритм кодирования строк находится в классе DF7A7911_002D5159_002D4174_002D9C8D_002D344C41F0E4CF. В нем определен массив байт из 12005 элементов
В конструкторе класса происходит декодирование массива, через операцию xor с его порядковым номером и ключом 0xAA
Основная функция в этом классе возвращает строку, которая конструируется переданными аргументами
Настоящие строковые значения получаются путём вызова множества схожих функций
Имея декомпилированный код, мы можем написать код, который будет декодировать строки, с помощью вызова всех функций в данном классе
В итоге мы получим файл со всеми декодированными строками
Еще один фрагмент кода по декодированию строк связанных с FTP клиентами
В системе tLab мы также можем увидеть установленное интернет соединение
tLab Technologies предоставляет своим клиентам yara правила для каждого вредоносного файла. Yara правило для образца A24BF02CE43A846463532E46211962EC7E883E682ABBDE61F922FCD46FC301BC:
Идентификация по Yara в системе tLab
Yara правило для образца C88A66CBF00B12C88E2B970B8BC220E970E8465E56098CED24E97D42BE901B94:
Идентификация по Yara в системе tLab
Yara правило для образца DE87F049D9DC99A60D457FDAC61C332BB88F5BCFF042AA395F55BCEE4A3C17E8:
Идентификация по Yara в системе tLab
Yara правило для образца E701BED0853C2F782B0710F7895D7DCE22A58DBB0042DB56A7D9509929C8F05E:
Идентификация по Yara в системе tLab
Был обнаружен еще один образец похожий на ранее проанализированный. Данный образец использует встроенный ресурс под именем Wids, который также является картинкой с закодированными данными
Ресурс попиксельно раскодируется и превращается в байтовый массив:
В результате получается PE файл, в котором вызывается определенный метод, куда передаются ключи для дальнейшего декодирования:
Метод “aI” предназначен для декодирования следующей вредоносной нагрузки:
Алгоритм работы метода “aI”:
-
Главный поток засыпает от 65 до 78 секунд
-
Декодируется строка "436F6D70617469626C654672616D65776F726B734D65746164617461456E7472794669656C644964" следующим алгоритмом
В результате получается строка “CompatibleFrameworksMetadataEntryFieldId”.
-
Ресурс под этим именем превращается в Bitmap объект
-
Происходит декодирование ресурса
-
В результате получается еще один PE файл
Данный PE файл имеет строку с параметрами
В зависимости от первого параметра, происходит внедрение в один из легитимных процессов. В данном случае в процесс RegSvcs.exe
Создание процесса:
Происходит декодирование еще одного ресурса, который внедряется в процесс
Конечная вредоносная нагрузка полностью совпадает с ранее обнаруженным образцом.
Проанализированные два образца схожи в способе хранения вредоносной нагрузки в виде закодированной информации в картинке. Дальнейшая распаковка отличается конкретными алгоритмами, но суть остается прежней - xor байтов.
YARA правила для нового образца и детектирование по ним в tLab:
import "pe" |
Обнаружения в tLab:
Заключение
Данный образец AgentTesla довольно довольно хорошо упакован, с помощью различных способов и использует несколько стадий распаковки. Кодирование строк и стеганография делают ручной анализ затруднительным. Этот образец отличается большим списком ПО, данные которого извлекаются.