的钓鱼域名、影子 IT 与品牌仿冒检测)
Anthropic-Cybersecurity-Skills 实战指南基于 TLS 证书透明性日志CT Logs的钓鱼域名、影子 IT 与品牌仿冒检测【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills导读本指南基于开源仓库 Anthropic-Cybersecurity-Skills 中的analyzing-tls-certificate-transparency-logs技能文档系统讲解如何通过 crt.sh 证书透明性Certificate Transparency, CT日志库与pycrtsh、certstream等工具主动发现仿冒企业品牌的钓鱼域名、未经授权的证书签发以及影子 ITShadow IT资产。读完本文后你将掌握 CT 日志的查询方法、typosquatting 相似度检测算法、异常 CA 识别、通配符证书监控等完整实战能力并能够直接运行仓库提供的 agent.py 自动化检测脚本。证书透明性日志为什么值得监控Certificate Transparency 是一项公开、只能追加append-only的互联网安全标准所有公共可信的 SSL/TLS 证书在签发后都会被提交到多个 CT 日志中。这意味着攻击者一旦为仿冒域名申请了证书无论来自哪个 CA该证书记录就会在公开日志中留下痕迹而且出现时间往往早于钓鱼攻击正式投放为防御方提供了宝贵的提前量。这一监控场景在本仓库中被归类为security-operations安全运营子域并映射到多个主流威胁框架MITRE ATTCKT1583.001获取基础设施域名、T1583.006获取基础设施Web 服务、T1566.002鱼叉式钓鱼链接、T1598.003针对性的钓鱼信息收集NIST CSF 2.0DE.CM-01持续监控、RS.MA-01事件响应维护、GV.OV-01治理/监督、DE.AE-02异常事件分析MITRE ATLASAML.T0073、AML.T0052。可参考 MITRE ATTCK 映射说明 了解该技能在仓库框架覆盖体系中的位置。适用场景When to Use根据 SKILL.md 的定义该技能适用于以下四类典型场景安全事件调查需要分析 TLS 证书透明性日志来还原攻击者基础设施时检测规则与威胁狩猎为域名仿冒/证书异常签发这一检测域构建检测规则或狩猎查询时SOC 结构化分析安全运营分析师需要一套可重复、结构化的分析流程时安全监控覆盖验证验证针对相关攻击技术的监控覆盖率是否完备时。前置条件Prerequisites熟悉安全运营的基本概念与常见工具拥有可用于安全测试的测试或实验环境且所有测试活动已获得适当授权Python 3.8并已安装pycrtsh、requests等依赖能访问 crt.sh 证书透明性数据库。核心方法用 pycrtsh 查询 crt.sh该技能的核心工作流是查询 crt.sh CT 数据库找出与组织品牌域名相似的所有已签发证书进而定位钓鱼基础设施。SKILL.md 给出的最小可用示例from pycrtsh import Crtsh c Crtsh() # 按域名搜索证书 certs c.search(example.com) for cert in certs: print(cert[id], cert[name_value]) # 获取完整证书详情 details c.get(certs[0][id], typeid)通配符搜索是发现子域名资产的关键用法——c.search(%.example.com)会返回所有匹配该域模式含子域名的证书记录from pycrtsh import Crtsh c Crtsh() certs c.search(%.example.com) for cert in certs: print(fIssuer: {cert.get(issuer_name)}, Domain: {cert.get(name_value)})更完整的 API 能力仓库配套的 API 参考文档 对 pycrtsh 的接口能力进行了扩展说明from pycrtsh import Crtsh c Crtsh() # 按域名搜索证书 certs c.search(example.com) # 精确匹配 certs c.search(%.example.com) # 通配子域名 # 按 ID 获取证书详情 details c.get(cert_id, typeid) # 也支持按证书指纹查询 details c.get(sha1_hash, typesha1) details c.get(sha256_hash, typesha256)直连 crt.sh REST API当需要更灵活地控制查询参数如 JSON 输出时可以直接调用 crt.sh 的 REST 接口import requests # JSON 输出 resp requests.get(https://crt.sh/?q%.example.comoutputjson) records resp.json() # 字段: id, issuer_ca_id, issuer_name, common_name, # name_value, not_before, not_after, serial_numbercertstream实时 CT 监控历史查询只能看到过去实时监控则能捕捉此刻新签发的证书。通过 certstream 接入 WebSocket 实时证书流import certstream def callback(message, context): if message[message_type] certificate_update: all_domains message[data][leaf_cert][all_domains] print(all_domains) certstream.listen_for_events(callback, urlwss://certstream.calidog.io/)关键证书字段速查分析 CT 记录时以下字段是判读的核心依据见 api-reference.md字段说明common_name证书上的主域名CNname_valueSAN主题备用名称列表通常按换行分隔多个域名issuer_name签发该证书的证书颁发机构CAnot_before证书签发时间not_after证书过期时间判读思路common_name决定该证书名义上属于谁name_value决定它实际覆盖了哪些域名识别多域名证书issuer_name用于区分可信 CA与可疑 CAnot_before/not_after用于判断证书是否仍有效以及是否存在新近批量签发的异常聚集。关键分析步骤五步法SKILL.md 明确给出了五步核心分析流程查询匹配目标域名模式的所有证书——用search(%.example.com)覆盖品牌主域与全部子域识别 typosquatting 变体——基于 Levenshtein编辑距离算法找出与品牌域名高度相似但并非原样的域名如examp1e.com、example.co标记来自意外 CA 的证书——企业通常有明确的白名单 CA 列表任何来自列表外 CA 的、覆盖品牌域的证书都值得警惕监控可疑子域上的通配符证书——*.example.com这类通配符证书一旦被恶意获取意味着攻击者可覆盖任意子域与已知钓鱼基础设施交叉关联——将疑似域名与威胁情报平台、已知 IOC 进行比对确认其归属与信誉。源码级实战深入 agent.py 自动化检测脚本为了让上述流程可落地仓库在 scripts/agent.py 中提供了一个完整的命令行检测 Agent。它把搜索、typosquat 检测、异常 CA 检测、新证书监控、通配符发现整合为一次全量扫描并输出 JSON 报告。下面按模块拆解其实现原理。证书搜索与有效期过滤search_certificates负责调用 pycrtsh 搜索并可选地过滤掉已过期证书——它通过解析not_after并与当前 UTC 时间比较来实现def search_certificates(domain, include_expiredFalse): c Crtsh() certs c.search(domain) if not include_expired: now datetime.utcnow() certs [cert for cert in certs if cert.get(not_after) and datetime.strptime(str(cert[not_after]), %Y-%m-%dT%H:%M:%S) now] return certsget_certificate_details则对应 pycrtsh 的按 ID 详情查询def get_certificate_details(cert_id): c Crtsh() return c.get(cert_id, typeid)search_crtsh_api演示了不依赖 pycrtsh、直接请求 crt.sh REST API 的替代路径def search_crtsh_api(domain): url fhttps://crt.sh/?q{domain}outputjson resp requests.get(url, timeout30) resp.raise_for_status() return resp.json()核心算法Levenshtein 距离与 typosquatting 检测levenshtein_distance用经典动态规划实现编辑距离插入、删除、替换三种操作的代价均为 1def levenshtein_distance(s1, s2): if len(s1) len(s2): return levenshtein_distance(s2, s1) if len(s2) 0: return len(s1) prev_row range(len(s2) 1) for i, c1 in enumerate(s1): curr_row [i 1] for j, c2 in enumerate(s2): insertions prev_row[j 1] 1 deletions curr_row[j] 1 substitutions prev_row[j] (c1 ! c2) curr_row.append(min(insertions, deletions, substitutions)) prev_row curr_row return prev_row[-1]detect_typosquatting将其应用于 CT 记录以目标主域去掉 TLD 的第一级标签为基准对每条记录的common_name/name_value去重后计算编辑距离命中0 dist max_distance默认最大距离 3的即为疑似仿冒域名并按距离升序返回def detect_typosquatting(target_domain, ct_records, max_distance3): base target_domain.split(.)[0] suspicious [] seen set() for record in ct_records: domain record.get(common_name, ) or record.get(name_value, ) if not domain or domain in seen: continue seen.add(domain) candidate_base domain.split(.)[0].lstrip(*).lstrip(.) if candidate_base base: continue dist levenshtein_distance(base, candidate_base) if 0 dist max_distance: suspicious.append({ domain: domain, distance: dist, issuer: record.get(issuer_name, ), not_before: record.get(not_before, ), not_after: record.get(not_after, ), }) return sorted(suspicious, keylambda x: x[distance])实现细节值得注意candidate_base domain.split(.)[0].lstrip(*).lstrip(.)会先剥掉通配符前缀*.确保*.examp1e.com这类通配证书也能被正确纳入相似度计算。异常 CA 检测detect_unauthorized_cas根据白名单比对签发者只要issuer_name中不包含任何允许的 CA 关键字即判定为未授权 CA 签发的证书def detect_unauthorized_cas(ct_records, allowed_cas): unauthorized [] for record in ct_records: issuer record.get(issuer_name, ) if issuer and not any(ca.lower() in issuer.lower() for ca in allowed_cas): unauthorized.append({ domain: record.get(common_name, ), issuer: issuer, not_before: record.get(not_before, ), cert_id: record.get(id), }) return unauthorized新证书实时监控monitor_new_certificates通过 REST API 拉取通配查询结果并筛出最近 N 小时内签发的证书默认 24 小时用于捕捉刚出现的钓鱼基础设施def monitor_new_certificates(domain, hours_back24): records search_crtsh_api(f%.{domain}) cutoff datetime.utcnow().timestamp() - (hours_back * 3600) recent [] for r in records: not_before r.get(not_before, ) if not_before: try: cert_time datetime.strptime(not_before, %Y-%m-%dT%H:%M:%S) if cert_time.timestamp() cutoff: recent.append({ domain: r.get(common_name, ), issuer: r.get(issuer_name, ), not_before: not_before, name_value: r.get(name_value, ), }) except ValueError: continue return recent通配符证书发现find_wildcard_certificates简单地以*.前缀为判据找出所有可能覆盖大量子域的证书——这类证书风险面最大def find_wildcard_certificates(ct_records): wildcards [] for r in ct_records: name r.get(common_name, ) or r.get(name_value, ) if name.startswith(*.): wildcards.append({ domain: name, issuer: r.get(issuer_name, ), not_before: r.get(not_before, ), not_after: r.get(not_after, ), }) return wildcardsCLI 入口与运行方式main()将上述能力整合为命令行工具关键参数包括--domain必填要监控的目标域名--allowed-cas允许的 CA 白名单默认包含Lets Encrypt、DigiCert、Sectigo、Amazon、Google Trust Services等主流 CA--outputJSON 报告输出路径默认ct_report.json--action执行模式可选search、typosquat、unauthorized_ca、monitor、full_scan默认full_scan全量扫描。运行示例python skills/analyzing-tls-certificate-transparency-logs/scripts/agent.py \ --domain example.com \ --action full_scan \ --output ct_report.json全量扫描会依次完成统计总证书数 → 检测 typosquatting 域名 → 检测未授权 CA 证书最多记录 50 条→ 统计最近 24 小时新签发证书 → 列出通配符证书最终将所有findings汇总写入 JSON 报告并在终端输出[]前缀的进度摘要。把自动化流程与五步法对应起来agent.py 的实现与 SKILL.md 的五大分析步骤是一一对应的search_crtsh_apisearch_certificates对应步骤 1全面查询detect_typosquatting对应步骤 2编辑距离识别仿冒detect_unauthorized_cas对应步骤 3意外 CA 标记find_wildcard_certificates对应步骤 4通配符监控monitor_new_certificates与最终报告则服务于步骤 5与已知情报交叉关联与留档。因此该脚本既是学习 CT 分析的标准参考实现也可以直接接入 SOC 的定时任务作为持续性监控基线。运营落地建议在完成上述技术分析后建议将结果纳入安全运营闭环将确认的仿冒域名加入 DNS sinkhole / Web 代理黑名单阻断终端访问对确认为钓鱼的基础设施发起下架takedown请求将 CT 监控做成定时任务如每日全量扫描 实时 certstream 告警形成持续覆盖为自有域名配置 CAA DNS 记录从签发环节限制 CA压缩意外 CA 签发的窗口结合 DMARC 等邮件安全机制防止仿冒域名被用于邮件钓鱼。总结TLS 证书透明性日志是攻击者在动手前就留下痕迹的少数公开数据源之一。本文以 SKILL.md 为核心骨架完整覆盖了 pycrtsh 查询、crt.sh REST API、certstream 实时流、五步分析法并结合 scripts/agent.py 从源码层面剖析了 Levenshtein 仿冒检测、CA 白名单校验、新证书监控与通配符发现的具体实现。读者可在此基础上直接构建属于自己的钓鱼域名早期预警系统。该技能遵循 Apache-2.0 许可见 LICENSE可自由用于企业安全运营与合规建设。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考