Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
hfinger — Генерирует уникальные отпечатки HTTP-запросов вредоносного ПО из файлов pcap с помощью Tshark, что позволяет идентифицировать и группировать семейства вредоносного ПО на основе анализа структуры запросов, заголовков и характеристик полезной нагрузки. | Kitploit
Инструменты/GitHubGitHub/cert-polska/hfinger
Сбор информацииАнализ вредоносных программРазведка угроз
GitHubcert-polska/hfinger

hfinger

Генерирует уникальные отпечатки HTTP-запросов вредоносного ПО из файлов pcap с помощью Tshark, что позволяет идентифицировать и группировать семейства вредоносного ПО на основе анализа структуры запросов, заголовков и характеристик полезной нагрузки.

Репозиторий
147103 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Hfinger - фингерпринтинг HTTP-запросов вредоносного ПО

Инструмент для фингерпринтинга HTTP-запросов вредоносного ПО. Основан на Tshark и написан на Python3. Стадия рабочего прототипа :-)

Его основная цель — предоставлять уникальные представления (отпечатки) запросов вредоносного ПО, которые помогают в их идентификации. Уникальный означает здесь, что каждый отпечаток должен встречаться только в одном конкретном семействе вредоносных программ, но одно семейство может иметь несколько отпечатков. Hfinger представляет запрос в более короткой форме, чем вывод всего запроса, но при этом интерпретируемой человеком.

Hfinger может использоваться как при ручном анализе вредоносного ПО, так и в песочницах или SIEM. Сгенерированные отпечатки полезны для группировки запросов, привязки запросов к конкретным семействам вредоносных программ, идентификации различных операций одного семейства или обнаружения неизвестных вредоносных запросов, пропущенных другими системами безопасности, но имеющих общий отпечаток.

Научная статья сопровождает работу над этим инструментом, описывая, например, мотивацию выбора дизайна и оценку инструмента по сравнению с p0f, FATT и Mercury.

Содержание

  1. Идея
  2. Установка
  3. Использование
  4. Создание отпечатка
  5. Режимы отчета

Идея

Основное предположение этого проекта заключается в том, что HTTP-запросы разных семейств вредоносного ПО более или менее уникальны, поэтому их можно фингерпринтировать для обеспечения некоторой идентификации. Hfinger сохраняет информацию о структуре и значениях некоторых заголовков, чтобы предоставить средства для дальнейшего анализа. Например, группировка похожих запросов — на данный момент это еще находится в разработке.

После анализа HTTP-запросов и заголовков вредоносного ПО мы определили некоторые части запросов как наиболее отличительные. К ним относятся:

  • Метод запроса
  • Версия протокола
  • Порядок заголовков
  • Значения популярных заголовков
  • Длина полезной нагрузки, энтропия и наличие не-ASCII символов

Кроме того, были учтены некоторые стандартные особенности 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.

Например:

root@kitploit:~
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:

root@kitploit:~
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). Данные журнала будут добавлены в файл журнала.

Использование hfinger в приложении на Python

Начиная с версии 0.2.0, Hfinger поддерживает импорт в другие приложения на Python. Чтобы использовать его в своем приложении, просто импортируйте функцию hfinger_analyze из hfinger.analysis и вызовите ее с путем к файлу pcap и режимом отчета. Возвращаемый результат — список словарей с результатами фингерпринтинга.

Например:

root@kitploit:~
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.

Создание отпечатка

Отпечаток основан на признаках, извлеченных из запроса. Использование конкретных признаков из полного списка зависит от выбранного режима отчета из предопределенного списка (дополнительная информация о режимах отчета здесь). На рисунке ниже показано создание примера отпечатка в режиме отчета по умолчанию.

example

Для извлечения информации анализируются три части запроса: 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:

  • Длина URI, представленная как логарифм по основанию 10 от длины, округленный до целого числа (в примере URI имеет длину 43 символа, поэтому log10(43)≈2),
  • количество каталогов (в примере 3 каталога),
  • средняя длина каталога, представленная как логарифм по основанию 10 от фактической средней длины каталога, округленный до целого числа (в примере три каталога общей длиной 20 символов (6+6+8), поэтому log10(20/3)≈1),
  • расширение запрашиваемого файла, но только если оно есть в списке известных расширений в hfinger/configs/extensions.txt,
  • средняя длина значения, представленная как логарифм по основанию 10 от фактической средней длины значения, округленный до одного десятичного знака (в примере два значения имеют одинаковую длину 4 символа, что, очевидно, равно 4 символам, и log10(4)≈0.6).

Во-вторых, анализируются признаки структуры заголовков:

  • метод запроса, закодированный первыми двумя буквами метода (PO),
  • версия протокола, закодированная как целое число (1 для версии 1.1, 0 для версии 1.0 и 9 для версии 0.9),
  • порядок заголовков,
  • и популярные заголовки и их значения.

Для представления порядка заголовков в запросе имя каждого заголовка кодируется в соответствии со схемой в hfinger/configs/headerslow.json, например, заголовок User-Agent кодируется как us-ag. Закодированные имена разделяются ,. Если имя заголовка не начинается с заглавной буквы (или любая его часть при анализе составных заголовков, таких как Accept-Encoding), то закодированное представление предваряется !. Если имя заголовка отсутствует в списке известных заголовков, оно хэшируется с помощью хэша FNV1a, и хэш используется в качестве кодировки.

При анализе популярных заголовков проверяется, присутствуют ли они в запросе. Это следующие заголовки:

  • Connection
  • Accept-Encoding
  • Content-Encoding
  • Cache-Control
  • TE
  • Accept-Charset
  • Content-Type
  • Accept
  • Accept-Language
  • User-Agent

Когда заголовок найден в запросе, его значение проверяется по таблице типичных значений для создания пар представление_имени_заголовка:представление_значения. Имя заголовка кодируется в соответствии со схемой в hfinger/configs/headerslow.json (как было показано ранее), а значение кодируется в соответствии со схемой, хранящейся в каталоге hfinger/configs или файле configs.py, в зависимости от заголовка. В приведенном выше примере Accept кодируется как ac, а его значение */* как as-as (asterisk-asterisk), что дает ac:as-as. Пары вставляются в отпечаток в порядке появления в запросе и разделяются с помощью /. Если значение заголовка не найдено в таблице кодирования, оно хэшируется с помощью хэша FNV1a. Если значение заголовка состоит из нескольких значений, они токенизируются для получения списка значений, разделенных ,, например, даст . Однако на данный момент разработки, если значение заголовка содержит тег "quality value" (), то все значение кодируется с помощью его хэша FNV1a. Наконец, значения заголовков и напрямую кодируются с использованием их хэшей FNV1a.

Наконец, признаки полезной нагрузки:

  • наличие не-ASCII символов, представленное буквой N, и A в противном случае,
  • энтропия Шеннона полезной нагрузки, округленная до целого числа,
  • и длина полезной нагрузки, представленная как логарифм по основанию 10 от фактической длины полезной нагрузки, округленный до одного десятичного знака.

Режимы отчета

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:
    • длина URI, представленная как целое число,
    • количество каталогов,
    • средняя длина каталога, представленная как целое число,
    • расширение запрашиваемого файла,
    • длина переменной, представленная как целое число,
    • количество переменных,
    • средняя длина значения, представленная как целое число,
    • метод запроса,
    • версия протокола,
    • порядок заголовков,
    • популярные заголовки и их значения,
    • наличие не-ASCII символов,
    • энтропия полезной нагрузки, представленная как целое число,
    • длина полезной нагрузки, представленная как целое число.
  • режим 2:
    • длина URI, представленная как целое число,
    • количество каталогов,
    • средняя длина каталога, представленная как целое число,
    • расширение запрашиваемого файла,
    • средняя длина значения, представленная как число с плавающей точкой,
    • метод запроса,
    • версия протокола,
    • порядок заголовков,
    • популярные заголовки и их значения,
    • наличие не-ASCII символов,
    • энтропия полезной нагрузки, представленная как целое число,
    • длина полезной нагрузки, представленная как число с плавающей точкой.
  • режим 3:
    • длина URI, представленная как целое число,
    • средняя длина каталога, представленная как целое число,
    • расширение запрашиваемого файла,
    • средняя длина значения, представленная как целое число,

Софинансируется Европейским Союзом через Механизм соединения Европы

Скачать инструмент
Accept: */*, text/*
ac:as-as,te-as
q=
User-Agent
Accept-Language
  • порядок заголовков.
  • режим 4:
    • длина URI, представленная как число с плавающей точкой,
    • количество каталогов,
    • средняя длина каталога, представленная как число с плавающей точкой,
    • расширение запрашиваемого файла,
    • длина переменной, представленная как число с плавающей точкой,
    • средняя длина значения, представленная как число с плавающей точкой,
    • метод запроса,
    • версия протокола,
    • порядок заголовков,
    • популярные заголовки и их значения,
    • наличие не-ASCII символов,
    • энтропия полезной нагрузки, представленная как число с плавающей точкой,
    • длина полезной нагрузки, представленная как число с плавающей точкой.