指纹库
采集到的 TLS 指纹要能"认出是谁"才有价值。cert-skills 内置一个指纹库,把 JARM/JA3/cert/SPKI 哈希映射到已知服务(Cloudflare、Cobalt Strike 等)。
命令一览
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
cert-skills match-fp suspicious-host.comMatchFingerprints 顺序采集四种指纹,每路结果查库:
匹配是精确等值(归一化后 type+hash 全等即命中),不是模糊匹配。所以指纹库的价值在于覆盖广度——这也是为什么支持加载自定义指纹。
离线匹配
已有单个 hash,不联网查库:
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 指纹)追加进库:
cert-skills fp-db load my-fingerprints.jsonJSON 格式:
[
{
"type": "jarm",
"hash": "07d14d16d21d21d07c42d41d00041d24de...",
"label": "Internal App Gateway",
"category": "web",
"confidence": 0.95,
"source": "internal-asset-inventory"
}
]isDuplicateFingerprint 按 type+hash+label 去重,sync.RWMutex 保证并发安全。加载后立即对所有后续匹配生效。
数据库统计
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 做内部识别。详见 指纹库匹配。