关于 defi-security
面向 DeFi 开发者的安全技能,整理 Solidity 协议的攻击防护、测试建议、上线检查和应急响应步骤。
主要功能
- 01按威胁分类的防护规则
- 02反巨鲸限额与冷却机制
- 03闪电贷和预言机防护
- 04协议组合性风险检查
- 05上线与事故清单
适用场景
- 01审查 DeFi 合约设计
- 02准备协议主网上线
- 03测试闪电贷和巨鲸场景
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ 0xlayerghost/ solidity-agent-kit --skill defi-security安装后在 Claude Code 中输入/defi-security确认已加载。
详细介绍
DeFi 安全原则
语言规则
- 始终使用用户所用的语言回复。 如果用户用中文提问,就用中文回复;如果用英语提问,就用英语回复。
适用范围:仅适用于 DeFi 项目(DEX、借贷、质押、LP、收益)。非 DeFi 项目可以忽略此技能。
防护决策规则
| 威胁 | 必需的防护措施 |
|---|---|
| 巨鲸操纵 | 每日交易上限 + 单笔交易金额限制 + 冷却时间 |
| MEV / 三明治攻击 | 仅允许 EOA 检查(msg.sender == tx.origin),或使用 commit-reveal 模式 |
| 套利 | 绑定推荐关系 + 流动性分配 + 固定收益模型 + 锁定期 |
| 重入 | 所有外部调用函数都使用 ReentrancyGuard(参见 solidity-security 技能) |
| 闪电贷攻击 | 检查操作之间 block.number 是否发生变化,或使用 TWAP 定价 |
| 价格操纵 | 使用 Chainlink 预言机或 TWAP——绝不依赖现货 AMM 储备进行定价 |
| 授权漏洞利用 | 使用 safeIncreaseAllowance / safeDecreaseAllowance,用户操作中绝不直接使用 approve |
| 治理攻击 | 投票要求使用快照 + 最低代币持有期;提案执行设置 ≥ 48h 的时间锁 |
| ERC4626 通胀攻击 | 首次存款必须设置最低金额,或使用虚拟份额,防止舍入导致份额稀释 |
| 跨金库信任绕过 | Router/Registry 中继必须验证金库授权;闪电贷回调中绝不信任调用方身份——EVMbench/noya H-08 |
| 抵押品所有权漏洞利用 | 清算/质押操作必须验证实际 NFT/抵押品所有权——EVMbench/benddao |
| 联合曲线操纵 | create 操作中的 ID/定价参数必须在外部调用前完全确定——EVMbench/phi H-06 |
DEX 交易对 _transfer TOCTOU | 绝不要在 _transfer 中通过余额/储备检查区分操作类型——两个方向都可被利用:买入与 removeLiquidity(pair→user),以及卖出与 addLiquidity(user→pair);仅使用地址白名单;新项目优先使用 Uniswap V4 Hook |
| 按地址的状态绕过 | 任何 mapping(address => ...) 限制(冷却时间、单笔交易上限、最大余额)都可能通过多地址或转账后交易绕过;钱包间转账时,使用 max(_lastTxTime[to], _lastTxTime[from]) 传递限制状态——绝不要使用 block.timestamp(会遭受骚扰攻击)或直接赋值(会覆盖并缩短限制时间) |
反巨鲸实现规则
- 单笔交易最大金额:可通过
onlyOwnersetter 配置 - 每个地址的每日累计限额:使用
mapping(address => mapping(uint256 => uint256))追踪(地址 → 日期 → 金额) - 交易间冷却时间:通过
block.timestamp检查强制执行最短时间间隔 - 豁免地址白名单(部署者、LP 交易对、质押合约)
闪电贷防护规则
- 对于对价格敏感的操作:要求自上次交互以来
block.number已发生变化 - 对于依赖预言机的计算:使用至少 30 分钟的时间加权平均值(TWAP)
- 对于关键状态变更:在执行操作前设置最低持有期(例如,必须持有代币 N 个区块)
协议可组合性风险
来源:EVMbench(OpenAI/Paradigm,2026 年 2 月) — Code4rena 审计中的漏洞模式
- 跨金库操作 [noya H-08]:注册表/路由器中继调用必须验证金库级授权;防止 keeper 使用闪电贷冒充其他金库
- 借贷抵押品 [benddao]:清算函数必须验证
msg.sender确实拥有目标抵押品或获准对其进行操作 - 联合曲线 [phi H-06]:在创建 + 自动购买操作中,必须在执行购买交易前完全确定 ID 分配和定价参数;防止重入修改这些参数
- 共享注册表 [noya H-08]:必须逐跳验证共享注册表中的权限传递链;绝不能仅依赖“受信任发送方”标志
上线检查清单
部署到主网前,请确认以下所有事项:
- 所有
onlyOwner函数的所有权均已转移至多签钱包 - 时间锁合约已部署并配置(关键变更至少延迟 24 小时)
- 已测试紧急暂停机制——暂停和取消暂停函数均能正常工作
- 已记录每日限额参数并将其设为合理值
- 已完成第三方安全审计,并解决所有严重/高危问题
- 测试网部署已连续运行至少 7 天且无问题
- 已审查并记录滑点、费用和锁定期限参数
- 已记录初始流动性计划(数量、锁定时长、LP 代币处理方式)
- 所有 DeFi 关键函数均通过高迭代次数(10000+)的模糊测试
紧急响应流程
| 步骤 | 操作 |
|---|---|
| 1. 检测 | 监控警报触发(链上监控、社区报告) |
| 2. 暂停 | 指定地址调用 pause()——必须在几分钟内响应 |
| 3. 评估 | 技术负责人分析根本原因并估算资金影响 |
| 4. 沟通 | 在社区渠道(Discord、Twitter、Telegram)发布事件通知 |
| 5. 修复 | 部署修复方案或准备恢复计划 |
| 6. 恢复 | 在分叉环境上验证修复后调用 unpause()——或迁移至新合约 |
| 7. 事后复盘 | 在 48 小时内发布详细事件报告 |
DeFi 测试参考
| 测试场景 | 方法 |
|---|---|
| 模糊测试资金流 | 对质押/池合约运行高迭代次数(10000+)的模糊测试 |
| 主网分叉测试 | 使用 Foundry 分叉模式连接主网 RPC,以真实状态进行测试 |
| 模拟巨鲸交易 | 使用 Foundry cast CLI 在分叉网络上模拟大额调用 |
评论
支持 Markdown