关于 smart-contract-security
面向智能合约开发者的安全技能,涵盖常见漏洞、审计流程、安全工具和事件响应方法。
主要功能
- 01常见漏洞说明
- 02系统化审计清单
- 03静态分析与模糊测试指南
- 04形式化验证参考
- 05安全事件响应流程
适用场景
- 01发布前审查合约
- 02规划模糊测试和不变量测试
- 03分级处理疑似漏洞
- 04准备负责任的漏洞披露
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-blockchain --skill smart-contract-security安装后在 Claude Code 中输入/smart-contract-security确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/config.yamlschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/validate.py详细介绍
智能合约安全技能
掌握智能合约安全,包括漏洞检测、审计方法和事件响应流程。
快速开始
# Invoke this skill for security analysis
Skill("smart-contract-security", topic="vulnerabilities", severity="high")
涵盖主题
1. 常见漏洞
识别并预防:
- 重入:违反 CEI 模式
- 访问控制:缺少修饰符
- 预言机操纵:闪电贷攻击
- 整数问题:精度损失
2. 审计方法
系统化审查流程:
- 人工审查:逐行分析
- 静态分析:自动化工具
- 模糊测试:基于属性的测试
- 形式化验证:数学证明
3. 安全工具
必备工具:
- Slither:快速静态分析
- Mythril:符号执行
- Foundry:模糊测试、不变量
- Certora:形式化验证
4. 事件响应
处理安全事件:
- 分诊:评估严重程度
- 缓解:紧急措施
- 事后复盘:根本原因分析
- 披露:负责任地报告
漏洞速查
严重:重入
// VULNERABLE
function withdraw(uint256 amount) external {
(bool ok,) = msg.sender.call{value: amount}("");
require(ok);
balances[msg.sender] -= amount; // After call!
}
// FIXED: CEI Pattern
function withdraw(uint256 amount) external {
balances[msg.sender] -= amount; // Before call
(bool ok,) = msg.sender.call{value: amount}("");
require(ok);
}
高危:缺少访问控制
// VULNERABLE
function setAdmin(address newAdmin) external {
admin = newAdmin; // Anyone can call!
}
// FIXED
function setAdmin(address newAdmin) external onlyOwner {
admin = newAdmin;
}
高危:未检查返回值
// VULNERABLE
IERC20(token).transfer(to, amount); // Ignored!
// FIXED: Use SafeERC20
using SafeERC20 for IERC20;
IERC20(token).safeTransfer(to, amount);
中危:精度损失
// VULNERABLE: Division before multiplication
uint256 fee = (amount / 1000) * rate;
// FIXED: Multiply first
uint256 fee = (amount * rate) / 1000;
审计清单
审计前
- 代码编译无警告
- 测试通过且覆盖率良好
- 已审查文档
核心安全
- 遵循 CEI 模式
- 已设置重入保护
- 管理员函数设有访问控制
- 输入验证完整
DeFi 特定检查
- 检查预言机数据是否过期
- 滑点保护
- 抵御闪电贷攻击
- 防止三明治攻击
安全工具
静态分析
# Slither - Fast vulnerability detection
slither . --exclude-dependencies
# Mythril - Symbolic execution
myth analyze src/Contract.sol
# Semgrep - Custom rules
semgrep --config "p/smart-contracts" .
模糊测试
// Foundry fuzz test
function testFuzz_Withdraw(uint256 amount) public {
amount = bound(amount, 1, type(uint128).max);
vm.deal(address(vault), amount);
vault.deposit{value: amount}();
uint256 before = address(this).balance;
vault.withdraw(amount);
assertEq(address(this).balance, before + amount);
}
不变量测试
function invariant_BalancesMatchTotalSupply() public {
uint256 sum = 0;
for (uint i = 0; i < actors.length; i++) {
sum += token.balanceOf(actors[i]);
}
assertEq(token.totalSupply(), sum);
}
严重程度分类
| 严重程度 | 影响 | 示例 |
|---|---|---|
| 严重 | 直接资金损失 | 重入、未受保护的初始化 |
| 高危 | 重大损害 | 访问控制、预言机操纵 |
| 中危 | 有条件的影响 | 精度损失、时序问题 |
| 低危 | 轻微问题 | 缺少事件、命名问题 |
事件响应
1. 检测
# Monitor for suspicious activity
cast logs --address $CONTRACT --from-block latest
2. 缓解
// Emergency pause
function pause() external onlyOwner {
_pause();
}
3. 恢复
- 评估损失范围
- 协调披露
- 经审计后部署修复
常见陷阱
| 陷阱 | 风险 | 预防措施 |
|---|---|---|
| 只测试正常情况 | 遗漏边界情况 | 对边界进行模糊测试 |
| 忽略集成 | 外部调用风险 | 审查所有依赖项 |
| 信任 block.timestamp | 矿工操纵 | 仅用于较长时间范围 |
交叉引用
- Bonded Agent:
06-smart-contract-security - 相关技能:
solidity-development、defi-protocols
资源
- SWC Registry:常见弱点分类
- Rekt News:黑客攻击事后复盘
- Immunefi:漏洞赏金
版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| 2.0.0 | 2025-01 | 生产级版本,包含工具和方法 |
| 1.0.0 | 2024-12 | 初始发布 |
评论
支持 Markdown