
Инструмент для анализа и классификации вредоносного ПО.
Inhale — это инструмент для анализа и классификации вредоносного ПО, способный автоматизировать и масштабировать многие операции статического анализа.
Это бета-версия, предназначенная для тестирования, сбора отзывов и разработки сообществом.
Inhale начинался как серия небольших скриптов, которые я использовал при сборе и анализе большого количества вредоносного ПО из различных источников. Существует множество фреймворков и инструментов для выполнения подобной работы, но ни один из них не соответствовал моему рабочему процессу — быстрому поиску, классификации и хранению информации о большом количестве файлов. Некоторые также требуют дорогих ключей API и других платных сервисов.
В итоге я превратил эти скрипты в то, что люди могут быстро установить и использовать, будь то исследовательский сервер, ноутбук или недорогой компьютер вроде Raspberry Pi.
Этот инструмент создан для работы на Linux с использованием Python3, ElasticSearch, radare2, yara и binwalk. jq также требуется для красивого вывода данных из базы. Ниже приведены основные инструкции по установке.
В файле config.yml есть множество вещей, которые на самом деле ещё не настроены, просто оставьте их как есть, если в данной документации не указано иное.
Установка зависимостей
python3 -m pip install -r requirements.txt
База данных не требуется для использования Inhale, но если вы хотите её настроить, просто следуйте этим инструкциям и установите параметр "enable_database" в True в config.yml.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo service elasticsearch start
Вы также можете установить вручную, следуя этой документации
Кроме того, вы можете настроить полный стек ELK для визуализации и анализа данных. Это не обязательно для использования данного инструмента.
Важно установить radare2 из репозитория, а не из вашего менеджера пакетов. Версии из менеджера пакетов не имеют всех необходимых функций для inhale.
git clone https://github.com/radare/radare2
cd radare2
sys/install.sh
sudo apt-get install automake libtool make gcc
wget https://github.com/VirusTotal/yara/archive/v3.10.0.tar.gz
tar xvzf v3.10.0.tar.gz
cd yara-3.10.0/
./bootstrap.sh
./configure
make
sudo make install
Если вы получите ошибки о разделяемых объектах, попробуйте это исправить.
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf'
sudo ldconfig
Скорее всего, лучше всего установить binwalk из репозитория.
git clone https://github.com/ReFirmLabs/binwalk
cd binwalk
sudo python3 setup.py install
Дополнительная информация по установке дополнительных функций binwalk находится здесь.
Это библиотека, которая хэширует секции ELF-файлов для анализа семейств вредоносного ПО. telfhash зависит от tlsh, поэтому инструкции по установке обоих следующие:
Установка tlsh
git clone https://github.com/trendmicro/tlsh
cd tlsh
./make.sh
cd py_ext/
python3 ./setup.py build
sudo python3 ./setup.py install
Установка telfhash
git clone https://github.com/trendmicro/telfhash
cd telfhash
sudo python3 setup.py install
Если вы хотите использовать веб-сервер для размещения вывода inhale для общего доступа, установите переменные в config.yml на соответствующие пути и убедитесь, что каталоги существуют!
web:
gen_html: False
webdir: "/var/www/html/" # The actual web directory
fqdn: "http://threat.land" # Your website
in_path: "/var/www/html/inhaled/" # The path to inhale output
ex_path: "/var/www/html/exhaled/" # The path for db query cache output
Чтобы использовать HTML-вывод, запустите inhale следующим образом:
python3 inhale.py [all your args here] --html
Укажите файл для анализа по типу:
-f INFILE Анализировать один файл
-d DIRECTORY Анализировать каталог файлов
-u URLFILE Анализировать удалённый файл (url)
-r RDIRECTORY Анализировать удалённый каталог (url)
-l URLLIST Анализировать список URL-адресов в текстовом файле
Другие параметры:
-t TAGS Добавить дополнительные теги в вывод.
-b Отключить сигнатуры binwalk
-y YARARULES Указать пользовательские правила Yara
-o OUTDIR Сохранить анализируемые файлы в указанный каталог (по умолчанию: ./files/<date>/)
-i Только вывести информацию, не добавлять файлы в базу данных
--html Сохранить вывод в формате HTML в webdir.
Запуск inhale.py выполнит весь анализ указанного файла/каталога/URL и выведет результат в терминал.
Просмотреть информацию о /bin/ls, но не добавлять в базу данных
python3 inhale.py -f /bin/ls -i
Добавить каталог 'malwarez' в базу данных
python3 inhale.py -d malwarez/
Загрузить этот файл и добавить в базу данных
python3 inhale.py -u https://thugcrowd.com/chal/skull
Загрузить всё из этого удалённого каталога, пометить всё как "phishing":
python3 inhale.py -r http://someurl.com/opendir/ -t phishing
СОВЕТ: Используйте этот поиск по хэштегам Twitter для поиска интересных открытых каталогов, которые могут содержать вредоносное ПО. Используйте на свой страх и риск.
Вы можете передавать свои собственные правила yara с помощью -y, это огромная работа в процессе, и почти всё в "YaraRules" взято из https://github.com/kevthehermit/PasteHunter/tree/master/YaraRules. Спасибо @KevTheHermit
Используйте db.sh для запросов (скоро появится хороший скрипт)
db.sh *something* | jq .
Ниже представлена текущая модель данных, используемая для базы данных elasticsearch. Не каждое из этих полей будет использоваться для каждого файла. Все теги r2_* обычно зарезервированы для бинарных файлов.
Есть несколько известных проблем с этим проектом (в основном связанных с версиями из менеджеров пакетов), и здесь я буду отслеживать всё, для чего есть решение.
Если вы получите такую ошибку:
elasticsearch.exceptions.RequestError: RequestError(400, 'illegal_argument_exception', 'Limit of total fields [1000] in index [inhaled] has been exceeded')
Возможно, у вас старая версия elasticSearch. Вы можете обновиться или увеличить лимит полей с помощью этой однострочной команды.
curl -XPUT 'localhost:9200/inhaled/_settings' -H 'Content-Type: application/json' -d'{ "index" : { "mapping" : { "total_fields" : { "limit" : "100000" }}}}'
PR приветствуются! Если вы хотите дать конкретный отзыв, вы также можете написать мне в личку @netspooky в Twitter.
Я хочу поблагодарить всех, кто помогал тестировать этот инструмент. Также хочу поблагодарить Plazmaz за первоначальную чистку кода, чтобы сделать его немного аккуратнее.
Приветы: hermit, plazmaz, nux, x0, dustyfresh, aneilan, sshell, readme, dnz, notdan, rqu, specters, nullcookies, ThugCrowd, и всем, кто участвует в ThreatLand и TC Safari Zone.
| Name | Описание |
|---|
| filename | Полный путь к бинарному файлу |
| file_ext | Расширение файла |
| filesize | Размер файла |
| filetype | Тип файла на основе магического значения. Не так надёжен, как сигнатуры binwalk. |
| md5 | MD5-хэш файла |
| sha1 | SHA1-хэш файла |
| sha256 | SHA256-хэш файла |
| added | Дата добавления файла |
| r2_arch | Архитектура бинарного файла |
| r2_baddr | Базовый адрес бинарного файла |
| r2_binsz | Размер программного кода |
| r2_bits | Разрядность архитектуры - 8/16/32/64 и т.д. |
| r2_canary | Включены ли стековые канарейки |
| r2_class | Класс бинарного файла |
| r2_compiled | Дата компиляции бинарного файла |
| r2_dbg_file | Файл отладки бинарного файла |
| r2_intrp | Интерпретатор, который вызывает бинарный файл, если он динамически скомпонован |
| r2_lang | Язык исходного кода |
| r2_lsyms | Наличие отладочных символов |
| r2_machine | Тип машины, обычно означает ЦП, для которого предназначен бинарный файл |
| r2_os | ОС, на которой должна работать машина |
| r2_pic | Наличие позиционно-независимого кода |
| r2_relocs | Наличие перемещений |
| r2_rpath | Путь поиска во время выполнения - если применимо |
| r2_stripped | Удалена ли отладочная информация |
| r2_subsys | Подсистема бинарного файла |
| r2_format | Формат бинарного файла |
| r2_iorw | Наличие вызовов ioctl |
| r2_type | Тип бинарного файла: исполняемый, разделяемый объект и т.д. |
| yara | Список совпадений yara |
| binwalk | Список сигнатур binwalk и их расположение в бинарном файле |
| tags | Любые пользовательские теги, переданные с флагом -t. |
| url | Исходный URL, если файл был загружен удалённо |
| urls | Любые URL-адреса, извлечённые из бинарного файла |