hfinger-指纹http请求

hfinger-指纹http请求

hfinger指纹http请求-1.png

用于指纹http恶意软件请求的工具。基于tshark,并在python3中撰写。工作原型阶段:-)
它的主要目的是提供恶意软件请求的独特表示(指纹),这有助于其识别。在这里,独特的意思是,每个指纹只能在一个特定的恶意软件家族中看到,但是一个家族可以具有多种指纹。 hfinger代表要求的要求,而不是打印整个请求,但仍然可以解释。
Hfinger可以用于手动恶意软件分析,也可以用于沙盒系统或SIEM中。生成的指纹对于分组请求,向特定恶意软件系列的请求指定请求,确定一个家庭的不同操作或发现其他安全系统省略但共享指纹的未知恶意请求。
学术论文伴随着此工具的工作,例如,与P0F,Fatt和Mercury相比,描述了设计选择的动机以及对工具的评估。

The idea​

该项目的基本假设是,不同恶意软件系列的HTTP请求或多或少是独特的,因此可以指纹以提供某种标识。 Hfinger保留了有关某些标头的结构和值的信息,以提供进一步分析的手段。例如,分组类似请求- 目前,这仍然是一项正在进行的工作。
在分析了恶意软件的HTTP请求和标题后,我们确定了一些请求的某些部分是最独特的。其中包括: 请求方法协议版本标头订单流行标题的值*有效载荷长度,熵和非ASCII字符的存在
此外,还考虑了请求URL的一些标准功能。所有这些零件都被翻译成一组功能,在此处详细介绍。
上面的特征被转化为不同的长度表示,即实际指纹。根据报告模式,使用不同的功能来指纹请求。有关这些模式的更多信息如下。特征选择过程将在即将发表的学术论文中进行描述。

Installation​

安装之前需要最低要求: * python=3.3, * tshark=2.2.0。
可提供PYPI:的安装
PIP安装hfinger
Hfinger已在版本3.6.2中的TSHARK软件包上在Xubuntu 22.04 LT上进行了测试,但应使用Xubuntu 18.04上的2.6.10或Xubuntu 20.04上的3.2.3。
请注意,与任何POC一样,至少在Python虚拟环境中,您应该在单独的环境中运行hfinger。它的设置不在此处介绍,但是您可以尝试本教程。

Usage​

安装后,您可以直接从使用Hfinger的命令行或带有Python -M Hfinger的Python模块来调用该工具。
示例:
foo@bar:〜 $ hfinger -f /tmp/test.pcap
[{' '指纹: '2 | 3 | 1 | PHP | 0.6 | PO | 1 | US-AG,AC,AC-EN,HO,CO,CO,CO-TY,CO-LE | US-AG:F452D7A9/AC:AS-AS-AS/AC-EN3:ID/CO:KE-AL/CO-TY333:TE-PLESID-1.4 | 4 | 4 | 4长-Help Switches:
usage: hfinger [-h](-f文件| -d dir)[-o output_path] [-m {0,1,1,2,3,4}] [-v]
[-l logfile]
hfinger -PCAP文件中存储的指纹恶意软件HTTP请求
可选参数:
-h, - 赫尔普显示此帮助消息和退出
-f文件, - 文件文件读取单个PCAP文件
-d dir,-Directory dir
从目录DIR读取PCAP文件
-o 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示例.pcap -o /tmp /pcap
将保存到:
/TMP/pcap/example.pcap.json
报告模式-M/-MODE可用于通过在0-4范围内提供整数来更改默认报告模式。在表示的请求功能或圆形模式上的模式不同。我们选择了默认模式(2)来表示通常在请求分析过程中使用的所有功能,但它也提供了少量的碰撞和生成的指纹。使用其他模式,您可以实现不同的目标。例如,在模式3中,您获得的生成指纹数量较低,但恶意软件家族之间发生碰撞的机会更高。如果您不确定,则不必更改任何内容。有关报告模式的更多信息在这里。
从0.2.1 Hfinger版本开始的详细信息。如果要接收有关请求的非付款部分中遇到的非标准值的信息,则应使用-v/- 详细信息,而不是crlf标签(\ r \ n \ r \ n),以及其他分析请求的问题,而不是应用程序错误。当在详细模式下遇到任何此类问题时,它们将被打印到标准错误输出中。您还可以使用-l/- 日志交换机将日志保存到定义的位置(这意味着-v/- 冗长)。日志数据将附加到日志文件。

Using hfinger in a Python application​

从版本0.2.0开始,Hfinger支持进口到其他Python应用程序。要在应用程序中使用它,只需从Hfinger.Analysis中导入Hfinger_Analyze函数,然后将其称为通往PCAP文件和报告模式的路径。返回的结果是带有指纹结果的DICES列表。
示例:
来自hfinger。分析导入hfinger_analyze
pcap_path='expefify_pcap_path_here'
reporting_mode=4
从版本0.2.1 hfinger使用记录模块开始print(hfinger_analyze(pcap_path,reporting_mode)))用于记录有关遇到的标头的非标准值的信息,请求的非付款部分中的非ASCII字符,缺少CRLF标签(\ r \ r \ n \ r \ f \ \ n)和其他分析的问题(\ r \ r \ n \ r \ n)和其他分析。 Hfinger使用名称hfinger创建了自己的记录器,但实际上没有事先配置日志信息被丢弃。如果要接收此日志信息,请在调用Hfinger_Analyze之前配置Hfinger Logger,将日志级别设置为logging.info,将日志处理程序配置为您的需求,将其添加到Logger中。 HFINGE_ANALYZE功能DocString中提供了更多信息。

Fingerprint creation​

指纹基于从请求提取的功能。完整列表中特定功能的使用取决于从预定义列表中选择的报告模式(有关报告模式的更多信息在这里)。下图代表在默认报告模式下创建示例性指纹。
hfinger指纹http请求-1.png

分析请求的三个部分以提取信息: URI,标头结构(包括方法和协议版本)和有效载荷。指纹的特定特征是使用|分开的(管道)。示例IS:生成的最终指纹
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-AS/AC-EN:ID/CO-EN:ID/CO-3:KE-AL/CO-TY3333333333333:TE-PL
在指纹中以外观顺序描述了特征的创建。
首先,提取URI特征: * URI长度表示为对数的10个长度的基础,圆形为整数(示例中的URI为43个字符,log10(43)≈2), *目录数量, *目录数,(示例中,有3个目录), *平均目录,是平均值,固定为一个固定的固定时间,是一个固定的群体长度,该算法是一个固定的群体,该算法是实际的10个,实际上是10个,实际上是10个,实际上是10个,实际上是10个目录。 the example There are three directories with total length of 20 characters (6+6+8), so log10(20/3)≈1), * extension of the requested file, but only if it is on a list of known extensions in hfinger/configs/extensions.txt, * average value length represented as a logarithm with base 10 of the actual average value length, rounded to one decimal point, (in the example two values have the same length of 4 characters, what is显然等于4个字符,log10(4)≈0.6)。
其次,分析标头结构功能: 请求方法编码为方法(PO)的前两个字母, *协议版本编码为整数(1.1版1.1版1.1版,版本为1.0,版本为0.9,为0.9), *标题的顺序, *标题的顺序, *和流行的标题及其值及其值。
为了在请求中表示标题的顺序,例如,根据Hfinger/configs/headerslow.json中的架构编码每个标头的名称,例如,用户代理标头被编码为US-AG。编码名称由,如果标题名称不是从上限字母开始(或分析化合物编码等复合标题时的任何部分),则将编码表示为!如果标题名称不在已知的标题列表中,则使用FNV1A哈希(FNV1A Hash)进行哈希,并且哈希被用作编码。
当分析流行标题时,请检查请求是否出现在其中。这些标题为: 连接接受编码内容编码 CACHE-CONTROL * TE * ACCEPT-CHARSET * content-type 接受接受接受语言
当在请求中找到标题时,将根据典型值表检查其值,以创建对header_name_representation的对成对。标头的名称根据hfinger/configs/headerslow.json中的架构编码(如前所述),并且根据存储在hfinger/configs目录或configs.py文件中的架构编码该值,取决于标题。在上面的示例中,接受为AC及其值/为AS-AS(ASTERISK-ASTERKISK),提供AC:AS-AS。对在请求中以外观顺序插入配对,并使用/进行界定。如果在编码表中找不到标题值,则使用FNV1A哈希进行哈希。
如果标题值由多个值组成,则将它们进行令牌化以提供界定的值列表,例如Accept:/,Text/*将提供AC:AS-AS,AS,Te-As。但是,在此开发点,如果标题值包含一个“质量值”标签(q=),则使用其FNV1A哈希编码整个值。最后,使用其FNV1A哈希直接编码用户代理和接受语言标头的值。
最后,在有效载荷中,有: 的存在非ASCII字符,并用字母n表示,否则有效载荷的Shannon熵(圆形为一个整数*和有效负载长度)表示为对数,其底数为10个实际有效载荷长度的基础10,圆形为一个小子。

Report modes​

Hfinger以五个报告模式运行,在指纹中表示的功能不同,因此从请求中提取的信息。 These are (with the number used in the tool configuration): * mode 0 - producing a similar number of collisions and fingerprints as mode 2, but using fewer features, * mode 1 - representing all designed features, but producing a little more collisions than modes 0, 2, and 4, * mode 2 - optimal (the default mode), representing all features which are usually used during requests' analysis, but also offering a low number of collisions and generated指纹, *模式3-从所有模式产生最低数量的生成的指纹,但达到最高数量的碰撞, *模式4-提供最高的指纹熵,但也比模式0-2产生更多的指纹。
选择模式以优化Hfinger的功能,以识别恶意软件系列与生成的指纹数量。模式0、2和4提供了恶意软件家族之间类似数量的碰撞,但是,模式4产生的指纹比其他两个要多。模式2代表比模式0的请求功能更多,其生成的指纹和碰撞数量可比。模式1是唯一代表所有设计功能的模式,但与模式0、1和4相比,它的碰撞数量将近两次。模式3的指纹至少比其他模式少两次,但它引入了大约9倍的碰撞。所有设计功能的描述都在这里。
模式由特征(在指纹中的外观顺序)组成: 模式0: *目录数, *平均目录长度表示为整数, *请求文件的扩展 平均值长度表示为float, * float, * ever of float, * ever of tloaters, *流行的标头及其值, * PAIRE LONDAL及其值, * PAIRE LONCAL LENVES代表浮点。 * mode 1: * URI length represented as an integer, * number of directories, * average directory length represented as an integer, * extension of the requested file, * variable length represented as an integer, * number of variables, * average value length represented as an integer, * request method, * version of protocol, * order of headers, * popular headers and their values, * presence of non-ASCII characters, * payload entropy represented作为整数, *有效载荷长度表示为整数。 *模式2: * uri长度表示为整数, *目录数, *平均目录长度表示为整数, *延长所请求的文件的扩展, *平均值长度表示为float表示, *请求方法, * repoction- * soptast ofstroop, * sobles of标题的订单, *流行标题及其价值, *均值范围为无用的范围,是一个无效的载荷, *如有有效载荷为作为一个余额,作为一个余数,作为 fore lofe n fore note lofe n fore to lobal to lobal to lofe n fore n fore n fore to lofe to lofe noce tlo longe to * to lofe tlo。 *模式3: * URI长度表示为整数, *平均目录长度表示为整数, *请求文件的扩展名, *平均值长度表示为整数, *标头的顺序。 * mode 4: * URI length represented as a float, * number of directories, * average directory length represented as a float, * extension of the requested file, * variable length represented as a float, * average value length represented as a float, * request method, * version of protocol, * order of headers, * popular headers and their values, * presence of non-ASCII characters, * payload entropy represented as a float, * payload length表示为浮子。
 
后退
顶部