保姆级教程!ServiceScan指纹规则编写指南

admin 2026-01-17 01:39:01 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详解ServiceScan指纹规则编写指南,涵盖YAML结构、顶层字段及rules数组配置。通过OpenSSH与Dubbo实例演示正则提取版本与自定义探测包编写技巧,提供从抓包到验证的完整操作流程,帮助用户精准识别各类网络服务。 综合评分: 90 文章分类: 安全工具,红队,渗透测试


cover_image

保姆级教程!ServiceScan 指纹规则编写指南

M-SEC 社区 M-SEC 社区

MSEC运营号

2026年1月16日 10:26 陕西

超详细的 ServiceScan 指纹编写教程

在服务扫描与识别的场景中,自定义指纹规则是精准识别目标服务的核心环节。今天给大家带来 ServiceScan 指纹规则的全套编写指南,从基础结构到实战示例,手把手教你搞定自定义服务识别规则!

1

指纹规则的整体结构

ServiceScan 的指纹规则使用 YAML 格式编写,一般对应一个文件识别一种服务或一个产品。典型结构如下:

probe_name:TCP_NULLasset_id:Assets-2025-123product:ExampleProductprotocol:exampleports:12sslPorts:5678rule  -action:find    type:regex    pattern:"ExampleServer/(\\d+\\.\\d+\\.\\d+)"  -action:versi      group:1

可以看出,指纹规则的核心由两部分组成:

  • 基本信息字段:描述探测方式、服务名称、协议等

  • rules 数组:定义如何从响应中“找到特征 + 提取信息”

2

顶层字段说明

01

probe_name:指定探测方式

作用:定义触发服务响应的 TCP 探测数据包类型,分为内置和自定义两类。

内置探测包(直接用):

  • TCP_NULL:发送空数据包,等待被动回应(适合主动返回 Banner 的服务,如 SSH/FTP);
  • TCP_GetRequest:发送 GET/ HTTP /1.0\r\n\r\n(适合 HTTP 类服务);
  • TCP_HTTPOptions/TCP_GenericLines /TCP_RTSPRequest:适配不同协议的标准化请求。

自定义探测包:名称必须以 TCP_ 开头,配合 probe_data(十六进制 payload)使用

02

finger_name  /product

/ product_name:服务标识字段

作用:用于描述“识别到的服务/产品名称”,在不同版本或不同规则模板中可能有命名差异。

  • 参考项目现有规则(如 apache-dubbo.yaml):

    用finger_name+product_name;

  • 完全自定义:用 product 即可。

示例

finger_name:

pure-ftpd

指纹名称,用在

单一YAML中

product_name:

pure-ftpd

产品名称字段

的一种写法

product:

mosquitto

README示例中

采用的字段名

03

protocol:标记协议类型

作用:填写服务对应的协议标识(如 http / ftp / ssh / mqtt / apache-dubbo),方便扫描结果过滤与归类。

04

asset_id/ports/sslPorts:可选字段

  • asset_id:业务侧资产编号,用于关联外部资产管理系统;
  • ports/sslPorts:指定指纹适用的明文 / SSL 端口(单整数 / 整数列表),不指定则适配通用端口。

3

rules 数组:识别规则的核心

rules 是按顺序执行的规则集合,至少包含 1 条 find 规则(确认服务存在),可选 version 规则(提取版本)。

1. action:规则动作

  • find:判断是否匹配目标服务,不满足则指纹不命中;
  • version:从响应中提取版本号(需配合正则捕获组)。

2. type:匹配方式

  • regex:正则匹配(支持复杂模式、版本提取,需注意转义);
  • search:简单包含匹配(性能好,适合纯字符串校验);
  • match:严格匹配(视实现而定,用于精准校验)。

3. pattern:匹配内容

  • regex 类型:合法正则表达式,YAML 中 \d 需写为 \d;
  • search 类型:普通字符串,大小写敏感(以实现为准)。

4. group:捕获组编号

仅配合 action: version 使用,指定从哪个正则捕获组提取版本。

示例(OpenSSH 识别 + 版本提取)

rules:  -action:find    type:regex    pattern:"OpenSSH_(\\d+\\.\\d+(p\\d+)?)"  -action:version    group:1

4

自定义指纹完整示例

当前项目示例:Apache Dubbo

示例

Dubbo服务响应

5

避坑指南 & 编写建议

6

快速编写总结

11.8

流程步骤

  1. 🕵️ 抓包:获取服务 Banner / 响应内容
  2. 📦 选探测方式:TCP_NULL / 内置请求 / 自定义 payload
  3. 📝 填顶层字段:服务名 / 协议 / 端口等
  4. 🔍 写 rules:先 find 确认服务,再 version 提版本
  5. ✅ 验证:放入规则目录,运行扫描测试

掌握以上内容,就能轻松编写符合规范的 ServiceScan 指纹规则,精准识别各类服务啦!若需示例解析等更详细内容关注公众号加入社区交流群获取完整说明书哦~ 如果有其他问题,欢迎在评论区和社区交流讨论~

ServiceScan下载地址:

https://github.com/m-sec-org/servicescan


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:MSEC运营号 M-SEC 社区 M-SEC 社区《保姆级教程!ServiceScan 指纹规则编写指南》

评论:0   参与:  0