Итак, это мой анализ вредоносного ПО Snojan. Моя цель в моих статьях - написать о различных образцах вредоносных программ, которые я собираю в своем приманке. Я ненавижу находить образец и анализировать его только для того, чтобы обнаружить, что никто не нашел времени, чтобы по-настоящему его изучить, так что это мое средство от этого.

Я собрал этот образец с моего сервера 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
$

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

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

Мы видим, что это DLL-файл Windows. Это означает, что у него должен быть какой-то экспорт, с которым он хочет, чтобы мы его запускали. 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:% d \ n вместе с возвращаемым значением WSAStartup в стек и вызывает функцию fcn.6d982600. Если мы оценим эту функцию, мы увидим, что это указатель на printf. Иногда radare2 и другие дизассемблеры не могут идентифицировать базовые функции, такие как printf. Это стандартно и сейчас не особо важно. Если бы мы хотели изменить имя функции, мы бы просто перешли по адресу и использовали команду

afn printf

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

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

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

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

Сначала вы можете увидеть пакет, который был возвращен с сервера по адресу 62.210.204.58, что подтверждает наше подозрение, что он потерял двоичный файл Windows. Для тех, кто не знаком с Magic в двоичных файлах, первый MZ, выделенный в захвате пакета, означает, что это двоичный файл Windows. Мы можем дополнительно подтвердить это строкой «Эта программа не может быть запущена в режиме DOS», которая является обычной для приложений Windows. Мы также можем видеть PE, что означает «переносимый исполняемый файл».

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

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

В целом, это очень простой дроппер и первый настоящий образец вредоносного ПО, который я проанализировал, поэтому, если я что-то пропустил или есть лучший способ проанализировать, то, пожалуйста, не стесняйтесь обращаться ко мне в моем Твиттере или мой LinkedIn.

Здесь же находится Гибрид-анализ этого файла. Это также дает много информации. Хотя для этой статьи я сам запускал вредоносную программу на виртуальной машине Windows XP.

Если вам понравилась эта статья, вы можете просмотреть больше в моем обновленном блоге по адресу https://goggleheadedhacker.com/1

Спасибо за чтение и удачного обращения!