R0 CREW

Malware Analysis Tutorial 32: Exploration of Botnet Client (Перевод: coldfire)

Перейти к содержанию

Цели урока:

  1. Научиться использовать WinDbg для просмотра структуры данных ядра
  2. Научиться использовать сниффер пакетов для наблюдения сетевой активности вредоносной программы
  3. Понять часто используемую сетевую активность вредоносной программы
  4. Изучить скрытый\недоступный поток управления вредоносной программы

1. Введение

В этом уроке изучим клиентскую часть ботнета Мах++. Мы предполагаем, что вы завершили урок 32, где наши лабораторные условия непосредственно вытекают из его анализа. Вы должны получить следующее перед анализом, как показано на рис. 1.

Рис. 1. Process Network Message

Как показано на рис. 1, мы видим большой цикл вызовов zwReplyWaitReceivePortEx, которые ждут сообщения с определенного порта. EAX соответствует возвращаемому значению функции, например, 0х0 — все хорошо, 0х102 — тайм-аут. Если она вернула тайм-аут, то вызывается функция 0x35671D03. Иначе продолжается обработка сообщения.

Мах++ читает 2е слово сообщения, предполагаем, что оно равно целому числу равному числу с диапазона 1-3. Для случая, когда оно равно 3, происходит вызов функции 0x3567162D. В случаи — 1, происходит вызов функции 0x3567204F. Отметим, что все 4 параметра функции 0x3567204F, мы получаем с сообщения (msg) (5, 7, 8 и 10 слова сообщения соответственно).

2. Исполнение удаленной команды (#1)

Теперь давайте изучим функцию 0x3567204F. Снова, заметьте, что эта функция запускается на выполнения только тогда, когда 2е слово удаленного сообщения = 0х1. На рис. 2 показано тело функции.

Рис. 2. Загадочная функция 0x3567204F

Как показано на рис. 2, один из параметров функции — регистр ESI (ссылается на 0x00181580). Это загадочная структура данных. Мы подозреваем, что это СОМ интерфейс фальшивого Jscript COM объекта ( удаленная max++.x86.dll). СОМ интерфейс является оберткой над объектом С++, так что программа(Мах++) может вызывать функции доступные в DLL.

Далее, функция очищает область памяти 0x009FFEE8 и копирует первые четыре параметра, находящиеся в стеке, в эту область. Отметим, что эти четыре параметра являются 5м, 7м , 8м и 10м словом в удаленном сообщении. Далее 0x009FFFE8 сохраняется в EBP-10.

Мах++ затем продолжает вызывать некоторые функции удаленной DLL (смотри вторую подсвеченную область на рис. 2). берет функцию из таблицы виртуальных функций объекта и она вызывает эту функцию, расположенную по смещению 0x18. Эта функция принимает 7 параметров, они равны [ESI+18], [ESI+20], 0x356782A4, 0, 1, [EBP-20], и [EBP-10]. [ESI+18] и [ESI+20] — атрибуты данных COM интерфейса объекта, и [EBP-20] — указатель на собранные данные. Исходя из вызова VariantClear(смотри последнюю выделенную область на рис. 2), мы можем сделать заключение, что [EBP-20] — указатель на VARIANTARG. Напоследок, отметим, что [EBP-10] сохраняет 0x009FFEE8, который содержит 4 слова удаленного сообщения.

Также у нас нету доступа к удаленной DLL, из этого мы можем сделать вывод, что эта часть вредоносной программы получает команды\параметры с удаленного сообщения и выполняет функции соответственно. Все это очень похоже на ботнет клиент.

3. Инициализация (команда #3)

Теперь давайте посмотрим на третий случай(где второе слово удаленного сообщения равно 3). В этом случаи, вызывается функция 0x3567162D. Что бы осуществить управление потоком в этом случаи, мы просто меняем значения регистров соответственно. На рис. 3 показано тело функции 0x3567162D.

Рис. 3. Тело функции 0x3567162D

Как показано на рис.3, функция 0x3567162D извлекает файл со скрытого диска в новую выделенную в куче память. Содержимое файла представляет некоторые специальные javascript тэги и хидеры HTTP запросов. Имя файла можно прочитать по адресу 0x3567806C. Несмотря на то, что адрес будет перезаписан, он всегда будет читать тот же файл.

Мах++ прыгает на функцию 0x356719E4, как показано на рис. 4. Снова, извлекает COM интерфейс с удаленного объекта, который не доступен. Как показано на рис. 4, он загружает таблицу виртуальных функций COM объекта несколько раз и вызывает несколько функций СОМ интерфейса.

Рис. 4. Вызов СОМ объекта

4. Заключение

Так как удаленный объект не доступен, то мы не можем углубиться глубже в Мах++. Итогом этого урока является то, что вредоносная программа слушает определенный порт и получает команды с удаленного сервера. Удаленные команды имеют довольно простую структуру, 2е слово удаленного сообщения решает какое действие будет выполнено Мах++ на клиентской стороне. #3 — инициализирует сервис; и #1 — выполняет действия, где четыре слова удаленного сообщения служат как параметры.

В следующем уроке, мы будем загружать Мах++ в разнообразные движки для анализа вредоносных программ и сравнивать их исследования с нашим ручным анализом.

© Translated by coldfire from r0 Crew

UP