Anthropic-Cybersecurity-Skills 实战:使用 Slither 与 Mythril 分析以太坊智能合约漏洞
【免费下载链接】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
导读
本文是 analyzing-ethereum-smart-contract-vulnerabilities 技能的配套 API 参考手册深度解析,围绕该技能内置的 api-reference.md 展开,系统讲解 Slither 静态分析与 Mythril 符号执行两套 CLI 的完整用法、检测器与 SWC 漏洞分类体系的对应关系、JSON 输出结构,并结合仓库中 scripts/agent.py 的自动化审计实现,给出从环境安装、工具调用、结果去重到审计报告生成的端到端方案。读完本文,你将掌握在合约部署到以太坊主网之前,用这两款主流工具完成漏洞扫描、按严重级别分诊并生成结构化审计报告的全部技能。
为什么智能合约必须在部署前做安全分析
与传统的可热修复 Web 应用不同,部署在以太坊上的智能合约代码不可变(immutable),且直接管理真实金融资产。SKILL.md 的开篇概述明确指出:智能合约漏洞已在 DeFi 协议中造成数十亿美元级别的损失,因此部署前的安全分析是硬性要求。该技能的技术定位如下:
- Slither:基于中间表示(Intermediate Representation)做快速静态分析,可在数秒内检测90+ 种漏洞模式,覆盖面广、速度快,适合作为第一道防线;
- Mythril:基于符号执行 + SMT 求解器做路径敏感分析,擅长发现重入(reentrancy)、整数溢出等需要沿特定执行路径才能触发的复杂漏洞,但运行更慢,适合作为深挖环节。
两者互补,正是本技能"先 Slither 快扫、再 Mythril 深挖"工作流的设计依据。
环境准备与安装
依赖清单
根据 api-reference.md 与 SKILL.md 的 Prerequisites,完整环境包括:
| 组件 | 用途 | 安装方式 |
|---|---|---|
| Python 3.10+ / pip | 运行两工具的基础环境 | 系统包管理器 |
| slither-analyzer | 静态分析引擎 | pip install slither-analyzer |
| solc 编译器 | 编译 Solidity 源码(Slither 依赖) | solc-select管理多版本 |
| mythril | 符号执行引擎 | pip install mythril |
| Foundry / Hardhat(可选) | 项目级(多合约工程)分析 | 按官方流程安装 |
安装命令
# Slither(依赖 solc 编译器) pip install slither-analyzer solc-select install 0.8.20 solc-select use 0.8.20 # Mythril pip install mythril说明:
solc-select用于在多个 Solidity 编译器版本之间切换。Slither 解析合约时需要与合约pragma版本匹配的 solc,遇到版本不匹配报错时,可用solc-select install <version>补装对应版本。api-reference.md 中以0.8.20为例,实际请按目标合约的pragma solidity声明选择版本。
Slither CLI 完整参考
基本用法
# 基础分析:分析目录下所有合约 slither contracts/ # 输出 JSON 报告(供下游程序解析) slither contracts/ --json slither-report.json--json输出在自动化场景中至关重要:仓库 scripts/agent.py 中的run_slither()正是通过slither <path> --json -将结果以 JSON 形式写到标准输出,再交给json.loads()解析:
def run_slither(contract_path): """Run Slither static analysis on Solidity contract.""" cmd = ["slither", contract_path, "--json", "-"] result = subprocess.run(cmd, capture_output=True, text=True, timeout=120) try: return json.loads(result.stdout) if result.stdout else {} except json.JSONDecodeError: logger.error("Slither JSON parse failed") return {}这里传入"-"作为--json的参数值,表示 JSON 输出到 stdout,这与 CLI 手册中的文件输出形式等价,但更便于程序化接管。timeout=120是对 90+ 检测器全量运行的保守时间预算。
检测器筛选与清单
# 只运行指定的检测器(逗号分隔) slither contracts/ --detect reentrancy-eth,unprotected-upgrade # 列出全部可用检测器 slither --list-detectors--detect允许聚焦特定漏洞类别。例如在应急复核场景下只查reentrancy-eth(ETH 重入)与unprotected-upgrade(未保护的可升级代理),能显著缩短扫描时间。--list-detectors输出的检测器名与 Slither Detector Severity Levels 表一一对应,是了解工具能力边界的第一入口。
打印与图形输出
# 打印合约摘要(函数、状态变量、继承关系概览) slither contracts/ --print human-summary # 生成继承关系图(DOT 格式,可渲染为图片) slither contracts/ --print inheritance-graph--print系列是"分析辅助输出",适合快速理解目标合约的整体结构——在审计陌生代码库时,先跑human-summary掌握合约拓扑,再有针对性地运行检测器,是高效的工作顺序。
Mythril CLI 完整参考
基本用法与输出格式
# 分析单个合约 myth analyze contracts/Token.sol # 以 JSON 格式输出 myth analyze contracts/Token.sol -o jsonMythril 的-o json同样服务于自动化:agent.py 的run_mythril()使用myth analyze <path> --execution-timeout <timeout> -o json调用,并在analyze_mythril_results()中遍历顶层issues数组解析发现项(每条 issue 包含swc-id、severity、contract、function、lineno等字段,详见下文 JSON 结构部分)。
执行控制参数
# 设置符号执行超时(秒),防止路径爆炸导致的分析悬挂 myth analyze contracts/Token.sol --execution-timeout 300 # 增加分析深度与交易数,探索更深的执行路径 myth analyze contracts/Token.sol --max-depth 50 --transaction-count 3参数含义与使用建议:
| 参数 | 作用 | 建议 |
|---|---|---|
--execution-timeout | 单个合约的符号执行时间上限(秒) | 复杂合约建议 300 起步;agent.py 默认即 300 秒,可用--mythril-timeout覆盖 |
--max-depth | 探索的执行路径深度 | 值越大覆盖越深,耗时越长 |
--transaction-count | 模拟的交易调用次数 | 用于跨多次调用的状态相关漏洞(如"先存款后重入") |
分析已部署的字节码
# 通过链上地址直接分析已部署字节码(无需源码) myth analyze --address 0x1234... --rpc infura--address+--rpc组合让 Mythril 可以直接拉取主网(或任意 RPC 端点)上已部署合约的字节码进行分析。这在无源码的事后取证场景(如安全事件调查中分析被攻击合约)中价值极大——这正是本技能在"安全事件响应"场景中的典型用法。--rpc infura表示使用 Infura 公共 RPC,也可替换为其他兼容 Ethereum JSON-RPC 的端点。
Slither 检测器严重级别
api-reference.md 给出了 Slither 内置检测器的 (Impact, Confidence) 分级矩阵,这是分诊排序的权威依据:
| Impact | Confidence | 示例检测器 |
|---|---|---|
| High | High | reentrancy-eth, suicidal, arbitrary-send-eth |
| High | Medium | controlled-delegatecall, reentrancy-no-eth |
| Medium | High | locked-ether, incorrect-equality |
| Medium | Medium | uninitialized-state, shadowing-state |
| Low | High | naming-convention, solc-version |
| Informational | High | pragma, dead-code |
在 agent.py 的analyze_slither_results()中,该分级被进一步编程化为排序权重表:
"findings": sorted(findings, key=lambda x: {"high": 0, "medium": 1, "low": 2, "informational": 3}.get(x["severity"], 4))也就是说,报告输出时 High 影响级发现永远排在最前,其次是 Medium、Low、Informational——与上表的分诊逻辑完全一致。此外,该函数还会按检测器聚合by_detector计数(截取 Top 15),帮助审计者一眼看出漏洞热点集中在哪些模式上。
SWC 漏洞分类注册表
核心条目(api-reference 收录)
SWC(Smart Contract Weakness Classification)是社区通用的智能合约弱点编号体系,让不同工具、不同团队的审计结论可以互相参照。api-reference.md 列出关键条目如下:
| SWC ID | 漏洞标题 | 工具覆盖 |
|---|---|---|
| SWC-101 | 整数溢出/下溢(Integer Overflow/Underflow) | Mythril |
| SWC-104 | 未检查的调用返回值(Unchecked Call Return) | Slither + Mythril |
| SWC-106 | 未保护的 SELFDESTRUCT | Slither + Mythril |
| SWC-107 | 重入(Reentrancy) | Slither + Mythril |
| SWC-110 | 断言违例(Assert Violation) | Mythril |
| SWC-112 | 对不可信目标执行 Delegatecall | Slither |
| SWC-115 | tx.origin 鉴权 | Slither |
| SWC-116 | 区块时间戳依赖 | Mythril |
| SWC-120 | 弱随机源(Weak Randomness) | Slither |
仓库扩展条目
仓库 scripts/agent.py 内置的SWC_REGISTRY字典在 api-reference 基础上额外补充了两个实战高频条目:
- SWC-113:DoS with Failed Call(因外部调用失败导致的拒绝服务)——例如循环内反复向可能 revert 的地址转账,一个失败的 call 即可拖垮整个函数;
- SWC-115 / SWC-116:agent.py 中的标题措辞分别为 "Authorization through tx.origin" 与 "Block values as a proxy for time",即 tx.origin 鉴权与区块值充当时间代理,与官方分类口径一致。
SWC_REGISTRY = { "SWC-101": "Integer Overflow and Underflow", "SWC-104": "Unchecked Call Return Value", "SWC-106": "Unprotected SELFDESTRUCT", "SWC-107": "Reentrancy", "SWC-110": "Assert Violation", "SWC-112": "Delegatecall to Untrusted Callee", "SWC-113": "DoS with Failed Call", "SWC-115": "Authorization through tx.origin", "SWC-116": "Block values as a proxy for time", "SWC-120": "Weak Sources of Randomness", }这份注册表在审计报告生成阶段会把 Mythril 输出的swc-id翻译成人类可读的标题,是"机器编号 → 业务语言"转换的关键一环。
Slither JSON 输出结构
api-reference.md 给出的 Slither JSON 输出结构是自动化解析的基础:
{ "success": true, "results": { "detectors": [{ "check": "reentrancy-eth", "impact": "High", "confidence": "Medium", "description": "Reentrancy in Contract.withdraw()", "elements": [{"source_mapping": {"filename_short": "Contract.sol", "lines": [42, 43]}}] }] } }关键字段说明:
| 字段 | 含义 | agent.py 的消费方式 |
|---|---|---|
check | 检测器名称 | 作为detector字段,参与按检测器聚合计数 |
impact | 影响级别(High/Medium/Low/Informational) | 参与严重级别统计与排序 |
confidence | 置信度(High/Medium/Low) | 直接透传进发现项 |
description | 漏洞描述(含触发位置) | 截断至 200 字符后入库 |
elements[].source_mapping | 源码定位(文件名 + 行号区间) | 提取为filename_short:L<起始行>定位串 |
agent.py 的analyze_slither_results()逐条抽取上述字段并组装为结构化的findings列表,其中位置字段拼接逻辑为:
location = f"{elem.get('source_mapping', {}).get('filename_short', '')}:" \ f"L{elem.get('source_mapping', {}).get('lines', [0])[0] if ... else 0}"即生成形如Contract.sol:L42的精确定位。这个位置串在后续与 Mythril 结果的跨工具去重中充当关键标识(见下一节)。
四步审计工作流与仓库自动化实现
SKILL.md 定义了标准四步流程,而 scripts/agent.py 将全部四步固化为一条命令。使用方式:
# 完整审计(Slither + Mythril) python scripts/agent.py --contract contracts/Token.sol # 跳过 Mythril 快速扫描(符号执行较慢时) python scripts/agent.py --contract contracts/ --skip-mythril # 自定义 Mythril 超时与输出文件 python scripts/agent.py --contract contracts/Token.sol --mythril-timeout 600 --output audit_report.jsonCLI 参数对照表:
| 参数 | 默认值 | 说明 |
|---|---|---|
--contract | (必填) | Solidity 合约文件或项目目录路径 |
--mythril-timeout | 300 | Mythril 符号执行超时(秒) |
--skip-mythril | 关闭 | 跳过耗时的符号执行阶段 |
--output | smart_contract_audit_report.json | 审计报告输出路径 |
Step 1:Slither 静态分析
对合约代码库执行 Slither,借助 90+ 内置检测器识别漏洞模式、优化机会与代码质量问题。对应源码:run_slither() → analyze_slither_results()。
Step 2:Mythril 符号执行
对合约做深度路径探索,发现需要路径敏感分析才能触发的重入、未检查外部调用与算术漏洞。对应源码:run_mythril() → analyze_mythril_results(),后者会按swc-id聚合各 SWC 类别的命中数。
Step 3:结果分诊与跨工具去重
结合两工具结果、去重、依据可利用性与资金影响评估严重级别、过滤误报。agent.py 的去重策略deduplicate_findings()采用键(key)去重:
- Slither 发现项:键 =
(location, detector),即"文件行号 + 检测器名"; - Mythril 发现项:键 =
(contract + line_number, swc_id),即"合约名+行号 + SWC 编号"。
两套键空间天然区分工具来源(同时写入source字段标记slither/mythril),避免同一漏洞被两个工具重复报告时在报告中叠算。
Step 4:生成审计报告
generate_report()汇总出结构化 JSON 报告,核心判定逻辑为:
"audit_result": "FAIL" if critical_high > 0 else "PASS"即只要合并结果中存在任意 High/Critical 级发现,整体审计结论即为FAIL(存在高危问题,禁止部署),否则为PASS。报告顶层包含:
timestamp:审计时间戳(UTC ISO 格式)contract:被审计合约路径slither_analysis:发现总数、按严重级别分布、Top 检测器mythril_analysis:发现总数、按 SWC 分布combined_findings:去重后合并发现总数critical_high_findings:高危及以上数量audit_result:FAIL / PASS 门禁结论findings:前 30 条发现明细(含source来源标记)
命令结束时还会通过 logger 输出一行摘要(发现数、高危数、结论),方便 CI 直接抓取门禁结果:
Smart contract audit: 5 findings (1 critical/high), result: FAIL输出产物与后续对接
期望输出
根据 SKILL.md 的 Expected Output,本技能的最终交付物是带 SWC 标识符的 JSON 报告,每条发现包含:严重级别评级、受影响函数、修复建议。这与 agent.py 生成的smart_contract_audit_report.json完全对齐。
与安全框架的映射
本技能在 SKILL.md 的 frontmatter 中声明了框架映射,可作为蓝队检测与合规对标的依据:
- NIST CSF 2.0:
PR.DS-01(数据保护)、PR.DS-02(数据完整性)、ID.RA-01(漏洞与风险评估); - MITRE ATT&CK:
T1190(面向公众应用的漏洞利用)、T1059(命令与脚本解释器)。
这意味着该技能既可服务于红队视角的合约攻击面评估,也可服务于蓝队视角的漏洞管理与检测覆盖验证。仓库整体还提供了 MITRE ATT&CK、NIST CSF、OWASP 等多框架映射体系,可参见 mappings/README.md 进一步了解技能与框架的对齐方法。
技能元数据规范
本技能遵循 agentskills.io 开放标准编写,其 frontmatter 结构(name/description/domain/subdomain/tags/version/license/框架映射字段)与仓库 tools/agentskills-skill.schema.json 中定义的 JSON Schema 兼容——该 Schema 要求name必须与父目录名一致、description需同时说明"做什么"与"何时用",并允许以附加键承载框架映射元数据,这正是本技能 frontmatter 的编写依据。
小结:一条命令完成部署前安全门禁
综合本文内容,完整的智能合约部署前审计闭环可以浓缩为:
# 1. 环境就绪(Slither + solc + Mythril) pip install slither-analyzer mythril solc-select install 0.8.20 && solc-select use 0.8.20 # 2. 手动快速扫描(了解检测器与结构) slither contracts/ --print human-summary slither contracts/ --detect reentrancy-eth,unprotected-upgrade --json quick.json # 3. 对重点合约做符号执行深挖 myth analyze contracts/Token.sol --execution-timeout 300 -o json # 4. 一键自动化审计(含去重与 FAIL/PASS 门禁) python scripts/agent.py --contract contracts/ --output audit_report.jsonSlither 负责"广"(90+ 模式秒级覆盖),Mythril 负责"深"(符号执行路径探索),agent.py 负责"收"(解析、去重、分级、门禁)。三者组合,配合 SWC 分类体系,即可在以太坊主网部署前建立起一道可复现、可自动化、可纳入 CI 的合约安全防线。
【免费下载链接】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),仅供参考