FingerprintHub 指纹库规则说明与使用指南
标题:FingerprintHub:社区化指纹库的设计、规则与贡献指南
引言 FingerprintHub 是一个以安全研究学习为目的而建立的指纹库项目,它的存在旨在让管理和使用指纹规则变得更加简单、透明与协作化。该仓库承载的是侦查守卫(observer_ward)指纹库的愿景,强调社区驱动、开源协作,以及对指纹规则的持续完善与更新。本文将带你全面了解 FingerprintHub 的定位、核心规则与组件、贡献流程,以及它在开源生态中的应用场景与反馈机制。为确保信息的准确性,以下内容尽量忠实于原始描述与示例。
一、项目定位与生态关系
- FingerprintHub 的定位
- 一个社区化的指纹库,旨在让指纹规则的管理、更新与使用更加高效、规范与可追溯。
- 规则是以 YAML 形式编写的可自定义请求集合,支持通过 GitHub Actions 自动更新指纹库。
- 相关生态关系
- observerward:该仓库作为侦查守卫的指纹库组成部分,observerward 是一个基于社区的指纹识别工具。
- 其他工具链与集成:提示了若你在寻找 Go 语言的 SDK,可以参考 chainreactors 的 neutron;同时,旧版指纹规则已存档在 FingerprintHub 的历史分支中,以便回溯与对照。
- 项目愿景与开源路径:未来一段时间将陆续开源更多工具,鼓励社区贡献。
二、规则说明的总体框架
- 规则的核心目标
- 通过灵活的请求、探针、匹配器与提取器组合,识别目标系统的指纹信息,帮助研究者和安全团队快速定位服务与组件。
- 规则的示例
- 以识别 ThinkPHP 为例的规则,展示了规则文件的典型结构、字段和匹配方式。规则包括基础信息、探针、匹配器、提取器等模块的协同工作方式。
- 关键示例片段(简化版):
- id: thinkphp
- info: name: thinkphp
- author: cn-kali-team
- tags: detect,tech,thinkphp
- severity: info
- http: - method: GET path: - '{{BaseURL}}/' matchers: - type: favicon hash: - f49c4a4bde1eec6c0b80c2277c76e3db
- type: word words: - href="http://www.thinkphp.cn">thinkphp
- thinkphpshowpage_trace
- case-insensitive: true
- - type: word words: - 'x-powered-by: thinkphp' part: header case-insensitive: true
- 规则设计的核心参考
- 设计规则时参考 nuclei 的模板编写规范,将规则拆分为三大块:基础信息、探针、匹配器、提取器。
- 基础信息:保存指纹的基本信息,以及潜在的漏洞关联关系。
- 探针:自定义发送数据包,覆盖 HTTP 与 TCP 客户端两种传输方式。
- 匹配器:关键词、正则、favicon 哈希等,用于对探针响应进行判定。
- 提取器:从响应中抽取版本信息等关键信息,常用正则、JSONPath 等。
三、ID 与基础信息的规范
- 规则结构的核心字段
- id:规则唯一标识,命中后会在终端输出中显示,不支持中文。
- name:规则名称,常与 id 相同或具有知名别名,支持中文。
- author:作者列表,用逗号分隔的字符串。
- tags:标签列表,用逗号分隔的字符串。
- severity:严重程度,枚举值包括 unknown、info、low、medium、high、critical。
- metadata:一个 HashMap,用于存放任意类型的元数据,包含 CPE 解析后的厂商 vendor、产品 product、以及是否经过验证 verified 等信息。
- description、reference:描述与参考链接的可选字段,有助于漏洞关联和深入研究。
- metadata 的重要性
- metadata 是指纹与漏洞关联的关键纽带。理解 metadata 的结构与用途,是掌握漏洞关联的关键。
- CPE(Common Platform Enumeration)是一个标准化格式,用于描述软件与硬件的身份信息,NVD 用它来精确描述漏洞影响的产品与版本。通过对 CPE 的解析,我们可以追溯到特定厂商与产品,从而在规则中进行对应的漏洞核验与关联。
四、探针(Probe)的设计与使用
- 探针的定位
- 探针是指纹识别流程中的核心载荷,分为 http 探针和 tcp 探针,类似于 Nmap 的服务指纹“probe”,但在 nuclei/指纹体系中通常被称为探针。
- http 探针示例
- 简单的 GET 请求,携带自定义头信息或路径,目的是触发潜在的指纹信号。
- 示例片段:
- http: - method: GET path: - '{{BaseURL}}/' headers: Cookie: rememberMe=admin;rememberMe-K=admin
- 多路径的探针,覆盖主页及子路径,从而提高命中概率。
- path: - '{{BaseURL}}/' - '{{BaseURL}}/nacos/'
- tcp 探针示例
- 使用 Nmap 风格的服务指纹输入输出形式,触发对等端的响应以便后续匹配。
- 示例片段:
- name: "null" inputs:
- data: "" read: 16 host: - "{{Hostname}}"
- 探针字段要点
- name:探针名称,宜与 Nmap 的 probe_name 对齐。
- inputs.data:要发送的数据,注意要进行适当转义。
- inputs.read:读取响应的字节数限制,避免过度占用资源。
- host:目标主机信息的占位符。
- 探针的组合优势
- 通过多样化的探针组合,可以覆盖不同服务的暴露面与实现细节,提升指纹识别的鲁棒性与覆盖率。
五、匹配器(Matchers)的规则与应用
- 匹配器的职责
- 匹配器位于探针之下,负责对探针响应进行判定。当前版本支持以下几类:
- favicon:通过图标哈希进行指纹识别,支持多种哈希算法(如 MD5、MMH3)。
- word:通过包含的关键词进行判断,支持大小写敏感与不敏感。
- regex:通过正则表达式对响应文本进行高灵活度的匹配。
- 匹配器字段要点
- name:匹配名称(可选),若非空且命中将返回。
- type:匹配类型,word、favicon、regex 等。
- part:匹配区域,header 或 body,默认是 body。
- favicon.hash:若 type 为 favicon,则列出哈希值列表,任意命中即为命中指纹。
- word.words:关键词列表,支持单个或多个关键词的组合。
- case-insensitive:是否忽略大小写,默认 false。
- negative:是否对匹配结果取反,默认 false。
- condition:匹配关系,or 或 and。当为 or 时,一旦命中就返回;为 and 时需全部条件同时命中才返回。默认是 or。
- 关键词示例与策略
- 以 httpbin.org 为目标的规则演示了对 body 的关键字判断,通常用于服务识别的快速判定。
- 多关键词组合的场景如在 Tomcat 的指纹中,多个关键词必须同时命中才算识别成功,这时使用 condition: and 来表达。
- favicon 哈希的使用
- favicon 哈希允许同时配置多个哈希值,只要命中一个即认定为指纹命中。
- 不需要在探针中显式写明 favicon 的路径,工具会在主页 HTML 中自动提取 favicon 链接。
六、提取器(Extractors)的能力与示例
- 提取器的作用
- 提取器用于从响应中提取版本号、产品信息等关键信息,帮助在结果中返回结构化的字段。
- 正则提取(regex)注意事项
- 正则表达式应尽量少用,初始化编译成本高,若规则数量较多应当将正则集中放在提取器中,以避免重复编译。
- 例子:用于识别 SSH 服务的提取器,通过正则将版本号与协议信息抽取出来,映射到 metadata 的字段。
- 提取组的编号(如 $1、$2)会对应到 metadata 的键值,最终结果中可看到 version、info 等字段的提取结果。
- 与提取组相关的可视化示例(如正则提取组在在线平台上的可视化)通常包含提取组的对应关系示意图,例如示意图会标注提取组 2.0、9.7 对应到元数据中的版本与描述。
- 提取器示例片段:
- type: regex
- regex: (?x)^SSH-([\d.]+)-OpenSSH[-]([\w.]+)\s*\r?\n
- jsonpath 提取(jsonpath)
- 类似于 jq 的用法,通过 jsonpath 从 JSON 响应中提取字段。
- 示例:从 {"origin":"1.1.1.1"} 提取 origin,最后在结果中返回 ip: ["1.1.1.1"]。
- 提取器配置示例:
- type: json name: ip json: - '.origin'
- 提取后的元数据映射
- 提取器的输出直接映射到 info.metadata 的键值对中,帮助实现跨规则的统一识别与后续的漏洞关联。
七、如何贡献指纹规则
- 验证单个指纹的有效性
- 为了方便验证编写的 YAML 规则,可以使用 -p 指定要验证的 YAML 文件,-t 指定测试目标对指纹进行验证,并开启 --debug 以获得更详细的调试信息。
- 示例命令(简化版):
- ./observerward -t http://httpbin.org -p observerward/examples/json.yaml --debug
- 实践中的调试输出要点
- 调试输出会显示加载的探针数量、目标载入情况、优化后的探针数,以及实际发起的请求和收到的响应等信息,便于你定位规则中的问题。
- 提交指纹规则的流程
- Fork 项目并克隆到本地仓库。
- 配置 upstream 以便跟随上游更新。
- 在本地创建新分支(不要直接在 main 分支修改)。
- 复制并修改指纹规则文件,命名要与组件名一致,修改 rule 的 name 字段。
- 提交 Pull Request,等待合并指纹规则。
- 当你的贡献被合并后,其他人即可在 FingerprintHub 中使用该规则。
- 贡献过程中的要点
- 保证 YAML 的格式正确,避免语法错误导致规则不可用。
- 规则尽量将基础信息、探针、匹配器、提取器的逻辑清晰分离,便于后续维护与扩展。
- 如遇到与标签、版本等相关的冲突,及时向维护者沟通,共同完善 metadata 的字段设计。
八、谁在使用 FingerprintHub
- FingerprintHub 的应用生态正在逐步扩大,以下为已知的使用者与合作方示例,强调社区开放性与互通性:
- observer_ward
- nuclei(知名的漏洞扫描引擎)
- nemo_go
- afrog
- ShuiZe_0x727
- z0scan
- fingers
- 通过这些项目的集成,可以看到 FingerprintHub 正在成为一个连通各大工具的指纹规则中枢,帮助研究人员跨工具协作、共享规则并提升识别的一致性。
九、指纹反馈与改进
- 现状与挑战
- 指纹库的收集源自互联网,尽管经过人工整理,仍存在一些需要改进的情形:
- 误报:指纹不够精确时可能导致误判。
- 组件重复:不同名称可能指向同一个组件的情况。
- 识别盲区:部分指纹规则未覆盖到特定组件。
- 改进路径与反馈渠道
- 当出现上述情况时,可以提交 GitHub Issue,附上演示 URL 或首页的 HTML 源码,以便团队人工修正指纹规则。
- 社区成员也可以参与验证、修订规则,促进规则库的持续完善。
十、尊重与致谢
- 面向社区的声明与安全边界
- 项目明确声明其技术、思路与工具仅用于安全学习与合规的交流,禁止用于非法用途与牟利活动,后果自行承担。
- 使用镜像与合作伙伴的致谢
- 感谢 observerward、nuclei、nemogo、afrog、ShuiZe_0x727、z0scan、fingers 等社区工具的协作与互操作性。
- 对所有参与者的感谢
- 感谢关注与支持 FingerprintHub 的研究者、开发者与开源社区成员,正是他们的贡献让指纹识别工具生态更加开放、透明与安全。
十一、附留图片与示意
- 在本文的“提取器”与“正则提取”的部分,我们引用了来自原始示例的视觉辅助图像,用以帮助读者理解提取组在规则中的映射关系。请在需要时查看下列图片引用:
- 提取组示意图(正则提取组的可视化示例):图片请参阅 images/regex.png
- 该图像直观展示了正则表达式中的提取组如何与 metadata 中的字段相对应,便于理解提取器的工作原理与输出映射。
结语 FingerprintHub 作为一个社区驱动的指纹库,承载着协作、透明与可持续发展的愿景。它将规则的设计、探针的灵活性、匹配器的精准度以及提取器的可观测性结合起来,形成一个相互印证、可追溯的指纹识别生态。通过清晰的字段定义、严格的规则结构与开放的贡献流程,FingerprintHub 使得不同工具和社区成员能够在同一规则语义下协同工作。无论你是安全研究者、开发者还是运维从业者,参与到 FingerprintHub 的社区中来,既能提升自身的指纹识别能力,也能为整个开源安全生态贡献力量。
如果你愿意,随时可以加入贡献流程,提交你的发现与改进。让我们共同推动社区化指纹库的发展,让管理和使用指纹规则的体验更加直观、可靠与高效。感谢每一位为安全研究与开源事业付出的伙伴。
Enjoying this project?
Discover more amazing open-source projects on TechLogHub. We curate the best developer tools and projects.
Repository:https://github.com/0x727/FingerprintHub
GitHub - 0x727/FingerprintHub: FingerprintHub 指纹库规则说明与使用指南
FingerprintHub 是一个以安全研究学习为目的而建立的指纹库项目,旨在让管理和使用指纹规则变得更加简单、透明与协作化。该仓库承载的是侦查守卫(observer_ward)指纹库的愿景,强调社区驱动、开源协作,以及对指纹规则的持续完善与更新。本文全面介绍 FingerprintHub 的定位、核心规则与组件、贡...
github - 0x727/fingerprinthub

