
Генерирует уникальные отпечатки HTTP-запросов вредоносного ПО из файлов pcap с помощью Tshark, что позволяет идентифицировать и группировать семейства вредоносного ПО на основе анализа структуры запросов, заголовков и характеристик полезной нагрузки.
Инструмент для фингерпринтинга HTTP-запросов вредоносного ПО. Основан на Tshark и написан на Python3. Стадия рабочего прототипа :-)
Его основная цель — предоставлять уникальные представления (отпечатки) запросов вредоносного ПО, которые помогают в их идентификации. Уникальный означает здесь, что каждый отпечаток должен встречаться только в одном конкретном семействе вредоносных программ, но одно семейство может иметь несколько отпечатков. Hfinger представляет запрос в более короткой форме, чем вывод всего запроса, но при этом интерпретируемой человеком.
Hfinger может использоваться как при ручном анализе вредоносного ПО, так и в песочницах или SIEM. Сгенерированные отпечатки полезны для группировки запросов, привязки запросов к конкретным семействам вредоносных программ, идентификации различных операций одного семейства или обнаружения неизвестных вредоносных запросов, пропущенных другими системами безопасности, но имеющих общий отпечаток.
Научная статья сопровождает работу над этим инструментом, описывая, например, мотивацию выбора дизайна и оценку инструмента по сравнению с p0f, FATT и Mercury.
Основное предположение этого проекта заключается в том, что HTTP-запросы разных семейств вредоносного ПО более или менее уникальны, поэтому их можно фингерпринтировать для обеспечения некоторой идентификации. Hfinger сохраняет информацию о структуре и значениях некоторых заголовков, чтобы предоставить средства для дальнейшего анализа. Например, группировка похожих запросов — на данный момент это еще находится в разработке.
После анализа HTTP-запросов и заголовков вредоносного ПО мы определили некоторые части запросов как наиболее отличительные. К ним относятся:
Кроме того, были учтены некоторые стандартные особенности URL запроса.
Все эти части были преобразованы в набор признаков, подробно описанных здесь.
Вышеуказанные признаки преобразуются в представление переменной длины, которое и является фактическим отпечатком. В зависимости от режима отчета используются разные признаки для фингерпринтинга запросов. Более подробная информация об этих режимах представлена ниже. Процесс выбора признаков будет описан в предстоящей научной статье.
Минимальные требования, необходимые перед установкой:
Python >= 3.3,Tshark >= 2.2.0.Установка доступна из PyPI:
pip install hfinger
Hfinger был протестирован на Xubuntu 22.04 LTS с пакетом tshark версии 3.6.2, но должен работать с более старыми версиями, такими как 2.6.10 на Xubuntu 18.04 или 3.2.3 на Xubuntu 20.04.
Обратите внимание, что, как и в случае с любым PoC, запускать Hfinger следует в изолированной среде, по крайней мере, с виртуальным окружением Python. Его настройка здесь не рассматривается, но вы можете попробовать этот учебник.
После установки вы можете вызывать инструмент непосредственно из командной строки с помощью hfinger или как модуль Python с помощью python -m hfinger.
Например:
foo@bar:~$ hfinger -f /tmp/test.pcap
[{"epoch_time": "1614098832.205385000", "ip_src": "127.0.0.1", "ip_dst": "127.0.0.1", "port_src": "53664", "port_dst": "8080", "fingerprint": "2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4"}]
Справку можно вывести с помощью короткого ключа -h или длинного --help:
usage: hfinger [-h] (-f FILE | -d DIR) [-o output_path] [-m {0,1,2,3,4}] [-v]
[-l LOGFILE]
Hfinger - fingerprinting malware HTTP requests stored in pcap files
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE Read a single pcap file
-d DIR, --directory DIR
Read pcap files from the directory DIR
-o output_path, --output-path output_path
Path to the output directory
-m {0,1,2,3,4}, --mode {0,1,2,3,4}
Fingerprint report mode.
0 - similar number of collisions and fingerprints as mode 2, but using fewer features,
1 - representation of all designed features, but a little more collisions than modes 0, 2, and 4,
2 - optimal (the default mode),
3 - the lowest number of generated fingerprints, but the highest number of collisions,
4 - the highest fingerprint entropy, but slightly more fingerprints than modes 0-2
-v, --verbose Report information about non-standard values in the request
(e.g., non-ASCII characters, no CRLF tags, values not present in the configuration list).
Without --logfile (-l) will print to the standard error.
-l LOGFILE, --logfile LOGFILE
Output logfile in the verbose mode. Implies -v or --verbose switch.
Вы должны указать путь к файлу pcap (-f) или каталогу (-d) с файлами pcap. Вывод в формате JSON. Он будет выведен в стандартный вывод или в указанный каталог (-o) с использованием имени исходного файла. Например, вывод команды:
hfinger -f example.pcap -o /tmp/pcap
будет сохранен в:
/tmp/pcap/example.pcap.json
Режим отчета -m/--mode можно использовать для изменения режима отчета по умолчанию, указав целое число в диапазоне 0-4. Режимы различаются представленными признаками запроса или методами округления. Режим по умолчанию (2) был выбран нами для представления всех признаков, которые обычно используются при анализе запросов, но также обеспечивает низкое количество коллизий и сгенерированных отпечатков. С другими режимами можно добиться разных целей. Например, в режиме 3 вы получаете меньшее количество сгенерированных отпечатков, но более высокую вероятность коллизии между семействами вредоносного ПО. Если вы не уверены, можете ничего не менять. Дополнительная информация о режимах отчета здесь.
Начиная с версии 0.2.1 Hfinger стал менее подробным. Вам следует использовать -v/--verbose, если вы хотите получать информацию о нестандартных значениях заголовков, не-ASCII символах в части запроса, не являющейся полезной нагрузкой, отсутствии тегов CRLF (\r\n\r\n) и других проблемах с анализируемыми запросами, которые не являются ошибками приложения. При возникновении таких проблем в подробном режиме они будут выведены в стандартный поток ошибок. Вы также можете сохранить журнал в указанное место с помощью ключа -l/--log (он подразумевает -v/--verbose). Данные журнала будут добавлены в файл журнала.
Начиная с версии 0.2.0, Hfinger поддерживает импорт в другие приложения на Python. Чтобы использовать его в своем приложении, просто импортируйте функцию hfinger_analyze из hfinger.analysis и вызовите ее с путем к файлу pcap и режимом отчета. Возвращаемый результат — список словарей с результатами фингерпринтинга.
Например:
from hfinger.analysis import hfinger_analyze
pcap_path = "SPECIFY_PCAP_PATH_HERE"
reporting_mode = 4
print(hfinger_analyze(pcap_path, reporting_mode))
Начиная с версии 0.2.1 Hfinger использует модуль logging для регистрации информации о нестандартных значениях заголовков, не-ASCII символах в части запроса, не являющейся полезной нагрузкой, отсутствии тегов CRLF (\r\n\r\n) и других проблемах с анализируемыми запросами, не являющихся ошибками приложения. Hfinger создает свой собственный регистратор с именем hfinger, но без предварительной настройки информация журнала на практике отбрасывается. Если вы хотите получать эту информацию журнала, перед вызовом hfinger_analyze вам следует настроить регистратор hfinger, установить уровень журнала на logging.INFO, настроить обработчик журнала по своему усмотрению и добавить его к регистратору. Дополнительная информация доступна в docstring функции hfinger_analyze.
Отпечаток основан на признаках, извлеченных из запроса. Использование конкретных признаков из полного списка зависит от выбранного режима отчета из предопределенного списка (дополнительная информация о режимах отчета здесь). На рисунке ниже показано создание примера отпечатка в режиме отчета по умолчанию.

Для извлечения информации анализируются три части запроса: URI, структура заголовков (включая метод и версию протокола) и полезная нагрузка. Конкретные признаки отпечатка разделяются с помощью | (вертикальная черта). Итоговый отпечаток, сгенерированный для запроса POST из примера:
2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4
Создание признаков описано ниже в порядке их появления в отпечатке.
Сначала извлекаются признаки URI:
log10(43)≈2),log10(20/3)≈1),hfinger/configs/extensions.txt,log10(4)≈0.6).Во-вторых, анализируются признаки структуры заголовков:
PO),Для представления порядка заголовков в запросе имя каждого заголовка кодируется в соответствии со схемой в hfinger/configs/headerslow.json, например, заголовок User-Agent кодируется как us-ag. Закодированные имена разделяются ,. Если имя заголовка не начинается с заглавной буквы (или любая его часть при анализе составных заголовков, таких как Accept-Encoding), то закодированное представление предваряется !. Если имя заголовка отсутствует в списке известных заголовков, оно хэшируется с помощью хэша FNV1a, и хэш используется в качестве кодировки.
При анализе популярных заголовков проверяется, присутствуют ли они в запросе. Это следующие заголовки:
Когда заголовок найден в запросе, его значение проверяется по таблице типичных значений для создания пар представление_имени_заголовка:представление_значения. Имя заголовка кодируется в соответствии со схемой в hfinger/configs/headerslow.json (как было показано ранее), а значение кодируется в соответствии со схемой, хранящейся в каталоге hfinger/configs или файле configs.py, в зависимости от заголовка. В приведенном выше примере Accept кодируется как ac, а его значение */* как as-as (asterisk-asterisk), что дает ac:as-as. Пары вставляются в отпечаток в порядке появления в запросе и разделяются с помощью /. Если значение заголовка не найдено в таблице кодирования, оно хэшируется с помощью хэша FNV1a. Если значение заголовка состоит из нескольких значений, они токенизируются для получения списка значений, разделенных ,, например, даст . Однако на данный момент разработки, если значение заголовка содержит тег "quality value" (), то все значение кодируется с помощью его хэша FNV1a. Наконец, значения заголовков и напрямую кодируются с использованием их хэшей FNV1a.
Наконец, признаки полезной нагрузки:
N, и A в противном случае,Hfinger работает в пяти режимах отчета, которые различаются представленными в отпечатке признаками, а значит и извлекаемой из запросов информацией. Это (с номером, используемым в конфигурации инструмента):
0 — создает похожее количество коллизий и отпечатков, как режим 2, но использует меньше признаков,1 — представляет все разработанные признаки, но создает немного больше коллизий, чем режимы 0, 2 и 4,2 — оптимальный (режим по умолчанию), представляет все признаки, обычно используемые при анализе запросов, но также обеспечивает низкое количество коллизий и сгенерированных отпечатков,3 — создает наименьшее количество сгенерированных отпечатков среди всех режимов, но достигает наибольшего количества коллизий,4 — обеспечивает наибольшую энтропию отпечатка, но также генерирует немного больше отпечатков, чем режимы 0-2.Режимы были выбраны для оптимизации способности Hfinger уникально идентифицировать семейства вредоносного ПО в зависимости от количества сгенерированных отпечатков. Режимы 0, 2 и 4 обеспечивают похожее количество коллизий между семействами вредоносного ПО, однако режим 4 генерирует немного больше отпечатков, чем два других. Режим 2 представляет больше признаков запроса, чем режим 0, при сопоставимом количестве сгенерированных отпечатков и коллизий. Режим 1 — единственный, представляющий все разработанные признаки, но он увеличивает количество коллизий почти в два раза по сравнению с режимами 0, 2 и 4. Режим 3 создает как минимум в два раза меньше отпечатков, чем другие режимы, но вводит примерно в девять раз больше коллизий. Описание всех разработанных признаков здесь.
Режимы состоят из признаков (в порядке появления в отпечатке):
0:
1:
2:
3:

Accept: */*, text/*ac:as-as,te-asq=4: