Цією статтею ми завершуємо цикл публікацій, присвячених аналізу шкідливого програмного забезпечення. У
Сьогодні Ілля Померанцев, фахівець із аналізу шкідливого коду CERT Group-IB, розповість про перший етап аналізу ВПО — напівавтоматичне розпакування семплів AgentTesla на прикладі трьох міні-кейсів із практики фахівців CERT Group-IB.
Зазвичай перша стадія під час аналізу ВПО — зняття захисту як пакера, криптора, протектора чи завантажувача. У більшості випадків ця проблема вирішується запуском ВПО та виконанням дампа, проте існують ситуації, коли цей метод не підходить. Наприклад, якщо ВПО є шифрувальником, якщо воно захищає свої регіони пам'яті від дампа, якщо в коді є механізми виявлення віртуальної машини або якщо відразу після старту ВПО виконує перезавантаження. У таких випадках застосовується так зване «напівавтоматичне» розпакування, тобто дослідник повністю контролює процес і може будь-якої миті втрутитися. Розглянемо цю процедуру з прикладу трьох семплів сімейства AgentTesla. Це відносно нешкідливий ВПЗ, якщо вимкнути йому доступ до мережі.
Семпл №1
Вихідний файл – це документ MS Word, який експлуатує вразливість CVE-2017-11882.
В результаті відбувається завантаження та запуск пейлоаду.
Аналіз дерева процесів та поведінкових маркерів показує інжект у процес RegAsm.exe.
Є характерні для AgentTesla поведінкові маркери.
Завантажений семпл - це виконуваний . NET-файл, захищений протектором Реактор .NET.
Відкриємо його в утиліті dnSpy x86 і перейдемо до точки входу.
Перейшовши у функцію DateTimeOffset, ми виявимо код ініціалізації нового . NET-модуля. Поставимо точка зупинки на рядку, що нас цікавить, і запустимо файл.
В одному з повернутих буферів можна побачити MZ-сигнатуру (0x4D 0x5A). Зберігаємо його.
Сдампленный файл — це динамічна бібліотека, яка є лоадером, тобто. витягує із секції ресурсів корисне навантаження і здійснює її запуск.
При цьому самі потрібні ресурси в дампі відсутні. Вони перебувають у батьківському семпле.
Утиліта dnSpy має дві вкрай корисні функціональні можливості, які допоможуть нам досить швидко створити «франкенштейна» з двох пов'язаних файлів.
- Перша дозволяє «вклеїти» у батьківський семпл динамічну бібліотеку.
- Друга – переписати код функції біля точки входу, щоб викликати потрібний метод вставленої динамічної бібліотеки.
Зберігаємо нашого "франкенштейна", ставимо точка зупинки на рядку, що повертає буфер з дешифрованими ресурсами, і робимо дамп за аналогією з попереднім етапом.
Другий дамп - це написаний на VB.NET виконуваний файл, який захищений знайомим нам протектором ConfuserEx.
Після зняття протектора використовуємо раніше написані YARA-правила і переконаємося в тому, що розпаковане ВПО — дійсно AgentTesla.
Семпл №2
Вихідний файл – документ MS Excel. До виконання шкідливого коду наводить вбудований макрос.
В результаті запускається PowerShell скрипт.
Скрипт дешифрує код C# і передає йому управління. Сам код є завантажувачем, що також видно зі звіту пісочниці.
Корисне навантаження є виконуваним . NET-Файл.
Відкривши файл у dnSpy x86, можна побачити, що він обфускований. Знімаємо обфускацію утилітою de4dot та повертаємося до аналізу.
У ході дослідження коду можна виявити таку функцію:
В очі кидаються закодовані рядки Точка входу и волати. Ставимо точка зупинки на перший рядок, запускаємо та зберігаємо значення буфера байт_0.
Дамп знову є додатком на . NET та захищений ConfuserEx.
Знімаємо обфускацію за допомогою de4dot і завантажуємо в dnSpy. З опису файлу розуміємо, що зіткнулися з CyaX-Sharp loader.
Цей завантажувач має великий функціонал для протидії аналізу.
Цей функціонал включає в себе обхід вбудованих систем захисту Windows, відключення Windows Defender, а також механізми виявлення пісочниць і віртуальних машин. Є можливість підвантажувати корисне навантаження з мережі або зберігати їх у секції ресурсів. Запуск виконується через інжект у власний процес, дублікат власного процесу або ж у процеси MSBuild.exe, vbc.exe и RegSvcs.exe залежно від вибраного зловмисником параметра.
Однак для нас вони менш суттєві, ніж AntiDump-функція, яку додає ConfuserEx. Її вихідний код можна знайти на
Для відключення захисту скористаємося можливістю dnSpy, яка дозволяє редагувати IL-код.
Зберігаємось і ставимо точка зупинки на рядок виклику функції дешифрування корисного навантаження. Вона знаходиться у конструкторі основного класу.
Запускаємо та дампимо корисне навантаження. Використовуючи раніше написані YARA-правила, переконуємось, що перед нами AgentTesla.
Семпл №3
Вихідний файл - це виконуваний VB Native PE32-Файл.
Аналіз ентропії свідчить про наявність великого фрагмента зашифрованих даних.
При аналізі форми додатку VB Декомпілятор можна помітити дивне піксельне тло.
Графік ентропії bmp-Малюнки ідентичний графіку ентропії вихідного файлу, а розмір становить 85% від розміру файлу.
Загальний вигляд зображення свідчить про використання стеганографії.
Звернімо увагу на вид деревини процесів, а також на наявність маркера інжекта.
Це говорить про виконання розпакування. Для завантажувачів на Visual Basic (вони ж VBKrypt або VBInjector) характерне використання шелл-код для ініціалізації корисного навантаження, а також для виконання самого інжекту.
Аналіз у VB Декомпілятор показав наявність події Навантаження у форми FegatassocAirballoon2.
Перейдемо до IDA pro за вказаною адресою та вивчимо функцію. Код сильно обфузований. Фрагмент, який нас цікавить, наведено нижче.
Тут здійснюється сканування адресного простору процесу у пошуках сигнатури. Такий підхід вкрай сумнівний.
По-перше, адреса початку сканування 0x400100. Це значення статично і коригується при зміщенні бази. В ідеальних тепличних умовах він буде вказувати на кінець PE-заголовка файлу, що виконується. Проте база не статична, її значення може змінюватися, а пошук реальної адреси сигнатури хоч і не викличе переповнення змінної, але може зайняти дуже багато часу.
По-друге, значення сигнатури iWGK. Думаю, очевидно, що 4 байти надто мало, щоб гарантувати унікальність. А якщо зважати на перший пункт, ймовірність помилитися досить висока.
Насправді потрібний фрагмент прикріплений до кінця знайденої раніше bmp-картинки зі зміщення 0xA1D0D.
виконання Shell -код здійснюється у дві стадії. Перша робить дешифрування основного тіла. У цьому ключ визначається перебором.
Сдампім дешифрований Shell -код і подивимося на рядки.
По-перше, тепер ми знаємо функцію створення дочірнього процесу: CreateProcessInternalW.
По-друге, нам став відомим механізм закріплення в системі.
Повернемося до початкового процесу. Поставимо точка зупинки на CreateProcessInternalW та продовжимо виконання. Далі спостерігаємо зв'язку NtGetContextThread/NtSetContextThreadяка змінює адресу початку виконання на адресу ShellCode.
Підключаємось до створеного процесу відладчиком, активуємо подію Suspend on libraryu load/unload, відновлюємо процес і чекаємо навантаження . NET-бібліотек.
Далі за допомогою ProcessHucker дампім регіони, що містять у розпакованому вигляді . NET-додаток.
Зупиняємо всі процеси і видаляємо копію ВПО, що закріпилася в системі.
Сдамплений файл захищений протектором Реактор .NET, який легко знімається за допомогою утиліти de4dot.
Скориставшись раніше написаними YARA-правилами, переконуємося, що перед нами AgentTesla.
Підведемо підсумок
Отже, ми детально продемонстрували процес напівавтоматичного розпакування семплів на прикладі трьох міні-кейсів, а також провели аналіз шкідливого програмного забезпечення на основі повноцінного кейсу, з'ясувавши, що досліджуваний зразок - це AgentTesla, встановивши його функціональні можливості та повний список індикаторів компрометації.
Аналіз шкідливого об'єкта, який ми провели, потребує багато часу та зусиль, і цю роботу має виконувати спеціальний співробітник у компанії, проте не всі компанії готові тримати у штаті аналітика.
Одна з послуг, яку надає Лабораторія комп'ютерної криміналістики та аналізу шкідливого коду Group-IB, — реагування на кіберінциденти. А щоб замовники не витрачали час на погодження документів та обговорення в розпал кібератаки, Group-IB запустила Фіксатор реагування на інциденти, послугу з реагування на інциденти за попередньою підпискою, що включає також етап аналізу шкідливого коду Більш детальну інформацію про це можна знайти
Якщо ви хочете самі ще раз вивчити, як проводиться розпакування семплів AgentTesla, та побачити, як це робить спеціаліст CERT Group-IB, можете завантажити запис вебінару на цю тему
Джерело: habr.com