Итак, это мой анализ вредоносного ПО 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
Спасибо за чтение и удачного обращения!