Skip to content

网络空间测绘

cert-skills 的测绘能力不是"扫一个站",而是一条发现 → 指纹化 → 归类 → 拓扑 → 追踪的流水线,专为资产盘点、C2 检测、攻击面管理设计。

测绘三段式

批量扫描:map-scan

bash
# 按主机
cert-skills map-scan --hosts a.com,b.com,c.com --ports 443 -o json

# 按 CIDR
cert-skills map-scan --cidrs 192.0.2.0/30 --ports 443,8443

# 全参数
cert-skills map-scan \
  --hosts a.com,b.com \
  --cidrs 10.0.0.0/24 \
  --ports 443 \
  --concurrency 100 \
  --timeout 5 \
  --rate-limit 50 \
  --retries 2 \
  --server-name example.com   # SNI 覆盖

每个目标采集:证书链(含 Raw DER)、TLS 版本、密码套件、SNI。默认 InsecureSkipVerify——测绘场景需要看到自签证书和 IP 证书,不能因校验失败就跳过。

输出含测绘摘要:去重统计、按六维聚合、信任拓扑、时间线。并发模型见 批量扫描与拓扑

离线测绘:map-parse

已经有一堆证书文件(比如从其他扫描器导出的),想复用同一套测绘摘要逻辑:

bash
cert-skills map-parse *.crt *.pem
cert-skills map-parse ./certs/ --extensions

零网络,纯本地解析,产出与 map-scan 相同结构的去重/聚合/拓扑摘要。

三个 map 命令的分工

  • map-scan在线拨号采集,输入主机/CIDR
  • map-parse离线解析已有证书文件,输入 .crt/.pem
  • map-timeline跨周期汇总,输入多次 detect-change --save 的快照 JSON

三者产出结构一致,可串联:先 map-scan 采集 → map-parse 复用证书文件做合规审计 → detect-change 定期采快照 → map-timeline 看轮换历史。

生命周期时间线:map-timeline

bash
cert-skills map-timeline snapshots/*.json

从多次 detect-change --save 留下的 CertSnapshot JSON 构建证书生命周期时间线:什么时候续期、什么时候换钥、什么时候换 CA。适合长期监控资产轮换。

CT 日志:发现历史签发

证书透明度(CT)日志记录了几乎所有公开 CA 签发的证书,是测绘的"历史档案库"。

bash
# 按域名搜 CT(含通配子域)
cert-skills search-ct example.com

# 子域枚举:按 issuer 分组、标识泛解析、区分 Active/Expired
cert-skills ct-enumerate example.com

# 按证书指纹精确搜
cert-skills search-ct-fingerprint <sha256>

ct-enumerate 是测绘侦察利器——一张证书的 SAN 往往暴露多个内部子域。底层走 crt.sh API,详见 CT 日志与子域枚举

TLS 指纹:JARM / JA3

bash
# JARM:服务端 TLS 实现画像,识别 C2/CDN/VPN
cert-skills jarm suspicious-host.com

# JA3/JA3S:客户端/服务端 Hello 画像
cert-skills ja3 suspicious-host.com
指纹看什么画像对象
JARM10 个探针下服务器的 TLS 响应服务端实现(Nginx? Cloudflare? Cobalt Strike?)
JA3客户端 ClientHello 字段客户端(浏览器? curl? Metasploit?)
JA3S服务端 ServerHello 字段服务端 Hello

JA3 的局限

Go 的 tls.ConnectionState 不暴露原始 ClientHello,cert-skills 的 JA3 反映的是"我们发出的 Hello",而非任意客户端的。JA3S 才是真正对服务端画像。详见 JA3/JA3S 指纹

指纹库匹配:match-fp

bash
# 采集目标的 JARM/JA3/cert/SPKI 全套指纹,匹配已知服务库
cert-skills match-fp suspicious-host.com

# 离线按单个 hash 匹配
cert-skills match-fingerprint-by-hash --type jarm --hash 07d14d16d21d21d07c42d41d00041d24de...

内置 ~60 条已知服务指纹(Cloudflare/AWS/GCP/Azure/Cobalt Strike/Metasploit/Sliver/Nginx/Apache/Postfix/MySQL…),按 cdn/cloud/c2/vpn/web/mail/database/other 分类。可加载自定义 JSON 扩展。匹配算法见 指纹库匹配

证书信任域名:get-trusted-domains

bash
cert-skills get-trusted-domains example.com

提取证书 SAN 里所有信任的域名,含泛解析展开(*.example.com → 列出覆盖范围)与基础域名提取。测绘时用来回答"这张证还能保护哪些域"。

证书变更检测:detect-change

bash
# 首次采集并保存快照
cert-skills detect-change example.com --save --snapshot-dir ./snaps

# 再次运行,对比上次快照
cert-skills detect-change example.com --snapshot-dir ./snaps

对比 CertSHA256SPKISHA256IssuerJARMHashNotAfter,推断变更类型:

这是 map-timeline 的数据来源,也是 workflow-cyberspace-mapping-sweep 的"追踪轮换"阶段。

其他测绘辅助

命令作用
verify-hostname <domain>证书主机名匹配(RFC 6125)
detect-ev <domain>是否 EV 证书(策略 OID)
check-wildcard <domain>泛解析证书模式与风险

下一步