АНАЛИЗ СЕМЕЙСТВА ТРОЯНОВ AGENT TESLA
Общая информация
Agent Tesla – это шпионское ПО, способное похищать личные данные из веб-браузеров, почтовых клиентов и FTP-серверов. Зловред также может собирать скриншоты, видео и захватывать данные из буфера обмена.
Распространение зловреда производится через-спам рассылку с использованием социальной инженерии, злоумышленники уделяют большое внимание к деталям, снабжая свои письма реальными логотипами и легитимно выглядящими подписями. Чаще всего рассылку производят от имени-отправителя резидентов англоговорящих стран.
Для большей убедительности, меняются имена компаний от которых ведется рассылка и текст, отличительной чертой, данной спам-рассылки от других, является то, что авторы рассылки уделили достаточно много внимания подготовке.
Рассуждая с позиции получателя, единственным и довольно заметным признаком того, что письмо отправлено от лица злоумышленника, является адрес отправителя, домен чаще всего не совпадает с названием фирмы, как и имя отправителя, не сильно похоже на имя в подписи, что чаще всего не характерно легитимным деловым письмам.
В качестве наживок используются различные психологические уловки, как например запрос у сотрудников различных организаций цен на товары, перечисленные в архиве, или, например попытка узнать есть ли перечисленный товар в наличии. Цель одна - заставить жертву открыть / запустить вредоносный макрос из документа, приложенного в архиве, и скачать полезную нагрузку с C2-сервера.
Анализ в системе Athena
Статический анализ

Во внешнем аналитическом ресурсе «VitusTotal», в файле было обнаружено вредоносное содержимое несколькими антивирусными движками.

Во вкладке «Индикаторы» сработал индикатор «Цифровая подпись: Несовпадение контрольной суммы PE файла».

Во вкладке «Источники вердикта» строится графическая карта с источниками и их вердиктами, а также общим вердиктом по исследуемому файлу.

Динамический анализ
Динамический анализ в системе Афина, выявил множество индикаторов. Среди них, отмечается событие в виде добавление пути к копии вредоносного семпла в исключения Windows Defender, что само по себе является точным признаком вредоносной активности, ведь обычные программы не станут без разрешения пользователя, добавлять свой путь в исключения EDR.
Вредоносное программное обеспечение считывает значения реестра для клиента удаленного подключения WinSCP, на что отреагировал индикатор «Исследование клиентов удаленного подключения». В том числе программа считала файл истории подключений FTP-клиента – FileZilla, об этом информирует индикатор «Кража пользовательских данных из файлов FTP-клиента».
Дальше, ПО начало поиск конфигурационных файлов пользователя, из браузеров: Chrome, Comodo, Flock. Индикатор «Кража пользовательских данных из файлов почтового приложения» отреагировал на попытку ВПО считать информацию из реестра, хранящую в себе адрес электронной почты Outlook, и считало конфигурационные файлы почтового клиента Thunderbird.
О том, что ПО пыталось исследовать сторонние клиенты удаленных подключений, а также браузеров свидетельствуют индикатор «Исследование файлов других приложений». В заключении, ПО сразу же добавило свою исполняемо копию в автозагрузки.

Среди системных программ, выявленных в процессе динамического исследования, были выявлены такие как: powershell.exe, conhost.exe, schtasks.exe:

В блоке «Дампы» видно, что ПО во время работы создало свою копию, создало лог и оставила в системе временные файлы. В том числе, были собраны дампы процессов приложения, один из который в статическом исследовании был помечен, как «Подозрительный».

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

В статике, вредоносный вердикт, был вынесен за счет сигнатурного анализа с использованием антивирусов, внешнего аналитического ресурса VirusTotal, а также подозрительный вердикт вынесла «Система» из-за несоответствия вердиктов модели машинного обучения и антивирусных движков.
Динамика установила вредоносный вердикт, за счет событий (кража пользовательских данных, управление Defender), и дампов файлов/процессов.


Исследование файла
Первичный осмотр
Для удобства извлечения динамически генерируемых модулей, и других исполняемых PE, используется онлайн сервис www.unpac.me и analyze.intezer.com. На ресурсе www.unpac.me, в процессе динамической распаковки, удалось извлечь четыре PE, среди которых три DLL и один EXE, не считая собственной копии вредоноса, которую он помещает по пути C:\Users\AppData\Roaming\lluLbfyDcd.exe:

Если прогнать через www.unpac.me файл bddff1ee-8667-474d-b470-167aea1af3de.exe мы сможем увидеть учетную запись от SMTP-сервера злоумышленника:

На почтовом ящике, судя по частоте отправки некоторых писем, можно найти реальные данные злоумышленника:

Так выглядят учётные данные на почтовом сервере злоумышленника, которые зловред отправляет ему, используя доступ к его почтовому ящику, из всех входящих сообщений 1/3 являются учетными данными присланные от вредоносного ПО для доступа к чужим учетным данным:

Можно найти архивы с cookie-файлами от браузеров Firefox и Chrome которые зловред украла с другого компьютера:


На analyze.intezer.com можно увидеть, куда вредоносное ПО делает запросы.

Статический анализ и отладка
В метаданных, можно увидеть оригинальное название файла как EEna.exe. Detect It Easy показывает, что вредоносное ПО разработано, с использованием платформы .NET на языке C#, является 32-х разрядной, весит относительно немного и обфусцированна/упакована неизвестным протектором:

Среди ресурсов было найдено два изображения, PNG и BMP. Зловред их использует для распаковки подгружаемых DLL и EXE.

При просмотре строк в исходнике, можно найти имя компьютера, возможно принадлежащего автору сборки данного вредоносного ПО - DESKTOP-G2JV1IG.

Также была найдена строка, с использованием C#-класса Bitmap, используемая для работы с полученными изображениями, извлечения DLL и EXE.

Открыв бинарный файл CLI вредоноса, видно, что в точке входа инициализируется объект класса AboutBox, и для него запускается цикл обработки сообщений приложения в текущем потоке.
Отлаживая AboutBox1, наблюдается подозрительный цикл c инициализацией объекта Bitmap и массив «b» размером 26624 байта, сохранив дамп данного массива в “Dump_Malware1.txt” увидим, что на самом деле, данный набор байтов представляет из себя DLL с именем Aads.dll, написанную на C# с использованием .NET.
Ниже можно увидеть, как вызывается метод InvokeMember с параметром Load, для динамической загрузки извлеченной DLL.

Далее видно, что полученное изображение Aeeee.png тот же файл что мы экстрагировали первоначально, при помощи Detect It Easy (справа), оба изображения имеют одинаковый размер по 106712 байт.

Опустившись чуть ниже, видно, что при помощи метода GetType инициализируется доступ к некоторому типу Aads.Sorts.HeapSort:

В метод «Heapsort» класса «Aads.Sorts» передается несколько аргументов, среди которых массив с именем array с тремя другими массивами строк, это видно на строке с выполнением CreateInstance:

Перейдя на отладку Aads.dll можно заметить, что в самом начале выполняется метод Dodge в который как раз и передаются три аргумента, в нем же видно, как выполняется sleep на 34.6 секунд, после чего происходит распаковка и загрузка ReactionDiffusion и инициализация типа ReactionVessel, итоговым результатом данных действий, является распакованный динамический модуль Tyrone.dll, код которого сохраняется в динамическом 8-ми битном массиве array:

В методе LowestBreakIteration, видно, что подгружаются данные из секции ресурсов Interface.Properties.Resources.


Так в декомпиляторе dnSpy выглядит изображение, из которого будет извлечен динамический модуль Tyrone.dll:


Извлеченные бинарные данные являются очередной динамической 32-х разрядной библиотекой, в метаданных видно, что авторские права пренадлежат некой компании Zephyr LTD, что скорее всего является дезинформацией, оригинальное имя библиотеки отображается как Tyrone.dll:


Далее поток выполняет код из библиотеки Aads.dll:

Инициализируется объект типа Assembly, с передачей параметров из-за обфускации кода, объект, принадлежит Tyrone.dll:

Метод #co принимает объект #E, на основе класса Assembly, для загрузки динамического кода, и доступа к необходимому типу:

Здесь можно увидеть обфусцированный код, непонятные названия методов, специально усложняющих процесс анализа, но мы продолжим отладку, перейдем в класс sPD5DWZ6OayElkPNA8:

Далее определяется указатель на метод 77pv5SbRQ и переход в область этой функции:


Далее в папку Appdata/Roaming загружается тот же вредоносный .exe:

В метаданных, оригинальное имя файла lluLbfyDcd.exe отображается как EEna.exe. В процессе отладки попадаем в метод, который загружает обфусцированный xml-документ:

Далее инициализируется ряд параметров для создания задачи в планировщике задач, вредоносного процесса lluLbfyDcd.exe, путь до исполняемого PE прописывается в <Exec><Command>.
AllowStartOnDemand – указывает что задачу можно запустить с помощью команды Выполнить или контекстного меню.
Enabled - указывает, что задача включена. Задача может быть выполнена только в том случае, если этот параметр имеет значение «True».
Hidden - указывает, что задача не будет отображаться в пользовательском интерфейсе по умолчанию.
RunOnlyIfIdle - указывает, что задача выполняется только в том случае, если компьютер находится в состоянии простоя.
WakeToRun - указывает, что планировщик задач разбудит компьютер при выполнении задачи.
ExecutionTimeLimit - количество времени, затраченное на выполнение задачи (в моем случае PT0S, что означает ноль секунд, т.е. сразу).
Priority - указывает уровень приоритета для задачи.
Также видно, как создается tmpE2EC.tmp в папку Local\Temp, для записи в неё данных, в виде пути к расположению файла tmpE2EC.tmp и xml-данные пользователя c параметрами для запуска lluLbfyDcd.exe:

Происходит формирование командной строки для вызова утилиты schtasks.exe с передачей аргументов:

Команда целиком выглядит следующим образом:

При помощи schtasks создается планирование новой задачи с передачей имени задачи и путь до xml-данных. После инициализации объекта с информацией для запуска задачи, происходит её запуск, с передачей аргумента Process.WindowStyle.Hidden указывая на то, что процесс нужно запустить со скрытым окном:

В планировщике задач, в Updates, видно новую задачу lluLbfyDcd готовую к запуску:

Создается экземпляр процесса lluLbfyDcd и удаляет tmpE2EC.tmp c XML-данными для запуска процесса:

Далее выполняются обфусцированные методы, и возвращается массив размером 172 032 байта (165 Кб на диске):

Данный массив представляет собой бинарный файл CLI-PE, он же bddff1ee-8667-474d-b470-167aea1af3de.exe, полученный в самом начале на веб-ресурсе www.unpack.me:

Извлекается хеш-таблица пространства имен для работы с HTTP-запросами:

Данные массива деобфусцируются в бинарный PE-файл, с использованием ключа stoiqWvsa, который хранится в массиве array:

Дамп массива, открытый в Detect It Easy, показывает, что он является исполняемым PE созданным при помощи .NET и C#:

Далее вызывается метод GetRuntimeDirectory и возвращается директория в которой установлен CLR, после чего считываются данные из GetRuntimeDirectory() + Config\machine.config:

Рассмотрим работу бинарного файл CLI c оригинальным именем bddff1ee-8667-474d-b470-167aea1af3de.exe, выполняющего функции передачи данных пользователя. В процессе отладки, видно, как вредоносное ПО извлекает системную информацию:

Для GET-запроса по HTTP на api.ipify.org используется класс HttpWebRequest:

Делается это для того, чтобы определить ip-адрес зараженной машины в глобальной сети. Среди сформированных полей HTTP-заголовка, можно найти такие значения как: время ожидания (timeout) в миллисекундах, поле if-modified-since, тип запроса (GET), юзерагент (UserAgent), длину контента и ряд других полей, сформированных для осуществления HTTP-запроса на этот домен:

Чтобы в процессе отслеживать то, как будет вести себя зловред, самостоятельно был изменен возвращаемый ответ от inetsim, в итоге зловред получает подменный ip-адрес (100.100.100.100).

Создается таймер для повтора отправки запроса:

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

Используется вызов Clipboard.GetText для копирования содержимого из буфера обмена. Ниже демонстрируется текст, который был самостоятельно специально скопирован в буфер обмена, и вызов данной функции:

Обрабатывает символы для отправки содержимого в html:

Далее формируется список дерикторий для проверки 29-ти источников на компьютере жертвы:


С помощью ПО Wireshark видно как осуществляются DNS запросы на api.ipify.org и checkappexec.microsoft.com:

Информация о компрометации
Файл | Хеш |
---|---|
lluLbfyDcd.exe | MD5 b5a21bd46973e36c0fd8e0187547d5e6 SHA-256 8a8b2c88b95ccfad7225240dda7ad984f068987500ccfe2cadcab357f0fe46ab |
bddff1ee-8667-474d-b470-167aea1af3de.exe | MD5 594173a93a04d2b9ed53ee505a9d418b SHA-256 e6d5de26b60438f6286331b0fd3ff64b9368048d144255db589736da99de7523 |
Aads.dll | MD5 594173a93a04d2b9ed53ee505a9d418b SHA-256 c1796a8cf6be4b31342d3ba730ee278132be920a0b0946531edfd5d3ab2415ef |
ReactionDiffusion.dll | MD5 a87024a466e052bff09a170bb8c6f374f6c84c32 SHA-256 53f2ad060cf771aa4f197df5789cee95959480c244a0b392bb450c8ce7311d77 |
Tyrone.dll | MD5 ad5ccc4b639ad2601d0635985a88b36b SHA-256 59e50ff8ad93314988ac9c6fa876d7421fee8ecea76a1803ef5444b5bca496b8 |
Тип | Адрес |
---|---|
Domain | api.ipify.org |
IP | 104.237.62.211 |