工作流:网络空间测绘扫描
场景:批量采集一批主机或 CIDR 范围的 TLS 证书,指纹化后匹配已知服务库(识别 C2/CDN/VPN),并随时间追踪证书轮换。这是 cert-skills 测绘能力的核心流水线。
适用边界
- ✅ 资产盘点、攻击面管理、C2 基础设施发现、CDN/云资产归集
- ✅ 长期监控自有证书轮换合规性
- ❌ 单个可疑主机深度取证(用 证书事件应急取证)
- ❌ 仅查历史签发记录(直接用
search-ct即可)
四阶段流水线
Phase 1 — 批量采集(map-scan)
bash
cert-skills map-scan \
--hosts a.com,b.com,c.com \
--cidrs 192.0.2.0/24 \
--ports 443,8443 \
--concurrency 100 \
--timeout 5 \
--rate-limit 50 \
-o json > scan.json产出:每目标的证书链(含 Raw DER)+ TLS 版本 + 套件 + SNI,外加测绘摘要(去重、聚合、拓扑)。默认 InsecureSkipVerify,能看到自签/IP 证书。
扫公网必须限速
扫公网大范围 CIDR 不设 --rate-limit 会触发 IDS/封禁,甚至被当成扫描攻击。建议 --rate-limit 50 起步,根据目标网络承载调整。--timeout 5 + --retries 2 是探测存活与稳定性的平衡点。
Phase 2 — 指纹化并匹配已知服务
对采集到的目标逐个跑指纹化与匹配:
bash
for host in a.com b.com c.com; do
cert-skills jarm "$host" -o json
cert-skills ja3 "$host" -o json
cert-skills match-fp "$host" -o json # 自动采集全套指纹并查库
donematch-fp 命中库会返回 Label + Category + Confidence,例如:
json
{ "matches": [{ "label": "Cobalt Strike Default", "category": "c2", "confidence": 0.9 }] }c2 类别命中 = 红队/C2 框架特征,重点跟进。
c2 命中不是定罪证据
JARM 相同可能是同款合法软件(如都用 Nginx/Apache)。c2 命中是强信号不是定罪证据——需结合置信度(≥0.9 才算高)、端口行为、JA3、证书特征综合判断。误报会把合法运维当攻击者。
Phase 3 — 已采集证书的离线分析(map-parse)
Phase 1 产出的证书可离线再分析,不必重新拨号:
bash
# 把扫描导出的证书喂给 map-parse
cert-skills map-parse ./exported-certs/ -o json也可对每张证跑合规检查:
bash
for cert in ./exported-certs/*.pem; do
cert-skills check-distrusted-ca "$cert"
cert-skills check-key-usage "$cert"
cert-skills check-policy "$cert"
donePhase 4 — 随时间追踪轮换
bash
# 定期(如每周)对同一批目标采集快照
cert-skills detect-change a.com --save --snapshot-dir ./snaps
cert-skills detect-change b.com --save --snapshot-dir ./snaps
# 任意时刻对比,看哪些资产换了证/换了钥/换了 CA
cert-skills detect-change a.com --snapshot-dir ./snaps
# 汇总成生命周期时间线
cert-skills map-timeline ./snaps/*.json变更类型:renewed(续期)、replaced(换钥/换 CA)、expired、new、unchanged。
detect-change 必须配 --save
不 --save 就没快照,下次跑找不到对比基准。建议固定 --snapshot-dir,按目标名 + 时间戳自动落盘,跨周期对比才有数据。详见 证书变更检测。
完整数据流
反模式
- 🚫 扫描公网大范围 CIDR 不限速——
--rate-limit必设,避免触发 IDS/封禁。 - 🚫 只看叶子证书不看链——中间 CA 信息(issuer、pathLen)是测绘聚类的重要维度。
- 🚫 指纹库不更新——C2 框架迭代快,定期
fp-db load新特征。 - 🚫 检测到 C2 指纹就下结论——JARM 相同可能是同款软件(如都用 Nginx),需结合上下文与
c2类别置信度判断。 - 🚫 detect-change 不
--save——没快照就没法跨周期对比。