Skip to content

指纹库

采集到的 TLS 指纹要能"认出是谁"才有价值。cert-skills 内置一个指纹库,把 JARM/JA3/cert/SPKI 哈希映射到已知服务(Cloudflare、Cobalt Strike 等)。

命令一览

bash
cert-skills fp-db                         # 父命令
cert-skills fp-db list                    # 列出全部条目
cert-skills fp-db stats                   # 按类型/类别/来源统计
cert-skills fp-db category c2             # 按类别查询
cert-skills fp-db load fingerprints.json  # 加载自定义指纹

cert-skills match-fp example.com          # 采集+匹配
cert-skills match-fingerprint-by-hash --type jarm --hash <hash>  # 离线匹配

四类指纹 × 八大类别

内置 ~60 条已知服务指纹,覆盖:

  • CDN/Cloud:Cloudflare、AWS、GCP、Azure
  • C2(红队/C2 框架):Cobalt Strike、Metasploit、Sliver
  • Web/服务:Nginx、Apache、Postfix、MySQL
  • 客户端 JA3:主流浏览器、HTTP 客户端

红队重点:c2 类别

红队场景下,c2 类别是重点——用 JARM 快速识别可疑主机是否跑着已知 C2 框架(Cobalt Strike、Metasploit、Sliver 等)。命中后需结合上下文确认,避免误报。

匹配流程:match-fp

bash
cert-skills match-fp suspicious-host.com

MatchFingerprints 顺序采集四种指纹,每路结果查库:

匹配是精确等值(归一化后 type+hash 全等即命中),不是模糊匹配。所以指纹库的价值在于覆盖广度——这也是为什么支持加载自定义指纹。

离线匹配

已有单个 hash,不联网查库:

bash
cert-skills match-fingerprint-by-hash --type jarm --hash 07d14d16d21d21d07c42d41d00041d24de...
cert-skills match-fingerprint-by-hash --type spki --hash <sha256>

--type 支持 jarm / ja3 / cert_sha256 / spki。适合把外部工具采集的指纹拿进来比对。

加载自定义指纹

把私有知识库(你内部资产的特征、新发现的 C2 指纹)追加进库:

bash
cert-skills fp-db load my-fingerprints.json

JSON 格式:

json
[
  {
    "type": "jarm",
    "hash": "07d14d16d21d21d07c42d41d00041d24de...",
    "label": "Internal App Gateway",
    "category": "web",
    "confidence": 0.95,
    "source": "internal-asset-inventory"
  }
]

isDuplicateFingerprinttype+hash+label 去重,sync.RWMutex 保证并发安全。加载后立即对所有后续匹配生效。

数据库统计

bash
cert-skills fp-db stats

type(jarm/ja3/spki)、category(cdn/cloud/c2/…)、source(builtin/custom)分桶计数,评估覆盖度。

SPKI 与证书绑定

ComputeCertSPKIHash = SHA256(cert.RawSubjectPublicKeyInfo),即对 SPKI 的 DER 编码做 SHA-256——这正是 HPKP(HTTP Public Key Pinning) 的标准算法。

内置 SPKI 哈希多为占位

内置库里的 SPKI 哈希多为示例占位,真实生产匹配以 JARM/JA3 为主。SPKI 字段的真正价值在自定义库——录入你内部资产的 SPKI 做内部识别。详见 指纹库匹配

下一步