Содержание статьи
info
О том, как из подручных материалов с помощью смекалки и умелых рук построить скворечник лабораторию для анализа вредоносов, подробно рассказано в статье «Код под надзором. Создаем виртуальную лабораторию для анализа малвари».
Стенд, который мы с тобой собрали в прошлый раз, позволяет быстро исследовать обнаруженный вредоносный файл, создавать собственные сигнатуры и выявлять зараженные компьютеры в локальной сети. Сетевую сигнатуру мы будем писать для Suricata IDS, а файловую — для многоплатформенной программы YARA.
Исследуемый модуль PlugX содержит три файла: исполняемый файл и две динамические библиотеки, в одной из которых сосредоточена основная вредоносная функциональность.
warning
Прежде чем начать исследование вредоносного файла, необходимо сделать снимок состояния виртуальных машин с Kali Linux и Windows 10, чтобы в любой момент можно было вернуться к их первоначальным настройкам.
Инструментарий
Многие описываемые в статье утилиты находятся в каталоге FLARE
на рабочем столе виртуальной машины с Windows 10. Для дальнейшего исследования вредоносного файла воспользуемся следующим софтом:
- DIE — программа для определения типов файлов.
- PeStudio — программа для поиска артефактов исполняемых файлов.
- IDA Pro — интерактивный дизассемблер, используемый для реверс‑инжиниринга.
- Wireshark — инструмент для анализа сетевых протоколов.
- Burp Suite — используется в качестве прозрачного прокси‑сервера для анализа взаимодействия вредоносного файла по протоколу HTTPS.
- SELKS — система мониторинга сетевой безопасности на основе стека Elasticsearch, Kibana, Logstash, Suricata.
- Loki Scanner — сканер IOCs.
- YARA Editor — программа для тестирования и создания правил YARA.
- ApiLoger — утилита для анализа вызываемых WinAPI-функций исследуемого вредоноса.
Анализ вредоносного модуля мы будем проводить в три этапа:
- Статический анализ.
- Поведенческий анализ.
- Создание сигнатур для выявления модуля.
Статический анализ
Чтобы узнать, какой компилятор и компоновщик использовался при создании нашего исполняемого файла, а также определить, упакован он или нет, скормим его утилите DIE.
Тулза утверждает, что исследуемый файл разработан на C/C++ и собран для 32-разрядных операционных систем. Теперь пропустим бинарник через утилиту PeStudio, чтобы найти всевозможные артефакты. Среди них нам особенно интересны временные метки компиляции файла, загружаемые библиотеки, используемые ресурсы, информация о версии исполняемого файла, характерные строки, а также отладочная информация и файл сборки (Manifest). Все это пригодится нам при создании файловой сигнатуры.
Итак, при поиске строк мы обнаружили информацию о загружаемой библиотеке и функции вызова.
В столбце value
отображается строка Goshawk.
, которая сигнализирует об использовании некой динамической библиотеки. Строка ServerEntryFun
содержит информацию о функции экспорта.
Закинем исследуемый файл в IDA Pro, найдем строку Goshawk.
и участок кода, в котором происходит загрузка динамической библиотеки. Для этого перейдем в раздел Views → OpenSubviews → Strings, найдем строку Goshawk.
, нажмем клавишу X
, чтобы перейти непосредственно к коду загрузки либы, и декомпилируем этот код нажатием клавиши F5
.
В дизассемблерном листинге обнаруживаются строки ServerEntyFun
и Goshawk.
. Они пригодятся нам при написании файловой сигнатуры.
Как мы знаем, основная функциональность модуля расположена в динамической библиотеке. Настало время ее проанализировать — загрузим библиотеку в DIE, чтобы определить компилятор и компоновщик.
Теперь по традиции посмотрим, что скажет о нашей библиотеке PeStudio.
Как видно из скриншота, вредонос использует библиотеку ws32_32.dll, предназначенную для сетевых подключений TCP/IP, а также динамическую библиотеку vtcp.dll. На вкладке Strings обнаруживаем следующее.
Файл Debug.
используется для записи ошибок в результате работы вредоносного файла.
Далее загрузим исследуемый файл в IDA Pro и посмотрим участки кода. Так как мы исследуем динамическую библиотеку, то в первую очередь изучим функции экспорта, для этого нужно перейти на вкладку Exports.
Нажмем два раза функцию ServerEntryFun
и исследуем ее код.
Как видим, функция CreateThread
создает поток, который выполняется в пределах виртуального адресного пространства вызывающего процесса. Параметр StartAddress
указывает на адрес функции, выполняющейся в запущенном потоке. В этой функции содержится код расшифровки конфигурации модуля и код шифрования сетевого взаимодействия с управляющим сервером.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»