Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
hfinger — 使用 Tshark 从 pcap 文件中生成恶意软件 HTTP 请求的唯一指纹,通过分析请求结构、头部和负载特征,实现对恶意软件家族的识别与分组。 | Kitploit
工具/GitHubGitHub/cert-polska/hfinger
信息收集恶意软件分析威胁情报
GitHubcert-polska/hfinger

hfinger

使用 Tshark 从 pcap 文件中生成恶意软件 HTTP 请求的唯一指纹,通过分析请求结构、头部和负载特征,实现对恶意软件家族的识别与分组。

查看仓库
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 上使用版本 3.6.2 的 tshark 包进行测试,但应适用于旧版本,如 Xubuntu 18.04 上的 2.6.10 或 Xubuntu 20.04 上的 3.2.3。

请注意,与任何概念验证一样,您应在隔离的环境中运行 Hfinger,至少使用 Python 虚拟环境。其设置不在此处介绍,但您可以尝试 本教程。

用法

安装后,您可以直接从命令行调用 hfinger 工具,或通过 python -m hfinger 作为 Python 模块调用。

例如:

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 - 对存储在pcap文件中的恶意软件HTTP请求进行指纹识别

optional arguments:
  -h, --help            显示此帮助信息并退出
  -f FILE, --file FILE  读取单个pcap文件
  -d DIR, --directory DIR
                        从目录DIR读取pcap文件
  -o output_path, --output-path output_path
                        输出目录的路径
  -m {0,1,2,3,4}, --mode {0,1,2,3,4}
                        指纹报告模式。
                        0 - 与模式2碰撞数和指纹数相似,但使用更少的特征,
                        1 - 所有设计特征的表示,但比模式0、2和4碰撞稍多,
                        2 - 最优(默认模式),
                        3 - 生成的指纹数最少,但碰撞数最高,
                        4 - 指纹熵最高,但比模式0-2生成的指纹稍多
  -v, --verbose         报告请求中非标准值的信息(例如,非ASCII字符,没有CRLF标记,配置列表中不存在的值)。
                        如果没有--logfile (-l),将打印到标准错误输出。
  -l LOGFILE, --logfile LOGFILE
                        在详细模式下的输出日志文件。隐含 -v 或 --verbose 开关。

您必须提供pcap文件的路径(-f),或者包含pcap文件的目录(-d)。输出为JSON格式。 它将打印到标准输出,或者使用源文件名称保存到提供的目录(-o)中。例如,命令:

hfinger -f example.pcap -o /tmp/pcap

的输出将保存到:

/tmp/pcap/example.pcap.json

报告模式 -m/--mode 可以通过提供范围 0-4 内的整数来更改默认报告模式。这些模式在表示的请求特征或舍入模式上有所不同。默认模式(2)由我们选择以表示通常在请求分析中使用的所有特征,但它也提供较低的碰撞数和生成的指纹数。使用其他模式,您可以实现不同的目标。例如,在模式 3 中,您获得的生成指纹数较少,但恶意软件家族之间碰撞的机会更高。如果您不确定,则无需更改任何内容。有关报告模式的更多信息,请参见此处。

从版本 0.2.1 开始,Hfinger 的详细程度降低。如果您希望接收有关遇到的标头非标准值、请求非载荷部分中的非ASCII字符、缺少CRLF标记(\r\n\r\n)以及分析请求时遇到的其他非应用程序错误的信息,则应使用 -v/--verbose。在详细模式下遇到任何此类问题时,将打印到标准错误输出。您还可以使用 -l/--log 开关将日志保存到指定位置(它隐含 -v/--verbose)。日志数据将附加到日志文件中。

在Python应用程序中使用_hfinger_

从版本 0.2.0 开始,Hfinger 支持导入到其他Python应用程序。要在您的应用程序中使用它,只需从 hfinger.analysis 导入 hfinger_analyze 函数,并使用pcap文件的路径和报告模式调用它。返回的结果是一个包含指纹结果的字典列表。

例如:

root@kitploit:~
from hfinger.analysis import hfinger_analyze

pcap_path = "在此处指定PCAP路径"
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,根据需求配置日志处理器,并将其添加到记录器中。更多信息可在 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特征:

  • URI长度,表示为长度的以10为底的对数,四舍五入为整数(示例中URI长度为43个字符,因此 log10(43)≈2),
  • 目录数(示例中有3个目录),
  • 平均目录长度,表示为实际目录平均长度的以10为底的对数,四舍五入为整数(示例中有三个目录,总长度为20个字符(6+6+8),因此 log10(20/3)≈1),
  • 请求文件的扩展名,但仅当它在 hfinger/configs/extensions.txt 中已知扩展名列表中时,
  • 平均值长度,表示为实际平均值长度的以10为底的对数,四舍五入到一位小数(示例中两个值长度相同,均为4个字符,即 log10(4)≈0.6)。

其次,分析标头结构特征:

  • 请求方法,编码为方法的前两个字母(PO),
  • 协议版本,编码为整数(版本 1.1 对应 1,版本 1.0 对应 0,版本 0.9 对应 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 哈希对其进行哈希。如果标头值由多个值组成,则将其分词以提供用 , 分隔的值列表,例如,Accept: */*, text/* 将给出 ac:as-as,te-as。然而,在当前的开发阶段,如果标头值包含“质量值”标签(q=),则整个值使用其 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、1 和 4 相比,碰撞数增加了近两倍。模式 3 生成的指纹至少比其他模式少两倍,但碰撞数增加了约九倍。所有设计特征的描述请见此处。

这些模式由以下特征组成(按在指纹中出现的顺序):

  • 模式 0:
    • 目录数,
    • 平均目录长度,表示为整数,
    • 请求文件的扩展名,
    • 平均值长度,表示为浮点数,
    • 标头顺序,
    • 常用标头及其值,
    • 载荷长度,表示为浮点数。
  • 模式 1:
    • URI长度,表示为整数,
    • 目录数,
    • 平均目录长度,表示为整数,
    • 请求文件的扩展名,
    • 变量长度,表示为整数,
    • 变量数,
    • 平均值长度,表示为整数,
    • 请求方法,
    • 协议版本,
    • 标头顺序,
    • 常用标头及其值,
    • 非ASCII字符的存在,
    • 载荷熵,表示为整数,
    • 载荷长度,表示为整数。
  • 模式 2:
    • URI长度,表示为整数,
    • 目录数,
    • 平均目录长度,表示为整数,
    • 请求文件的扩展名,
    • 平均值长度,表示为浮点数,
    • 请求方法,
    • 协议版本,
    • 标头顺序,
    • 常用标头及其值,
    • 非ASCII字符的存在,
    • 载荷熵,表示为整数,
    • 载荷长度,表示为浮点数。
  • 模式 3:
    • URI长度,表示为整数,
    • 平均目录长度,表示为整数,
    • 请求文件的扩展名,
    • 平均值长度,表示为整数,
    • 标头顺序。
  • 模式 4:
    • URI长度,表示为浮点数,
    • 目录数,
    • 平均目录长度,表示为浮点数,
    • 请求文件的扩展名,
    • 变量长度,表示为浮点数,
    • 平均值长度,表示为浮点数,
    • 请求方法,
    • 协议版本,
    • 标头顺序,
    • 常用标头及其值,
    • 非ASCII字符的存在,
    • 载荷熵,表示为浮点数,
    • 载荷长度,表示为浮点数。

由欧盟互联欧洲基金共同资助

下载工具
User-Agent
Accept-Language