Анализ трояна Snojan


Источник: https://medium.com/@jacob16682/snojan-analysis-bb3982fb1bb9

Автор статьи — Jacob Pimental, для лаконичности используется изложение от первого лица, но на самом деле, «я» - это Jacob Pimental.

Итак, это мой анализ вредоносной программы snojan. Моя цель в этих статьях — написать о различных образцах вредоносного ПО, которые я собрал в моей приманке (honeypot). Мне не нравится, когда я ищу анализы для добытых образов, но в результате оказывается, что никто не нашёл времени, чтобы толком заглянуть в них. И вот так я заполняю эти пробелы.

Я добыл этот образец с сервера Dionaea Honeypot. Если вы не знаете что такое Dionaea Honeypot, по сути, это сервер, который имитирует уязвимые процессы и приложения в надежде поймать вредоносное ПО. Он в основном ловит интернет-червей, которые нацелены на случайные IP-адреса, в последнее время он получил много образцов вымогателей Wannacry.

Первую вещь, которую я делаю когда анализирую новый образец вредоносной программы, это проверяю его по VirusTotal, чтобы увидеть, чем он может быть и некоторую базовую информацию о нём. Некоторые производители антивирусов пометили его как “snojan”, поэтому я тоже буду использовать это имя. VirusTotal Также сказал нам, что время создания этого файла 5 мая 2017 года, но дата может быть легко подделана. Если это правда, то это не самый новый троян, но, тем не менее, интересный.

Следующую вещь, которую я делаю, я использую rabin2, которая поставляется с radare2, чтобы увидеть, какого рода этот файл. Если вы не знаете, что такое radare2 или rabin2, то для ознакомления вы можете прочитать мои первые статьи, где я объясняю, что они из себя представляют и как их использовать.

rabin2 -I 867e7c4917795399040f367575550ae4 
arch     x86
binsz    13315
bintype  pe
bits     32
canary   false
class    PE32
cmp.csum 0x00006b4d
compiled Fri May  5 07:02:08 2017
crypto   false
endian   little
havecode true
hdr.csum 0x0000b009
linenum  true
lsyms    true
machine  i386
maxopsz  16
minopsz  1
nx       false
os       windows
overlay  true
pcalign  0
pic      false
relocs   false
signed   false
static   false
stripped false
subsys   Windows CUI
va       true

Из этого мы можем увидеть, что это файл Windows Portable Executable (PE), он 32-битный (PE32) и использует Command Line Interface (CUI) (интерфейс командной строки), а не graphical interface (GUI) (графический интерфейс). Если мы в Linux запустим команду file, то мы можем увидеть более подробно тип этого файла.

file 867e7c4917795399040f367575550ae4
867e7c4917795399040f367575550ae4: PE32 executable (DLL) (console) Intel 80386 (stripped to external PDB), for MS Windows

Мы можем видеть, что это файл Windows DLL, это означает, он он должен иметь некоторые экспорты (exports), с которыми он хочет, чтобы мы его запускали. Rabin2 может помочь нам идентифицировать эти экспорты.

rabin2 -E 867e7c4917795399040f367575550ae4 
[Exports]
vaddr=0x6d981760 paddr=0x00000b60 ord=000 fwd=NONE sz=0 bind=GLOBAL type=FUNC name=aaa.dll_DllMain@12
1 exports

Итак, этот dll экспортирует функцию DllMain@12. Мы можем предположить, что этот dll вероятно вызывается использованием Windows команды rundll и использует эту функцию как параметр. Мы также можем предположить, что имя файла скорее всего aaa.dll, а не md5sum 867e7c4917795399040f367575550ae4.

Теперь, когда у нас есть базовая информация о файле, вы можем закинуть его в Radare2 и посмотреть, как выглядит код ассемблера. Мне нравится использовать команду “afll” после того, как radare2 проанализирует бинарный файл, поскольку она показывает все функции в цветном графе. Мы можем видеть интересную функцию на 0x6d981760.

Это та же самая функция, которую мы видели раньше в качестве экспорта. Возможно нам следует изучить получше, что она делает.

Итак, похоже что она сравнивает аргумент с числом 1, если выражение ложно, тогда мы возвращаемся и, скорее всего, программа завершается. Тем не менее, если выражение истинно, мы вызываем функцию CreateThread с fcn.6d981710 в качестве параметра. Это создаст поток, который должен запустить то, что делает fcn.6d981710. Затем вызывается таинственная функция и происходит выход. Следующим шагом может быть выяснение, что это за таинственная функция и что она делает.

Эта функция вызывает функцию WSAStartup, которая запускает процесс, необходимый для использования библиотеки Socket для Windows. Это говорит нам, что dll должен подключаться к некому серверу через открытый порт. Если WSAStartup терпит неудачу, то выводится сообщение “WSAStartup failed: %d\n” вместе с возвращаемым значением WSAStartup в стек и вызывается функция fcn.6d982600. Если мы рассмотрим эту функцию, мы можем увидеть, что это указатель на printf. Иногда radare2 и другие дизассемблеры не могут идентифицировать базовые функции, такие как printf. Это стандарт и прямо сейчас это не особо важно. Если мы хотим изменить имя функции, нам просто следует найти адрес и использовать команду:


afn printf

Если процесс завершиться удачно, тогда он вызовет функцию fcn.6d9814c0.

Мы можем видеть, что эта функция создаёт сокет. Если сокет создан успешно, тогда она передаёт IP адрес 62.210.204.58 и порт 443 и выполняет подключение. Если нет, тогда вновь через printf выводится ошибка, и выполняется выход из программы. Мы могли бы использовать этот IP адрес и порт в качестве основанного на сети идентификатора для обнаружения этой вредоносной программы.


Если наш сокет может подключиться к серверу, тогда он создаст новый файл с именем 3165616.exe на диске C: инфицированного компьютера, который может использоваться как основанный на хосте идентификатор для этого вредоносного ПО. Если это завершается неудачей, тогда мы получаем другую ошибку. После этого программа зацикливается на отправке данных серверу и сохранении полученных данных в исполнимый файл, который был создан. Когда всё проходит удачно, программа запускает этот исполнимый файл.

Миниграф, иллюстрирующий цикл, который заполняет исполнимый файл данными:

Миниграф, иллюстрирующий вызов WinExec на созданном исполнимом файле:

Мы можем предположить, что этот dll является всего лишь дроппером для реального трояна, который будет установлен в систему.

Дроппер — это программа, функция которой заключается и ограничивается скачиванием другой вредоносной программы — именно так, как показано выше. Зачем нужно использовать промежуточное звено для скачивания вредоносной программы? Дроппер обладает более простой функциональностью и поэтому благодаря маленькому размеру может быть полностью включён в полезную нагрузку, размер которой лимитирован. Также дроппер благодаря его простоте можно чаще модифицировать, чтобы избегать антивиросов.

Во время написания анализа я мог получить исполнимый файл с сервера с помощью команды curl, но во время написания, видимо, автор вредоносной программы изменил сервера или отключил их. Я мог запускать эту программу в Windows окружении для анализа событий, до того как сервер ушёл в офлайн.

Вначале вы можете видеть пакет ответа, который вернул сервер на 62.210.204.58, он подтверждает наши подозрения, что закидывается исполнимый файл Windows. Для тех, кто не знаком с Magic in binaries (Магия в двоичных файлах), поясню: первые подсвеченные MZ за захваченном пакете означают, что это Windows Binary. Далее мы можем подтвердить это строкой “This program cannot be run in DOS mode”, которая популярна в приложениях Windows. Мы также можем увидеть PE что означает “Portable Executable” (Портативный исполняемый файл).

Если того, как этот исполнимый файл загружен и запущен, он связывается с 3click.click/install/start, который давал команды выполнения. Он создал wininit.exe, который находился в папке C:\WINDOWS\Fonts (что мне показалось интересным). Процесс получил бы данные с сайта icanhazip.com чтобы узнать мой внешний IP адрес, затем он отправил бы его автору вредоносной программы.

Захваченные пакеты показывают общение между icanhazip.com и моим компьютером:

Он также закрывает процесс explorer если обнаружит его открытым. Вдобавок ко всему он подключается к файлу 3click.click/report.lua, который представляет собой систему отчётности для вредоносных программ, чтобы общаться с автором о моем компьютере. Анализом этого закинутого исполнимого файла я занимался не слишком долго. Это базовый троян, который легко выдаёт себя, что он находится в системе, закрывая приложения и показывая окна командной строки во время выполнения им команд.

Здесь также Hybrid-Analysis (гибридный анализ) этого файла. Он также дал множество информации. Хотя для этой статьи я и сам запуска вредоносный файл в Windows XP VM.


Спасибо за чтение и счастливого ревёрсинга!


Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *