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


Вердикт
Мы провели динамический и статический анализ данного образца в системе tLab. Анализ показал, что образец является шпионским ПО Исходя из характера данной атаки не массовость и письма, исходящего от казахстанского корпоративного домена с типовым рабочим текстом, ее можно отнести к целевой.
В ходе ручного анализа мы также нашли ряд схожих характеристик с вредоносным ПО AgentTesla, который отвечает за сбор конфиденциальных данных пользователя (жертвы), таких как: аутентификационные данные веб ресурсов (браузера), VPN, FTP и EMAIL-клиентов.
Система tLab в нашем вирусной лаборатории присвоила высокий уровень угрозы и обнаружила модификацию ОС.
Описание угрозы
В рамках исследования специалисты VirLab идентифицировали следующую цепочка атаки ВПО.

- Доставка ВПО на корпоративную электронную почту сотрудников с казахстанского домена. Запуск пользователями вредоносного AutoIt-приложения. Данный объект относится к типу Троян-Дроппер (Dropper), предназначенный для извлечения и запуска последующих компонентов вредоносного ПО. Извлечение объектов. Дроппер используя функционал AutoIt извлекает из своего тела два файла, которые являются основными компонентами атаки – зашифрованный Троян-Инжектор и зашифрованный ВПО AgentTesla. Эти файлы были инкапсулированы в тело исполняемого файла на этапе компиляции исходного AutoIt-скрипта.
- Расшифровка и запуск Трояна-Инжектора. Извлечённый файл Троян-Инжектора представляет собой зашифрованный исполняемый код, лишенный стандартных заголовков и структур, характерных для обычных исполняемых файлов. Дроппер соответственно расшифровывает код и запускает полученный фрагмент машинного кода в контексте своего процесса. Это обеспечивает высокую степень скрытности атаки, поскольку отсутствие полноценного исполняемого файла трояна-инжектора значительно осложняет его обнаружение средствами антивирусной защиты. Расшифровка AgentTesla: Троян-Инжектор расшифровывает зашифрованный вредоносный код AgentTesla, подготавливая его к инъекции в легитимные процессы.
- Внедрение AgentTesla в легитимный процесс Windows (RegSvcse.exe). Используя технику Process Hollowing, Троян-Инжектор внедряет расшифрованный вредоносный код AgentTesla в легитимный процесс Windows. Эта техника позволяет вредоносному коду скрыть своё присутствие от антивирусных программ и систем мониторинга, за счёт выполнения в контексте доверенного системного процесса.
- Agent-Tesla затем начинает извлекать конфиденциальные данные, мониторить активность пользователя и отправлять их в Интернет.
Таким образом, атака ВПО реализуется через сложную многоступенчатую цепочку, начиная с социальной инженерии и заканчивая технически сложными методами внедрения и сокрытия вредоносного кода в системе жертвы.
AutoIt app (Троян-Дроппер)
Троян-дроппер в цепочке атаки выступает первым вредоносным исполняемым файлом, активируемым пользователем после получения целевого Email-сообщения. Этот объект создан с использованием языка AutoIt, применяемого для разработки системных утилит. По результатам декомпиляции был обнаружен исходный скрипт, строки которого были зашифрованы для усложнения процесса символьного анализа средствами стандартной защиты (Рис. 2).

Расшифровка строк в скрипте осуществляется в функции DecodeString простым алгоритмом удаления определённой строки символов. Расшифрованный текст с комментариями по функционалу представлен на Рис. 3. В коде прослеживается извлечение двух файлов с именами “unhelpable” и “bezzo” соответственно.
Содержимое файла “unhelpable” считывается, расшифровывается и используя системный API VirutalAlloc размещается в памяти процесса дроппера для дальнейшего выполнения. При этом данный файл характеризуется тем, что не представляет собой полноценный исполняемый файл и содержит только секцию кода - исполняемый машинный код (opcode). Этот код исполняется через API CallWindowProc, при этом точка входа для начала выполнения кода расположена со смещением в 9232 байт с начала фрагмента кода.
Данный функционал по запуску кода, является основным и тем самым передает управление трояну-инжектору (Injector), который в свою очередь реализует последующий шаг в цепочке-атаки, а именно активация шпионского ПО AgentTesla через внедрение в легитимный процесс Windows.

Injector
Троян-инжектор в цепочке атаки выполняет важную роль с завершающим и наиболее значимым шагом в цепочке атаки, а именно внедрение AgentTesla в легитимный процесс Windows. После этого шага начинается основная активность ВПО, а именно сбор конфиденциальных данных и их отправка злоумышленникам через Интернет.
Для обхода систем защиты и затруднения реверс-инжиниринга, данный объект использует технику динамической локализации API-функций относящейся к MITRE ATT&CK T1027.007 (Обфускация файлов или информации: Динамическое разрешение API). Эта техника позволяет скрыть артефакты используемых API в теле файла ВПО и динамически получить доступ к необходимым системным функциям без прямого вызова API. Перед вызовом таких API-функций они идентифицируются в памяти процесса по хеш-значениям их имен.
Пример кода в декомпиляторе функции по проверке на запуск в песочнице представлен на Рис. 5. Как видно используются таблица виртуальных функций соответственно все вызовы API не выявляются.

Далее в дисассемблере использовалась техника добавления виртуальной таблицы импорта в виде сегмента с прототипами API. При этом разметка API-функции производилась через новые перекрёстные-ссылки на них. На Рис. 5 можно наблюдать новый сегмент с API-импортами со ссылками на вызовы в коде. В таком виде можно проводить полноценное исследование образца на статическом уровне для получения полного понимания всего функционала.

После восстановления API был произведен полноценный реверс-инжиниринг данного образца. На Рис. 7 представлен декомпилированный псевдокод на языке С. Ниже приводится последовательное пояснение по логике работы трояна.
Инициализация и проверка окружения
Начальная стадия действий включает в себя проверку на наличие отладчика через регистры отладки и Process Environment Block (PEB), что указывает на попытки вредоносного ПО уклониться от анализа с использованием отладочных инструментов.

Далее следует проверка на наличие среды виртуализации или песочницы, основанная на анализе поведения пользователя и времени выполнения задержек. Если обнаруживаются признаки анализа, процесс завершается. Код такой проверки представлен на Рис. 4 Псевдокод функции проверки на запуск в песочнице (с API). Здесь измеряется системное время до и после заданной задержки в 500 миллисекунд. Если есть отклонения, то это интерпретируется как среда песочницы.
Следует отметить, что данный способ обнаружения является изящным и потенциально направлен не на детектирование самой песочницы или гипервизора, а на выявление механизма анти-уклонения, который предназначен для борьбы с методом отложенного исполнения вредоносного кода. Если операционная система внутри песочницы сокращает время сна процесса для ускорения анализа, то это изменение будет обнаружено данным методом и соответственно классифицировано как проявление контролируемой среды, то есть песочницы.
Расшифровка и Подготовка к Инъекции
В случае успешного прохождения проверок троян производит расшифровку вредоносного кода, подготавливая его к дальнейшему исполнению. Для этого троян получает путь к временной папке и формирует путь к файлу «extrorsal», который был предварительно был извлечен трояном-дроппером на предыдущем этапе цепочки атаки. Далее считывается этот файл и расшифровывается.
Алгоритм дешифрования представлен на Рис. 6, где применяется операция XOR к каждому байту зашифрованных данных с соответствующим байтом ключа шифрования - XP3NBPB00D11E2PZ5O3A86IS8S39ZD. Это типичный пример использования операции XOR для шифрования или дешифрования данных. Используя API VirtualAlloc, вредоносное ПО размещает расшифрованные данные в памяти, готовя их к инъекции в процесс-мишень. Эти данные представляют собой ВПО из семейства AgentTesla.


Инъекция в процесс Windows (Process Hollowing)
На этом этапе вредоносное ПО реализует инъектирование кода AgentTesla в целевой процесс Windows, при этом используется техника Process Hollowing.
В коде на Рис. 7 расшифрованный буфер передается в функцию Inject_to_WinProcess вместе с идентификатором целевого процесса для инжекта, в данном случае 2, что соответствует утилите RegSvcs.exe из .NET Framework 4.0.
Троян реализует технику Process Hollowing путем создания отображения секций и записи расшифрованного образа в память процесса. Он использует низкоуровневые функции NtCreateSection, NtMapViewOfSection и NtWriteVirtualMemory для обхода некоторых защитных механизмов и внедрения кода напрямую в память процесса.
Ниже описывается реализация техники Process Hollowing, представленной на Рис. 8 и Рис. 9.
Первым шагом является выбор целевого процесса. Код выбирает один из трех вариантов: svchost.exe, RegSvcs.exe из .NET Framework 2.0 или RegSvcs.exe из .NET Framework 4.0 (Рис. 8). Использование легитимных системных процессов или процессов известных фреймворков помогает вредоносному коду скрыться от подозрений. Затем код создает новый экземпляр выбранного процесса в приостановленном состоянии. Это позволяет получить контроль над процессом до начала выполнения его основного кода. Приостановка процесса необходима для внесения изменений в его память перед возобновлением выполнения.

Следующим шагом является получение контекста основного потока созданного процесса используя системную функцию GetThreadContext. Контекст содержит важную информацию о состоянии потока, включая регистры и указатели. Эта информация будет использована для управления выполнением вредоносного кода внутри целевого процесса. Код через ReadProcessMemory читает значение из памяти целевого процесса по определенному смещению относительно регистра EBX. Это значение обычно указывает на адрес загруженного образа исполняемого файла в контексте процесса, так называемый базовый адрес.
Затем проверяется, находится ли этот адрес в допустимом диапазоне адресов вредоносного кода. Если адрес находится вне диапазона или вызов функции для освобождения памяти по этому адресу завершается успешно, код продолжает выполнение. Эта проверка гарантирует, что память целевого процесса готова для внедрения вредоносного кода.
Далее код используя низкоуровневую системную функцию NtCreateSection создает новый раздел (секцию) в памяти с правами доступа на чтение, запись и выполнение. Размер раздела устанавливается равным размеру образа вредоносного кода. Затем этот раздел отображается в адресное пространство целевого процесса, что позволяет вредоносному коду получить доступ к памяти процесса.

После подготовки раздела код копирует заголовки и секции вредоносного кода из буфера в отображенный раздел. Это фактически заменяет оригинальный код процесса вредоносным кодом. Адреса и размеры секций берутся из заголовков PE (Portable Executable) вредоносного кода, чтобы обеспечить правильное размещение кода в памяти целевого процесса (9).
Если образ вредоносного кода содержит таблицу релоков (перемещаемых адресов), код обрабатывает эту таблицу. Релоки используются для настройки адресов в коде, которые зависят от базового адреса загрузки. Обработка релоков гарантирует, что вредоносный код будет корректно работать по новому базовому адресу внутри целевого процесса.
После внедрения вредоносного кода код записывает новый базовый адрес в память целевого процесса. Затем он устанавливает точку входа вредоносного кода в контекст основного потока и возобновляет выполнение этого потока. С этого момента целевой процесс начинает выполнять внедренный вредоносный код вместо своего оригинального кода.

Стелс-техника при инъекции кода
При реализации Process Hollowing использовалась стелс-технологии. Скрывается использование некоторых нативных (низкоуровневых) системных API-функций, связанных с работой с памятью, а именно NtWriteVirtualMemory. Подобные функции импортируются библиотекой ntdll.dll и называются системными вызовами. NtWriteVirtualMemory производит запись в память процесса, что является обязательным шагом, поскольку без этого невозможно достигнуть инъекции кода. Соответственно, для поведенческого обнаружения Process Hollowing, система защиты такие как антивирусы и некоторые песочницы инсталлируют системные хуки, которые позволяют мониторить вызовы этих функций.
Проблема таких хуков заключается в том, что они работают на уровне режима пользователя и для мониторинга требует явный вызов самих API-функций.
Стелс технология трояна-инжектора заключается в том, что при использовании этих API-функции не производится явного вызова импортированных или динамически загруженных API. Обход происходит за счет выполнения этих API-функций напрямую через вызов инструкции systenter/syscall, которые инициируют переход в режим ядра и дальнейшего исполнения API, то есть ниже хуков, работающих в режиме пользователя.
На Рис. 7 и Рис. 11 представлены фрагменты кода трояна обеспечивающих прямой вызов нативной API-функции на примере NtWriteVirtualMemory.
Процесс состоит из нескольких шагов:
- Поиск номер системного вызова: Запускается функция поиска номера системного вызова на основе хеш-значения имени нативной API-функции. Значение 0xE4879939 в данном контексте соответствует вызову NtWriteVirtualMemory (Рис. 7).
- Загрузка DLL в память: Функция поиска в первую очередь загружает файл DLL (в данном случае ntdll.dll), содержащего системные вызовы Windows в память для последующего анализа. Это делается с использованием стандартных функций Windows API, таких как CreateFileW, GetFileSize, ReadFile и VirtualAlloc (Рис. 11).
- Поиск таблицы экспорта: В загруженной копии DLL ищется экспортируемая таблица, где перечислены все нативные API-функции, доступные для использования извне. Сравнение производится по хэш-значению имени функции, что позволяет идентифицировать нужную функцию без использования её явного имени (Рис. 11).
- Определение адреса системного вызова:После нахождения адреса функции в экспортируемой таблице производится анализ её машинных инструкций для поиска номера системного вызова (Рис. 11). Это делается путём поиска инструкции MOV EAX, IMM32, где IMM32 является искомым номером.
- Выполнение системного вызова: С полученным номером системного вызова можно напрямую обращаться к ядру Windows, минуя стандартный API и, соответственно, любые хуки на эти вызовы (Рис. 7 и Рис. 12).



Можно сделать следующие выводы по данной стелс-технике:
- Эффективность обхода защиты: Данный метод показывает высокую эффективность в обходе систем обнаружения и предотвращения вторжений, так как большинство из них рассчитаны на контроль стандартных API вызовов.
- Сложность обнаружения: Для антивирусных программ становится значительно сложнее обнаружить вредоносную активность, так как непосредственное обращение к системным вызовам не логируется стандартными средствами Windows.
- Повышенная сложность анализа: Для специалистов по кибербезопасности анализ таких вредоносных программ становится более сложным, требуя глубоких знаний архитектуры операционной системы и способов работы с системными вызовами.
- Необходимость постоянного обновления базы данных хэшей: Так как метод основан на сопоставлении хэш-значений, важно поддерживать актуальность базы данных хэшей для обнаружения новых или модифицированных системных вызовов.
Троян после инжекции также включает механизм саморепликации, позволяющий вредоносному ПО запускать новые копии себя для увеличения своего распространения и устойчивости в системе (Рис. 7).
В целом, активность троянского инжектора демонстрирует сложный многоэтапный процесс, нацеленный на уклонение от обнаружения, расшифровку и исполнение вредоносного кода, а также его распространение и устойчивость в зараженной системе.
Результаты данного исследования будут полезны специалистам по информационной безопасности для углубления понимания современных возможностей продвинутой ВПО по скрытному заражению систем и разработки соответствующих методов выявления и противодействия подобным угрозам.
Agent-Tesla (Trojan-Stealer)
Внедряемый объект ВПО является новой вариацией популярной шпионской программы (троян стилер – stealer) – Agent Tesla. Данное семейство также причисляют к утилите удалённого доступа (Remote Administration Tool)
Данный троян обычно используется для сбора конфиденциальных данных, чтения буфера обмена и отсылки данных на удаленный сервер в Интернете.
Индикаторы компрометации данного объекта представлены в Таблице 3.
Семейство AgentTesla является популярным стилером используемого в различных вредоносных компаниях. В ходе анализа рассматриваются ключевые компоненты AgentTesla, отвечающие за внедрение в систему, выполнение вредоносных функций, сбор конфиденциальных данных и обход средств защиты. По результатам исследования также представлены артефакты ВПО такие как имя лог-файла кейлоггера, пароль от email-аккаунта для отсылки данных и т. д. Эти артефакты также могут быть необходимы для блокирования активности ВПО, например запрет SMTP-трафика на mail.gencoldfire.com.
Данный образец разработан на языке C# и платформы .Net. При этом использовался популярный обфускатор - .Net Reactor. После деобфускации и реверс-инжиниринга можно разобрать код точки входа (начало исполнения), представленный.
Если включен кейлоггер, то происходит установка перехвата клавиатуры через хуки используя SetWindowsHookEx и обработчик событий .Net.
Специалисты вирусной лаборатории проанализировали все приложения, с которых собираются пользовательские данные (Таблица 2). В результате анализа выяснилось, что вредоносная программа собирает конфиденциальную информацию из широкого спектра популярных приложений, включая веб-браузеры, почтовые клиенты, мессенджеры, FTP-клиенты, VPN-сервисы и другие. Это позволяет злоумышленникам получить доступ к учетным данным пользователей для различных сервисов, таких как веб-сайты, почтовые аккаунты, облачные хранилища, FTP-серверы и социальные сети. Кроме того, программа также собирает учетные данные для Windows Domain и операционной системы, что потенциально дает злоумышленникам возможность получить полный контроль над зараженным компьютером и доступ к корпоративной сети.
Имя приложения | Тип | Приватная информация |
---|---|---|
Private Internet Access | VPN | Учетные данные для privateinternetaccess.com. |
Windows Credentials | MS Windows | Учетные данные для Windows Domain and OS. |
MySQL Workbench | DB | Учетные данные для DB. |
Outlook, Opera Mail | Учетные данные (IMAP, POP3, HTTP, SMTP) | |
Safari for Windows | Browser | Учетные данные для сайтов. |
Internet Explorer, EDGE | Browser | Учетные данные для сайтов. |
UC Browser | Mobile browser | Учетные данные для сайтов. |
SmartFTP, FTPGetter | FTP- клиент | Учетные данные для FTP-серверов. |
FTP Navigator | FTP- клиент | Учетные данные для FTP-серверов. |
WS_FTP | FTP- клиент | Учетные данные для FTP-серверов. |
OpenVPN | VPN-клиент | Учетные данные для VPN-сетей. |
Windows Mail App | Учетные данные для почтовых аккаунтов. | |
ClawsMail, Mailbird | Учетные данные для почтовых аккаунтов. | |
Trillian | Messenger | Учётные данные мессенджеров и социальных сетей. |
Internet Downloader Manager | IDM | Учётные данные для сайтов, сервисов, FTP-серверов, облачных хранилищ и др. |
PocoMail, “eM Client | Учетные данные для почтовых аккаунтов. | |
Discord | Messenger and VoIP | Учетные данные |
The Bat!, Becky!, Eudora | Учетные данные для почтовых аккаунтов. | |
IncrediMail, FoxMail | Учетные данные для почтовых аккаунтов. | |
WinSCP, FileZilla, Flash FXP | SFTP/FTP/SCP - клиент | Учетные данные для SFTP/FTP/SCP-серверов. |
RealVNC, TightVNC, TigerVNC, UltraVNC | VNC | Учетные данные для VNC-серверов. |
CoreFTP, FtpCommander | FTP- клиент | Учетные данные для FTP-серверов. |
QQ Browser, Flock Browser | Browser | Учетные данные для сайтов. |
Все браузеры | Browser | Учетные данные для сайтов. |
DNS | DNS-сервис | Учетные данные для DynDNS (https://account.dyn.com/) |
Paltalk | Messenger, Video Chat and VoIP | Учетные данные для Paltalk (paltalk.com) |
Psi/Psi+, Pidgin | Messenger | Учетные данные для messenger |
Заключение
В данном отчете представлен детальный анализ атаки с использованием вредоносного ПО AgentTesla. Исследование, проведенное специалистами вирусной лаборатории, позволило раскрыть технические особенности и механизмы функционирования данной угрозы.
Данное ВПО является модификацией известного семейства троянов-стилеров и предназначено для кражи конфиденциальных данных пользователей.
Атака реализована в несколько этапов, включая доставку ВПО через фишинговое письмо, многоуровневую распаковку и установку основного функционала, сбор чувствительной информации из широкого спектра популярных приложений и последующую эксфильтрацию данных через Email.
Использование сложной цепочки объектов, методов шифрования и обфускации позволило ВПО быть малозаметным. Однако система tLab обнаружила данную угрозу. Анализ выявил уникальные индикаторы компрометации и артефакты, специфичные для данного образца AgentTesla.