news 2026/9/11 21:02:42

Anthropic-Cybersecurity-Skills 实战指南:基于 TLS 证书透明性日志(CT Logs)的钓鱼域名、影子 IT 与品牌仿冒检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Anthropic-Cybersecurity-Skills 实战指南:基于 TLS 证书透明性日志(CT Logs)的钓鱼域名、影子 IT 与品牌仿冒检测

Anthropic-Cybersecurity-Skills 实战指南:基于 TLS 证书透明性日志(CT Logs)的钓鱼域名、影子 IT 与品牌仿冒检测

【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, 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)日志库与pycrtshcertstream等工具,主动发现仿冒企业品牌的钓鱼域名、未经授权的证书签发以及影子 IT(Shadow IT)资产。读完本文后,你将掌握 CT 日志的查询方法、typosquatting 相似度检测算法、异常 CA 识别、通配符证书监控等完整实战能力,并能够直接运行仓库提供的 agent.py 自动化检测脚本。

证书透明性日志:为什么值得监控

Certificate Transparency 是一项公开、只能追加(append-only)的互联网安全标准,所有公共可信的 SSL/TLS 证书在签发后都会被提交到多个 CT 日志中。这意味着攻击者一旦为仿冒域名申请了证书(无论来自哪个 CA),该证书记录就会在公开日志中留下痕迹,而且出现时间往往早于钓鱼攻击正式投放,为防御方提供了宝贵的"提前量"。

这一监控场景在本仓库中被归类为security-operations(安全运营)子域,并映射到多个主流威胁框架:

  • MITRE ATT&CKT1583.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.T0073AML.T0052

可参考 MITRE ATT&CK 映射说明 了解该技能在仓库框架覆盖体系中的位置。

适用场景(When to Use)

根据 SKILL.md 的定义,该技能适用于以下四类典型场景:

  1. 安全事件调查:需要分析 TLS 证书透明性日志来还原攻击者基础设施时;
  2. 检测规则与威胁狩猎:为"域名仿冒/证书异常签发"这一检测域构建检测规则或狩猎查询时;
  3. SOC 结构化分析:安全运营分析师需要一套可重复、结构化的分析流程时;
  4. 安全监控覆盖验证:验证针对相关攻击技术的监控覆盖率是否完备时。

前置条件(Prerequisites)

  • 熟悉安全运营的基本概念与常见工具;
  • 拥有可用于安全测试的测试或实验环境,且所有测试活动已获得适当授权;
  • Python 3.8+,并已安装pycrtshrequests等依赖;
  • 能访问 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"], type="id")

通配符搜索是发现子域名资产的关键用法——c.search("%.example.com")会返回所有匹配该域模式(含子域名)的证书记录:

from pycrtsh import Crtsh c = Crtsh() certs = c.search("%.example.com") for cert in certs: print(f"Issuer: {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, type="id") # 也支持按证书指纹查询 details = c.get(sha1_hash, type="sha1") details = c.get(sha256_hash, type="sha256")

直连 crt.sh REST API

当需要更灵活地控制查询参数(如 JSON 输出)时,可以直接调用 crt.sh 的 REST 接口:

import requests # JSON 输出 resp = requests.get("https://crt.sh/?q=%.example.com&output=json") records = resp.json() # 字段: id, issuer_ca_id, issuer_name, common_name, # name_value, not_before, not_after, serial_number

certstream:实时 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, url="wss://certstream.calidog.io/")

关键证书字段速查

分析 CT 记录时,以下字段是判读的核心依据(见 api-reference.md):

字段说明
common_name证书上的主域名(CN)
name_valueSAN(主题备用名称)列表,通常按换行分隔多个域名
issuer_name签发该证书的证书颁发机构(CA)
not_before证书签发时间
not_after证书过期时间

判读思路:common_name决定该证书"名义上"属于谁;name_value决定它实际覆盖了哪些域名(识别多域名证书);issuer_name用于区分"可信 CA"与"可疑 CA";not_before/not_after用于判断证书是否仍有效,以及是否存在"新近批量签发"的异常聚集。

关键分析步骤(五步法)

SKILL.md 明确给出了五步核心分析流程:

  1. 查询匹配目标域名模式的所有证书——用search("%.example.com")覆盖品牌主域与全部子域;
  2. 识别 typosquatting 变体——基于 Levenshtein(编辑距离)算法找出与品牌域名高度相似但并非原样的域名(如examp1e.comexample.co);
  3. 标记来自意外 CA 的证书——企业通常有明确的白名单 CA 列表,任何来自列表外 CA 的、覆盖品牌域的证书都值得警惕;
  4. 监控可疑子域上的通配符证书——*.example.com这类通配符证书一旦被恶意获取,意味着攻击者可覆盖任意子域;
  5. 与已知钓鱼基础设施交叉关联——将疑似域名与威胁情报平台、已知 IOC 进行比对,确认其归属与信誉。

源码级实战:深入 agent.py 自动化检测脚本

为了让上述流程可落地,仓库在 scripts/agent.py 中提供了一个完整的命令行检测 Agent。它把"搜索、typosquat 检测、异常 CA 检测、新证书监控、通配符发现"整合为一次全量扫描,并输出 JSON 报告。下面按模块拆解其实现原理。

证书搜索与有效期过滤

search_certificates负责调用 pycrtsh 搜索,并可选地过滤掉已过期证书——它通过解析not_after并与当前 UTC 时间比较来实现:

def search_certificates(domain, include_expired=False): 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 certs

get_certificate_details则对应 pycrtsh 的按 ID 详情查询:

def get_certificate_details(cert_id): c = Crtsh() return c.get(cert_id, type="id")

search_crtsh_api演示了不依赖 pycrtsh、直接请求 crt.sh REST API 的替代路径:

def search_crtsh_api(domain): url = f"https://crt.sh/?q={domain}&output=json" resp = requests.get(url, timeout=30) resp.raise_for_status() return resp.json()

核心算法:Levenshtein 距离与 typosquatting 检测

levenshtein_distance用经典动态规划实现编辑距离(插入、删除、替换三种操作的代价均为 1):

def 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_distance=3): 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, key=lambda 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_back=24): 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 wildcards

CLI 入口与运行方式

main()将上述能力整合为命令行工具,关键参数包括:

  • --domain(必填):要监控的目标域名;
  • --allowed-cas:允许的 CA 白名单,默认包含Let's EncryptDigiCertSectigoAmazonGoogle Trust Services等主流 CA;
  • --output:JSON 报告输出路径,默认ct_report.json
  • --action:执行模式,可选searchtyposquatunauthorized_camonitorfull_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_api+search_certificates对应步骤 1(全面查询);detect_typosquatting对应步骤 2(编辑距离识别仿冒);detect_unauthorized_cas对应步骤 3(意外 CA 标记);find_wildcard_certificates对应步骤 4(通配符监控);monitor_new_certificates与最终报告则服务于步骤 5(与已知情报交叉关联与留档)。因此该脚本既是学习 CT 分析的标准参考实现,也可以直接接入 SOC 的定时任务作为持续性监控基线。

运营落地建议

在完成上述技术分析后,建议将结果纳入安全运营闭环:

  1. 将确认的仿冒域名加入 DNS sinkhole / Web 代理黑名单,阻断终端访问;
  2. 对确认为钓鱼的基础设施发起下架(takedown)请求;
  3. 将 CT 监控做成定时任务(如每日全量扫描 + 实时 certstream 告警),形成持续覆盖;
  4. 为自有域名配置 CAA DNS 记录,从签发环节限制 CA,压缩"意外 CA 签发"的窗口;
  5. 结合 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 ATT&CK, 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 21:01:56

TCN-LSTM-Attention多变量时间序列预测的Matlab实现与优化

简介&#xff1a;这是一套面向多变量时间序列预测场景的TCN-LSTM-Attention完整实现&#xff0c;适合课程设计、期末大作业或毕业设计&#xff0c;也适合入门深度学习时序建模的读者。资源基于Matlab 2023b开发&#xff0c;输入多个历史特征、输出单变量&#xff0c;借助时间卷…

作者头像 李华
网站建设 2026/9/11 21:00:59

JL-17T传感器接入小程序:接口选型与数据链路实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 21:00:22

MATLAB NURBS工具箱:曲线曲面建模与拟合实践

简介&#xff1a;这是MATLAB工具箱集锦压缩包&#xff0c;面向科研人员、工程师与学生&#xff0c;将杂散于各领域的实用工具箱汇总到一起&#xff0c;省去逐个寻找安装包的麻烦。压缩包含57个文件&#xff0c;m脚本和函数约20个、png示意图34张&#xff0c;另有pdf说明、READM…

作者头像 李华
网站建设 2026/9/11 21:00:02

2026哪些GEO优化公司靠谱?权威测评与选型教程

前置测评声明1. 本文为2026年GEO&#xff08;生成式引擎优化&#xff09;服务商客观测评内容&#xff0c;所有评价基于企业官方公开资料、行业公开落地案例、市场用户真实反馈、主流AI搜索平台公开数据整理而成&#xff0c;无内部涉密、非公开数据&#xff0c;所有观点均可通过…

作者头像 李华
网站建设 2026/9/11 20:59:57

期货量化多策略组合实战:从策略池搭建到资金风控

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 20:59:24

Pico ADC信号链完整性实战:从电位器采样到SerialPlot波形

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华