HTTP-Basma 已上线,地址为 https://httpbasma.netomize.ca/
在网络安全领域,准确识别和刻画 Web 服务器对于威胁检测、漏洞评估和网络测绘至关重要。为此,我们推出 HTTP-Basma,一种新颖的主动指纹识别算法,它通过多层方法揭示独特的服务器画像,从而应对这一挑战。
主要特性: 精心构造的请求,揭示性的响应:HTTP-Basma 发送 8 个精心设计的 HTTP 探测请求,引出能够反映服务器配置的独特响应。 双重哈希,灵活多用。该算法生成两种哈希:
聚类与狩猎:这些哈希支持服务器聚类、识别独特服务器与相似服务器,并以更高的置信度追踪恶意行为者。
模块化设计,便于扩展:该算法的架构支持添加新的哈希变体,鼓励协作与适应性。
在本文中,我们首先综述 HTTP 指纹识别领域已有的重要工作,然后探讨该算法的功能、设计、架构和成果。此外,我们还将展示扫描 Majestic 前 100 万个网站所得出的引人注目的发现,包括对多种恶意软件家族的 C&C HTTP 服务器的识别与聚类。
HTTP-Basma 算法的核心思想在于发送 8 个带有不同要求的特制 HTTP 请求,以引出服务器的不同响应。获取服务器响应后,对 HTTP 状态行进行精细剖析,提取所有元素并进行最优编码。此外,还会检查服务器响应中的部分选定头部并进行编码。
它发送的请求类型如下:
在每个请求之后,分析服务器的响应以提取特定头部及其值。提取出的数据会经过进一步处理,包括剖析和编码,以生成可逆的指纹。
该算法工作原理的完整技术细节见所附论文。
这种模块化设计理念将每个请求指纹视为一个构建块,支持优雅的重构,并可以增加或减少任意请求的指纹。
指纹示例:
- verbosus fp: 011420958a0014514bd5221420958a221420958a221420958a2200001420958a22000000001f
- pacto fp: 02464ae8b7d86f82c9918e2c2b9d6b91
- note: false-positive rate (72/986,910)
- verbosus fp: 01142494d60914514bd522142494d6221420958a701420958a220000140e04922032c37f1609
- pacto fp: 020769322f3d94ac2f258ddf5ce08502
- note-1: false-positive rate 0
- note-2: tevedadav.site/43.209.165.126:443 (TLS)
- sample-(sha-256): 9aa1dec8dd12f8adc7fc1274e1958f3613450109ee8b4ec6442a0fcf06df0972
- verbosus fp: 01140a85e40014512f3612140a85e422140a85e422140a85e4220000140a85e4220000000001
- pacto fp: 0207292309a7a7e798e417d69df5f2a5
- note: false-positive rate (73/986,910)
- verbosus fp: 01140a85e4001320958a22142494d62214254c5e2214254c5e22080014254c5e220000000000
- pacto fp: 0202be780e1eaae0eaa6184e20c909b6
- note: false-positive rate (4/986,910)
- verbosus fp: 01140a85e4011320958a22142494d67214254c5e2214254c5e22080014254c5e220000000000
- pacto fp: 02cc5be6d05192e17de041538508bc22
- note: false-positive rate (38/986,910)
- verbosus fp: 01140a85e40914514bd522140a85e4721420958a701420958a220800140a85e4720000001609
- pacto fp: 0221b4e46bbd0e5c037f5a852ca3fdc0
- note: false-positive rate (6/986,910)
HTTP-Basma 是我开发的一个 C++ 工具,用于展示该算法的实用性和可行性。它利用 Chilkat 的库处理所有 HTTP socket 交互,并使用该库中的其他支持类。此外,该工具还包含一个 demangler 功能,可以剖析并逆向 verbosus 模糊哈希,输出一个全面的 JSON 对象,以及一个比较器功能,用于输出两个 verbosus 指纹之间的差异。
请注意,该工具的部分输出可能使用略有不同的探测编号,但底层顺序保持一致:P1->P1, P2->P2, P3->P3, P4->P4, P->P5, P6->P6F, P7->P6L, P8->P7a。
Usage:
HTTP-Basma [OPTION...]
-d, --domain arg domains/IPs (you may query multiple domains, comma separated)
-p, --port arg port number
-s, --ssl does the HTTP connection have to be carried over SSL/TLS?
-q, --qpath check domain with url path included (not recommended)
-w, --redirect enable/disable HTTP redirects. If disabled/false, only the next redirect is followed,
otherwise, all redirects are followed (default: true)
-t, --ctimeout arg socket connection timeout value in seconds (default: 1)
-g, --rtimeout arg socket read (from the server) timeout value in seconds (default: 1)
-e, --sleep arg the duration (in milliseconds) to pause between each request (default: 100)
-x, --proxy arg proxy config: <"socks4|socks5|http">,<domain>,<port>,<bool:direct_tls>,<login>,<pass>
all values are comma-separated. <direct_tls> is ignored with a non-HTTP proxy
-f, --file arg file with list of domains/IPs (requires "-c/--csv" or "-j/--json")
-P, --parallel Scan list of domains passed via the "-f/--file" option in parallel
-c, --csv save to csv file; if the option 'n' is not specified, the CSV filename will be auto
generated
-n, --csvfile arg name of the CSV file
-j, --json save to json file; if the option 'l' is not specified, the JSON filename will be auto
generated
-l, --jsonfile arg name of the JSON file
-r, --saveh save request response headers
-o, --pjson display fingerprint dissection to the console as a JSON object
-i, --demangle_json arg demangle a fingerprint into a detailed json format (you can have more than one, comma
separated)
-u, --demangle_txt arg output a concise text format of the fingerprint, comma-separated for multiple results
-C, --compare arg compare two verbosus fingerprints (comma-separated)
-a, --pacto arg obtain the Pacto fingerprint using Verbosus
-h, --help print usage
请求给定域名/IP 时,响应可保存为 CSV 或 JSON 文件,其中包含关于服务器响应头的大量信息以及每个探测的唯一指纹。
例如,要获取服务器 https://google.com 的指纹,并将结果保存到 JSON 和 CSV 文件,同时保存每个探测的 HTTP 响应头:
HTTPBasma.exe -d https://google.com --json --csv --saveh
在 Output 文件夹中,你会找到 CSV 文件 google_hb_results_2026-05-19_08-35-38_am.csv 和 JSON 文件 google_hb_results_2026-05-19_08-35-38_am.json。
该工具的反混淆功能 "-i/--demangle_json" 接收一个 verbosus 指纹,并重建每个探测的属性,输出一个全面的 JSON 对象。值得注意的是,在尝试逆向 FNV-1a 哈希时,反混淆器使用两个本地数据库:options.csv 用于允许的 HTTP 方法,status_line_db.csv 用于状态行原因短语。如果其中任一数据库文件缺失,相应的哈希逆向功能将自动禁用。这些数据库是通过扫描 Majestic 排名前 100 万的网站编译而成的。
对域名 example.com 的 verbosus 指纹进行反混淆:
HTTPBasma.exe --demangle_json 01140a85e40014514bd522142494d67214254c5e721420958a22020214254c5e720000001609