
Мы продолжаем серию статей, посвященных анализу вредоносного программного обеспечения. В первой части мы рассказывали, как Илья Померанцев, специалист по анализу вредоносного кода CERT Group-IB, провел детальный анализ файла, полученного по почте одной из европейских компаний, и обнаружил там шпионскую программу AgentTesla. В этой статье Илья приводит результаты поэтапного анализа основного модуля AgentTesla.
Agent Tesla — это модульное программное обеспечение для шпионажа, распространяемое по модели malware-as-a-service под видом легального кейлоггер-продукта. Agent Tesla способен извлекать и передавать на сервер злоумышленникам учетные данные пользователя из браузеров, почтовых клиентов и клиентов FTP, регистрировать данные буфера обмена, захватывать экран устройства. На момент анализа официальный сайт разработчиков был недоступен.
Конфигурационный файл
В таблице ниже перечислено, какие функциональные возможности применяются в используемом сэмпле:
|
Описание |
Значение |
| Флаг использования KeyLogger |
true |
| Флаг использования ScreenLogger |
false |
| Интервал отправки лога KeyLogger в минутах |
20 |
| Интервал отправки лога ScreenLogger в минутах |
20 |
| Флаг обработки клавиши Backspace. False – только логгирование. True – стирание предыдущей клавиши |
false |
| Тип CnC. Варианты: smtp, webpanel, ftp |
smtp |
| Флаг активации потока для завершения процессов из списка «%filter_list%» |
false |
| Флаг отключения UAC |
false |
| Флаг отключения менеджера задач |
false |
| Флаг отключения CMD |
false |
| Флаг отключения окна «Выполнить» |
false |
| Флаг отключения инструмента просмотра реестра |
false |
| Флаг отключения точек восстановления системы |
true |
| Флаг отключения панели управления |
false |
| Флаг отключения MSCONFIG |
false |
| Флаг отключения контекстного меню в проводнике |
false |
| Флаг закрепления в системе |
false |
| Путь для копирования основного модуля при закреплении в системе |
%startupfolder% \\%insfolder%\\%insname% |
| Флаг задания атрибутов «Системный» и «Скрытный» для закрепленного в системе основного модуля |
false |
| Флаг выполнения рестарта при закреплении в системе |
false |
| Флаг перемещения основного модуля во временную папку |
false |
| Флаг выполнения обхода UAC |
false |
| Формат даты и времени для записи в лог |
yyyy-MM-dd HH:mm:ss |
| Флаг использования фильтра программ для KeyLogger |
true |
| Тип фильтрации программ. 1 – имя программы ищется в заголовках окна 2 – имя программы ищется в имени процесса окна |
1 |
| Фильтр программ |
«facebook», «twitter», «gmail», «instagram», «movie», «skype», «porn», «hack», «whatsapp», «discord» |
Закрепление основного модуля в системе
Если установлен соответствующий флаг, основной модуль копируется по пути, указанному в конфиге как путь для закрепления в системе.
В зависимости от значения из конфига файлу даются атрибуты «Скрытый» и «Системный».
Автозапуск обеспечивается двумя ветками реестра:
- HKCU\ Software\Microsoft\Windows\CurrentVersion\Run\%insregname%
- HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run\ %insregname%
Поскольку загрузчик производит инжект в процесс RegAsm, установка флага персиста для основного модуля приводит к довольно интересным последствиям. Вместо того, чтобы скопировать само себя, ВПО закрепило в системе оригинальный файл RegAsm.exe, в процесс которого осуществлялся инжект.


Взаимодействие с C&C
Вне зависимости от используемого метода сетевое взаимодействие начинается с получения внешнего IP жертвы с помощью ресурса checkip[.]amazonaws[.]com/.
Далее описаны методы сетевого взаимодействия, представленные в ВПО.
webpanel
Взаимодействие идет по HTTP-протоколу. ВПО выполняет POST-запрос со следующими заголовками:
- User-Agent: Mozilla/5.0 (Windows U Windows NT 6.1 ru rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)
- Connection: Keep-Alive
- Content-Type: application/x-www-form-urlencoded
Адрес сервера задается значением %PostURL%. Зашифрованное сообщение передается в параметре «p». Механизм шифрования описан в разделе «Алгоритмы шифрования» (Метод 2).
Передаваемое сообщение имеет следующий вид:
type={0}\nhwid={1}\ntime={2}\npcname={3}\nlogdata={4}\nscreen={5}\nipadd={6}\nwebcam_link={7}\nclient={8}\nlink={9}\nusername={10}\npassword={11}\nscreen_link={12}
Параметр type указывает на тип сообщения:

hwid — записывается MD5-хеш от значений серийного номера материнской платы и ID процессора. Вероятнее всего, используется в качестве User ID.
time — служит для передачи текущего времени и даты.
pcname — определяется как <Имя пользователя>/<Имя компьютера>.
logdata — данные лога.
При передаче паролей сообщение имеет вид:
type={0}\nhwid={1}\ntime={2}\npcname={3}\nlogdata={4}\nscreen={5}\nipadd={6}\nwebcam_link={7}\nscreen_link={8}\n[passwords]
Далее следуют описания украденных данных в формате \nclient[]={0}\nlink[]={1}\nusername[]={2}\npassword[]={3}.
smtp
Взаимодействие идет по SMTP-протоколу. Передаваемое письмо имеет формат HTML. Параметр BODY имеет вид:

Заголовок письма имеет общий вид: <ИМЯ ПОЛЬЗОВАТЕЛЯ>/<ИМЯ КОМПЬЮТЕРА> <ТИП КОНТЕНТА>. Содержимое письма, как и его вложения, не шифруются.

Взаимодействие идет по ftp-протоколу. На указанный сервер передается файл с именем <ТИП КОНТЕНТА>_<ИМЯ ПОЛЬЗОВАТЕЛЯ>-<ИМЯ КОМПЬЮТЕРА>_<ДАТА И ВРЕМЯ>.html. Содержимое файла не шифруется.

Алгоритмы шифрования
В данном кейсе используются следующие методы шифрования:
Метод 1
Этот метод используется для шифрования строк в основном модуле. Для шифрования применяется алгоритм AES.
На вход подается шестизначное десятичное число. Над ним производится следующее преобразование:
f(x) = (((x >> 2 — 31059) ^ 6380) — 1363) >> 3
Полученное значение является индексом для вшитого массива данных.
Каждый элемент массива — последовательность DWORD. При объединении DWORD получается массив байтов: первые 32 байта — ключ шифрования, далее следуют 16 байтов вектора инициализации, а оставшиеся байты — зашифрованные данные.
Метод 2
Используется алгоритм 3DES в режиме ECB с дополнением в целых байтах (PKCS7).
Ключ задается параметром %urlkey%, однако при шифровании используется его MD5-хеш.
Вредоносный функционал
Изучаемый сэмпл использует следующие программы для реализации своей вредоносной функции:
KeyLogger
При наличии соответствующего флага ВПО при помощи WinAPI-функции SetWindowsHookEx назначает свой обработчик для событий нажатия клавиш на клавиатуре. Функция обработчика начинается с получения заголовка активного окна.
Если установлен флаг выполнения фильтрации приложений, производится фильтрация в зависимости от заданного типа:
- имя программы ищется в заголовках окна
- имя программы ищется в имени процесса окна
Далее в лог добавляется запись с информацией об активном окне в формате:

Затем записывается информация о нажатой клавише:
|
Клавиша |
Запись |
| Backspace |
В зависимости от флага обработки клавиши Backspace: False – {BACK} True – стирание предыдущей клавиши |
| CAPSLOCK |
{CAPSLOCK} |
| ESC |
{ESC} |
| PageUp |
{PageUp} |
| Down |
↓ |
| DELETE |
{DEL} |
| “ |
" |
| F5 |
{F5} |
| & |
& |
| F10 |
{F10} |
| TAB |
{TAB} |
| < |
< |
| > |
> |
| Пробел |
|
| F8 |
{F8} |
| F12 |
{F12} |
| F9 |
{F9} |
| ALT+TAB |
{ALT+TAB} |
| END |
{END} |
| F4 |
{F4} |
| F2 |
{F2} |
| CTRL |
{CTRL} |
| F6 |
{F6} |
| Right |
→ |
| Up |
↑ |
| F1 |
{F1} |
| Left |
← |
| PageDown |
{PageDown} |
| Insert |
{Insert} |
| Win |
{Win} |
| NumLock |
{NumLock} |
| F11 |
{F11} |
| F3 |
{F3} |
| HOME |
{HOME} |
| ENTER |
{ENTER} |
| ALT+F4 |
{ALT+F4} |
| F7 |
{F7} |
| Другая клавиша |
Символ в верхнем или нижнем регистре в зависимости от положений клавиш CapsLock и Shift |
С заданной периодичностью собранный лог отправляется на сервер. Если передача оказалась неудачной, лог сохраняется в файл %TEMP%\\log.tmp в формате:

Когда сработает таймер, файл будет передан на сервер.
ScreenLogger
С заданной периодичностью ВПО создает снимок экрана в формате Jpeg со значением Quality равным 50 и сохраняет его в файл %APPDATA %\\<Произвольная последовательность из 10 символов>.jpg. После передачи файл удаляется.
ClipboardLogger
Если установлен соответствующий флаг, в перехваченном тексте производятся замены согласно приведенной таблице.

После этого текст вставляется в лог:

PasswordStealer
ВПО может производить выгрузку паролей из следующих приложений:
|
Браузеры |
Почтовые клиенты |
FTP клиенты |
| Chrome |
Outlook |
FileZilla |
| Firefox |
Thunderbird |
WS_FTP |
| IE/Edge |
Foxmail |
WinSCP |
| Safari |
Opera Mail |
CoreFTP |
| Opera Browser |
IncrediMail |
FTP Navigator |
| Yandex |
Pocomail |
FlashFXP |
| Comodo |
Eudora |
SmartFTP |
| ChromePlus |
TheBat |
FTPCommander |
| Chromium |
Postbox |
|
| Torch |
ClawsMail |
|
| 7Star |
||
| Amigo |
||
| BraveSoftware |
Jabber клиенты |
VPN клиенты |
| CentBrowser |
Psi/Psi+ |
Open VPN |
| Chedot |
||
| CocCoc |
||
| Elements Browser |
Менеджеры загрузки |
|
| Epic Privacy Browser |
Internet Download Manager |
|
| Kometa |
JDownloader |
|
| Orbitum |
||
| Sputnik |
||
| uCozMedia |
||
| Vivaldi |
||
| SeaMonkey |
||
| Flock Browser |
||
| UC Browser |
||
| BlackHawk |
||
| CyberFox |
||
| K-Meleon |
||
| IceCat |
||
| IceDragon |
||
| PaleMoon |
||
| WaterFox |
||
| Falkon Browser |
Противодействие динамическому анализу
- Использование функции Sleep. Позволяет обойти по таймауту некоторые песочницы
- Уничтожение потока Zone.Identifier. Позволяет скрыть факт загрузки файла из интернета
- В параметре %filter_list% задается список процессов, которые ВПО будет завершать с интервалом в одну секунду
- Отключение UAС
- Отключение менеджера задач
- Отключение CMD
- Отключение окна «Выполнить»
- Отключение панели управления
- Отключение инструмента RegEdit
- Отключение точек восстановления системы
- Отключение контекстного меню в проводнике
- Отключение MSCONFIG
- Обход UAC:
Неактивные возможности основного модуля
В ходе анализа основного модуля были выявлены функции, отвечающие за распространение по сети и отслеживание положения мыши.
Worm
В отдельном потоке отслеживаются события подключения съемных носителей. При подключении в корень файловой системы копируется ВПО с именем scr.exe, после чего выполняется поиск файлов с расширением lnk. Команда каждого lnk меняется на cmd.exe /c start scr.exe&start <оригинальная команда>& exit.
Каждой директории в корне носителя дается атрибут «Скрытый» и создается файл с расширением lnk с именем скрытой директории и командой cmd.exe /c start scr.exe&explorer /root,\"%CD%<ИМЯ ДИРЕКТОРИИ>\" & exit.
MouseTracker
Метод выполнения перехвата аналогичен используемому для клавиатуры. Этот функционал пока находится в разработке.
Файловая активность
|
Путь |
Описание |
| %Temp%\temp.tmp |
Содержит счетчик попыток обхода UAC |
| %startupfolder%\%insfolder%\%insname% |
Путь для закрепления в системе ВПО |
| %Temp%\tmpG\{Текущее время в милесекундах}.tmp |
Путь для бэкапа основного модуля |
| %Temp%\log.tmp |
Лог-файл |
| %AppData%\{Произвольная последовательность из 10 симоволов}.jpeg |
Скриншоты |
| C:\Users\Public\{Произвольная последовательность из 10 симоволов}.vbs |
Путь к vbs файлу, который загрузчик может использовать для закрпления в системе |
| %Temp%\{Произвольное имя папки}\{Имя файла} |
Путь, используемый загрузчиком для закрепления в системе |
Профиль злоумышленника
Благодаря «зашитым» данным аутентификации нам удалось получить доступ к командному центру.

Это позволило нам выявить конечную почту злоумышленников:
junaid[.]in***@gmail[.]com.
Доменное имя командного центра зарегистрировано на почту sg***@gmail[.]com.
Заключение
В ходе детального анализа ВПО, использовавшегося в атаке, нам удалось установить его функциональные возможности и получить наиболее полный список индикаторов компрометации, актуальных для данного кейса. Понимание механизмов сетевого взаимодействия малвари позволило дать рекомендации по корректировке работы средств защиты информации, а также написать устойчивые IDS-правила.
Основная опасность AgentTesla как DataStealer в том, что для выполнения своих задач ему не требуется производить закрепление в системе или ожидать получения управляющей команды. Попадая на машину, он немедленно начинает сбор приватной информации и передает ее на CnC. Такое агрессивное поведение в некотором роде схоже с поведением шифровальщиков, с той лишь разницей, что вторым не требуется даже наличие сетевого соединения. При столкновении с этим семейством после очистки зараженной системы от самого ВПО следует в обязательном порядке произвести смену всех паролей, которые могли хотя бы теоретически оказаться сохраненными в одном из перечисленных выше приложений.
Забегая вперед, скажем, что злоумышленники, рассылающие AgentTesla, очень часто меняют первоначальный загрузчик. Это позволяет в момент атаки оставаться незамеченными для статических сканеров и эвристических анализаторов. А склонность этого семейства сразу же начинать свою деятельность делает бесполезными системные мониторы. Наилучший способ борьбы с AgentTesla — предварительный анализ в песочнице.
В третьей статье этого цикла мы рассмотрим другие загрузчики, используемые AgentTesla, а также изучим процесс их полуавтоматической распаковки. Не пропустите!
Hash
|
SHA1 |
| A8C2765B3D655BA23886D663D22BDD8EF6E8E894 |
| 8010CC2AF398F9F951555F7D481CE13DF60BBECF |
| 79B445DE923C92BF378B19D12A309C0E9C5851BF |
| 15839B7AB0417FA35F2858722F0BD47BDF840D62 |
| 1C981EF3EEA8548A30E8D7BF8D0D61F9224288DD |
C&C
|
URL |
| sina-c0m[.]icu |
| smtp[.]sina-c0m[.]icu |
RegKey
|
Registry |
| HKCU\Software\Microsoft\Windows\CurrentVersion\Run\{Имя скрипта} |
| HKCU\Software\Microsoft\Windows\CurrentVersion\Run\%insregname% |
| HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run\%insregname% |
Mutex
Индикаторы отсутствуют.
Files
|
Файловая активность |
| %Temp%\temp.tmp |
| %startupfolder%\%insfolder%\%insname% |
| %Temp%\tmpG\{Текущее время в милесекундах}.tmp |
| %Temp%\log.tmp |
| %AppData%\{Произвольная последовательность из 10 симоволов}.jpeg |
| C:\Users\Public\{Произвольная последовательность из 10 симоволов}.vbs |
| %Temp%\{Произвольное имя папки}\{Имя файла} |
Samples Info
|
Name |
Unknown |
|
MD5 |
F7722DD8660B261EA13B710062B59C43 |
|
SHA1 |
15839B7AB0417FA35F2858722F0BD47BDF840D62 |
|
SHA256 |
41DC0D5459F25E2FDCF8797948A7B315D3CB0753 98D808D1772CACCC726AF6E9 |
| Type |
PE (.NET) |
| Size |
327680 |
|
OrginalName |
AZZRIDKGGSLTYFUBCCRRCUMRKTOXFVPDKGAGPUZI_20190701133545943.exe |
|
DateStamp |
01.07.2019 |
| Compiler |
VB.NET |
| Name |
IELibrary.dll |
| MD5 |
BFB160A89F4A607A60464631ED3ED9FD |
| SHA1 |
1C981EF3EEA8548A30E8D7BF8D0D61F9224288DD |
| SHA256 |
D55800A825792F55999ABDAD199DFA54F3184417 215A298910F2C12CD9CC31EE |
| Type |
PE (.NET DLL) |
| Size |
16896 |
|
OrginalName |
IELibrary.dll |
|
DateStamp |
11.10.2016 |
| Compiler |
Microsoft Linker(48.0*) |