文章总结: 本文详解ServiceScan指纹规则编写指南,涵盖YAML结构、顶层字段及rules数组配置。通过OpenSSH与Dubbo实例演示正则提取版本与自定义探测包编写技巧,提供从抓包到验证的完整操作流程,帮助用户精准识别各类网络服务。 综合评分: 90 文章分类: 安全工具,红队,渗透测试
保姆级教程!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
流程步骤:
- 🕵️ 抓包:获取服务 Banner / 响应内容
- 📦 选探测方式:TCP_NULL / 内置请求 / 自定义 payload
- 📝 填顶层字段:服务名 / 协议 / 端口等
- 🔍 写 rules:先 find 确认服务,再 version 提版本
- ✅ 验证:放入规则目录,运行扫描测试
掌握以上内容,就能轻松编写符合规范的 ServiceScan 指纹规则,精准识别各类服务啦!若需示例解析等更详细内容,关注公众号加入社区交流群获取完整说明书哦~ 如果有其他问题,欢迎在评论区和社区交流讨论~
ServiceScan下载地址:
https://github.com/m-sec-org/servicescan
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:MSEC运营号 M-SEC 社区 M-SEC 社区《保姆级教程!ServiceScan 指纹规则编写指南》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论