Как анализировать вредоносное ПО с помощью x64dbg
Это четвертая и заключительная статья в серии публикаций, посвященных x64dbg. В этой статье мы воспользуемся полученными знаниями, чтобы продемонстрировать некоторые методы, которые можно использовать при реверс-инжиниринге вредоносного ПО.
Часть 4. Анализ вредоносного ПО с помощью x64dbg (мы здесь)
Примеры использования x64dbg
Реверс-инжиниринг вредоносного ПО с использованием такого инструмента, как x64dbg, является идеальным вариантом, если вы хотите понять и изучить конкретные функции образца вредоносной программы. Во время инцидента кибербезопасности план реагирования компании может требовать анализа вредоносного ПО для выявления некоторых ключевых IOC.
Это можно сделать, запустив вредоносное ПО на виртуальной машине и используя несколько инструментов анализа вредоносных программ. Определенные ключевые индикаторы, такие как IP-адреса C2, можно идентифицировать быстро, в то время как вредоносное ПО копирует себя на диск, чтобы спрятаться.
x64dbg не используется для этого первоначального скрининга вредоносного ПО — вместо этого он помогает глубоко изучить то, как действует вредоносное ПО и как ведет себя на скомпрометированном устройстве. Запуск вредоносной программы на виртуальной машине может показать, что она создает для себя, казалось бы, случайное имя, после чего x64dbg можно использовать для определения принципов генерирования подобных имен файлов вредоносной програмредоносного ПО с помощью x64dbg
Пошаговый анализ вредоносного ПО с помощью x64dbg
Мы будем использовать образец, который анализировали в предыдущей статье.
Прежде чем загружать вредоносное ПО в x64dbg, нам нужно внести некоторые изменения в адрес вредоносного ПО на нашей виртуальной машине. При анализе вредоносной программы в x64dbg мы переименовываем двоичный файл и копируем его в то место, которое вредоносная программа создала в рамках нашего поведенческого анализа. Репликация такого поведения дает дополнительную уверенность в том, что мы увидим истинное поведение вредоносной программы в отладчике.
При анализе этого образца было обнаружено, что вредоносное ПО выполняет некоторые проверки, чтобы избежать анализа с помощью таких инструментов, как x64dbg — это делается посредством проверки наличия аргумента командной строки, который можно определить путем детонации вредоносного ПО и мониторинга активности с помощью ProcMon.
На изображении выше мы видим, что вредоносная программа переименовала себя в loadatangent.exe и скопировала себя в следующее место:
'C:\Users\Admin\AppData\Local\loadatangent\loadatangent.exe'
Она также добавила к процессу аргумент –82621c98.
Чтобы воспроизвести поведение вредоносного ПО, мы сначала переименовываем распакованное вредоносное ПО в loadatangent.exe и перемещаем его в это место на диске. Теперь можно начать загрузку файла в x64dbg, перетащив файл на значок x64dbg на рабочем столе.
После загрузки x64dbg добавляем в командную строку дополнительный аргумент. Для этого выберем «Файл», а затем — «Изменить командную строку».
Здесь можно добавить аргумент, который был идентифицирован с помощью ProcMon.
При анализе распакованного образца сначала проверяем таблицу адресов импорта (IAT) вредоносного ПО. Это позволяет проверять любые импортированные функции, на которых можно сосредоточиться в x64dbg.
Для этого нажмите правой кнопкой мыши на код сборки и выберите «Поиск», «Текущий модуль», а затем — «Межмодульные вызовы».
Однако первоначально имеется только одна запись для IsProcessorFeaturePresent:
Это связано с тем, что имена API Windows, которые будут импортированы вредоносной программой, хешируются. Разработчики вредоносных программ используют такую обфускацию IAT для усложнения анализа двоичного файла.
На изображении выше при наведении мыши на первую функцию появляется всплывающее окно предварительного просмотра этой функции. Из предыдущей статьи можно сделать вывод, что хешированные значения перемещаются в большое количество переменных, содержащих ebp-* .
Из-за большого количества объявляемых переменных и объема пространства, выделяемого в стеке инструкцией «sub esp, 630», вполне вероятно, что эти значения являются обфусцированными именами API Windows.
Пропустив эти две функции, мы увидим, что некоторые имена функций изменились на допустимые имена API Windows.
Имена функций в x64dbg до деобфускации:
Имена функций в x64dbg после деобфускации:
При поиске межмодульных вызовов теперь отображается импортированная таблица адресов.
Теперь мы можем идентифицировать интересующие функции и начать устанавливать точки останова в API, которые могут дать нам больше информации о том, что делает вредоносная программа.
Установка точек останова
Теперь, после заполнения IAT, мы хотим начать изучать функции, импортированные вредоносным ПО, чтобы узнать, используются ли они, и если да, то исследовать, что они делают. IAT некоторых импортированных функций довольно понятно благодаря использованным способам наименования, например CreateDirectoryW. Однако чтобы узнать, где эта функция используется в x64dbg, нам нужно запустить вредоносную программу и установить точку останова в API, чтобы она остановилась перед выполнением функции.
Есть несколько разных способов установки точек останова. В сформированном ранее списке вы можете нажать правой кнопкой мыши на функцию, которую хотите проанализировать, и выбрать «Переключить точку останова». На изображении ниже видно, что точка останова установлена на CreateMutexW.
Затем адрес этой функции становится красным, указывая, что точка теперь установлена.
Точки останова также можно установить из командной строки в нижней строке x64dbg. Это делается путем ввода синтаксиса «bp», за которым следует имя API Windows, на котором вы хотите установить точку останова. Обратите внимание, что имена API чувствительны к регистру.
Нажмите Enter, чтобы установить точку останова.
Появится обновленное сообщение, подтверждающее установку точки останова.
Другой способ установить точку останова — воспользоваться сочетанием клавиш CTRL + G и снова ввести имя API Windows. Если x64dbg обнаружит API во вредоносной программе, он выведет сообщение «Правильное выражение»:
Нажатие ОК снова откроет сообщение в нижней части x64dbg, подтверждающее, что точка останова установлена. Выбор вкладки «Точки останова» подтвердит установку точек останова:
При достижении точки останова вы можете оказаться в DLL, в которой находится этот API. Чтобы перейти к коду разработчиков вредоносной программы, выберите «Отладка», затем — «Выполнить до возврата» или «Выполнить до кода пользователя».
Анализ импортированных функций
Когда вы анализируете несколько образцов вредоносного ПО, вы начинаете распознавать интересующие функции, используемые вредоносным ПО. Функция CreateMutexW используется для создания так называемого «мутанта» или «мьютекса». Мьютексы часто применяются вредоносными программами, чтобы указать на заражение машины. Если машина заражена повторно, вредоносная программа может запустить проверку на наличие мьютекса, и если будет обнаружен мьютекс, связанный с данным семейством вредоносных программ, она не будет пробовать повторно заразить устройство.
Нажатие кнопки «Выполнить» в x64dbg теперь запускает вредоносное ПО до достижения одной из наших точек останова и приостановки работы вредоносного ПО. Первая точка останова относится к CreateMutexW.
Черный прямоугольник слева от красного адреса соответствует адресу точки останова при вызове CreateMutexW. На изображении выше мы видим, что перед выполнением этого вызова имеется три инструкции push — это данные, которые будут добавляться в стэк и которые будут использоваться функцией. Воспользовавшись плагином x64dbg «xAnalyzer», мы можем увидеть, с чем связаны эти значения.
Документация Microsoft очень полезна, поскольку в ней описано, что делает функция, используемые ей параметры, а также возвращаемые данные при успешном запуске функции.
Изучив документацию на CreateMutexW, мы можем определить интересующий параметр.
Ниже показан снимок экрана с информацией о параметре lpname, используемом CreateMutexW.
Из этого URL-адреса мы можем сделать вывод, что поле lpname, которое было помещено в стек, является именем, используемым вредоносной программой для создания мьютекса Global\\MEAA53FEC. Давайте подробнее изучим этот мьютекс в x64dbg, чтобы увидеть, как он генерирует такое, на первый взгляд, случайное имя.
Прокрутив ассемблерный код вверх, мы увидим, что перед вызовом CreateMutexW произошел вызов GetWindowsDirectoryW и GetVolumeInformationW.
GetWindowsDirectoryW определяет расположение каталога Windows на взломанном устройстве. Мы можем выяснить, что за что отвечает GetVolumeInformation, поискав в Google имя API.
На основании этой информации вредоносная программа извлекает имя тома корневого каталога — это указывает на то, как вредоносная программа потенциально генерирует имя для мьютекса.
Чтобы поближе познакомиться с тем, что делают эти функции, нужно перезапустить вредоносное ПО в x64dbg, поскольку функции были вызваны до CreateMutexW. Для этого нажмем «Перезапустить».
Предыдущие установленные нами точки останова сохранятся, но теперь давайте добавим еще точку останова для GetVolumeInformationW. Повторный запуск вредоносной программы приведет нас к вновь созданной точке останова.
Посмотрев на параметры в x64dbg для GetVolumeInformationW, мы можем увидеть, что один из них относится к lpVolumeSerialNumber. Документация Microsoft подтверждает, что вредоносная программа получает серийный номер устройства.
В документации также говорится, что этот параметр хранит серийный номер в переменной. Мы можем проверить эту переменную, нажав на этот параметр правой кнопкой мыши и выбрав Follow in Dump, а затем выбрав адрес, используемый для переменной.
После этого x64dbg представляет нам выбранный адрес, который в настоящее время не содержит данных:
Затем переход к вызову GetVolumeInformationW выполняет эту функцию, и серийный номер отображается в окне дампа:
Открыв командную строку на виртуальной машине, мы можем определить серийный номер устройства и подтвердить наши выводы, введя команду «vol c:»:
Это соответствует информации в x64dbg, однако в x64dbg данные меняются местами из-за так называемого порядка байтов. За счет реверс-инжиниринга части вредоносной программы мы подтвердили, что вредоносная программа создает уникальный мьютекс на скомпрометированном устройстве, используя серийный номер.
Эту же методику теперь можно применить для исследования других импортированных функций. Просто установите точку останова для интересующих функций и посмотрите, какие параметры использует функция и какие данные помещаются в стек. Это даст вам массу информации, недоступной при поведенческом анализе вредоносного ПО.
Заключение
На этом мы завершаем серию из четырех статей об использовании x64dbg. Надеемся, что изучив их и немного попрактиковавшись, вы сможете уверенно ориентироваться в инструменте и получить должные навыки для анализа вредоносного ПО.