name: slither-analysis
description: 与Slither静态分析器专家级集成,用于智能合约漏洞检测、代码质量分析和安全报告。支持所有Slither检测器和自定义分析配置。
allowed-tools: Read, Grep, Write, Bash, Edit, Glob, WebFetch
Slither 静态分析技能
与Slither(领先的Solidity智能合约静态分析框架)的专家级集成。
能力
- 完整检测器套件:使用所有内置检测器执行Slither
- 自定义配置:配置分析参数和排除项
- 严重性分类:解释和分类发现问题的严重性
- 误报过滤:基于上下文的误报识别
- 可视化分析:生成调用图和继承图
- 自定义检测器:运行和开发自定义Slither检测器
- 报告生成:生成全面的安全报告
安装
# 通过pip安装
pip install slither-analyzer
# 或通过pipx隔离安装
pipx install slither-analyzer
# 验证安装
slither --version
基本用法
运行分析
# 分析单个文件
slither Contract.sol
# 分析Foundry项目
slither . --foundry-compile-all
# 分析Hardhat项目
slither . --hardhat-compile-all
输出格式
# 人类可读(默认)
slither .
# JSON输出用于处理
slither . --json output.json
# Markdown报告
slither . --checklist
# SARIF用于CI集成
slither . --sarif output.sarif
检测器类别
高严重性检测器
| 检测器 |
描述 |
reentrancy-eth |
涉及ETH转账的重入攻击 |
reentrancy-no-eth |
不涉及ETH的重入攻击 |
arbitrary-send-eth |
任意ETH发送 |
controlled-delegatecall |
受控的委托调用 |
suicidal |
允许任何人销毁合约的函数 |
uninitialized-storage |
未初始化的存储变量 |
中严重性检测器
| 检测器 |
描述 |
reentrancy-benign |
良性重入 |
incorrect-equality |
危险严格相等 |
locked-ether |
锁定以太币的合约 |
missing-zero-check |
缺少零地址验证 |
unchecked-transfer |
未检查的代币转账 |
低严重性检测器
| 检测器 |
描述 |
naming-convention |
命名约定违规 |
external-function |
可以声明为external的函数 |
constable-states |
可以声明为常量的状态变量 |
immutable-states |
可以声明为不可变的状态变量 |
配置
slither.config.json
{
"detectors_to_run": "all",
"exclude_informational": false,
"exclude_low": false,
"exclude_medium": false,
"exclude_high": false,
"exclude_optimization": false,
"fail_on": "high,medium",
"filter_paths": [
"node_modules",
"lib",
"test"
],
"exclude_dependencies": true,
"legacy_ast": false
}
CLI配置
# 运行特定检测器
slither . --detect reentrancy-eth,uninitialized-storage
# 排除检测器
slither . --exclude naming-convention,external-function
# 按严重性过滤
slither . --exclude-informational --exclude-low
# 排除特定路径
slither . --filter-paths "test|lib|node_modules"
高级功能
调用图生成
# 生成调用图
slither . --print call-graph
# 生成继承图
slither . --print inheritance-graph
# 生成合约摘要
slither . --print contract-summary
函数分析
# 打印函数摘要
slither . --print function-summary
# 打印变量顺序(存储布局)
slither . --print variable-order
# 打印数据依赖
slither . --print data-dependency
自定义检测器
# custom_detector.py
from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification
class MyCustomDetector(AbstractDetector):
ARGUMENT = "my-detector"
HELP = "检测我的自定义问题"
IMPACT = DetectorClassification.HIGH
CONFIDENCE = DetectorClassification.HIGH
WIKI = "https://example.com/my-detector"
WIKI_TITLE = "我的自定义检测器"
WIKI_DESCRIPTION = "检测..."
WIKI_EXPLOIT_SCENARIO = "..."
WIKI_RECOMMENDATION = "..."
def _detect(self):
results = []
for contract in self.compilation_unit.contracts_derived:
for function in contract.functions:
# 检测逻辑
if self._has_issue(function):
info = [function, " 存在问题
"]
results.append(self.generate_result(info))
return results
CI/CD集成
GitHub Actions
name: Slither分析
on: [push, pull_request]
jobs:
slither:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: 安装Foundry
uses: foundry-rs/foundry-toolchain@v1
- name: 安装Slither
run: pip install slither-analyzer
- name: 运行Slither
run: slither . --foundry-compile-all --fail-on high --sarif results.sarif
- name: 上传SARIF
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: results.sarif
结果解读
结果结构
{
"success": true,
"error": null,
"results": {
"detectors": [
{
"check": "reentrancy-eth",
"impact": "High",
"confidence": "Medium",
"description": "Contract.withdraw()中的重入攻击...",
"elements": [...],
"first_markdown_element": "...",
"id": "abc123"
}
]
}
}
问题排查流程
- 高/中影响 - 立即调查
- 检查置信度 - 高置信度 = 很可能是真实问题
- 审查代码上下文 - 理解实际流程
- 用测试验证 - 编写测试确认行为
- 记录决策 - 用理由标记误报
流程集成
| 流程 |
目的 |
smart-contract-security-audit.js |
主要安全分析 |
smart-contract-development-lifecycle.js |
开发验证 |
formal-verification.js |
预验证检查 |
工具参考
| 工具 |
目的 |
| Slither |
核心静态分析器 |
| crytic-compile |
编译框架 |
| slither-doctor |
配置调试器 |
最佳实践
- 在CI中对每次提交运行Slither
- 配置适当的排除项以减少噪音
- 手动审查所有高/中严重性发现
- 为项目特定模式编写自定义检测器
- 使用
--triage-database跟踪误报
另请参阅
skills/mythril-symbolic/SKILL.md - 符号执行分析
skills/echidna-fuzzer/SKILL.md - 基于属性的模糊测试
agents/solidity-auditor/AGENT.md - 安全审计代理
- Slither文档