mcpField
D
defi-security

defi-security

github.com/0xlayerghost安全4150 次安装2 周前更新
代码仓库

关于 defi-security

面向 DeFi 开发者的安全技能,整理 Solidity 协议的攻击防护、测试建议、上线检查和应急响应步骤。

主要功能

  1. 01按威胁分类的防护规则
  2. 02反巨鲸限额与冷却机制
  3. 03闪电贷和预言机防护
  4. 04协议组合性风险检查
  5. 05上线与事故清单

适用场景

  1. 01审查 DeFi 合约设计
  2. 02准备协议主网上线
  3. 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(会遭受骚扰攻击)或直接赋值(会覆盖并缩短限制时间)

反巨鲸实现规则

  • 单笔交易最大金额:可通过 onlyOwner setter 配置
  • 每个地址的每日累计限额:使用 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