欢迎订阅专栏:10分钟智能合约:进阶实战
DeFi 安全实战靶场:Damn Vulnerable DeFi 完全指南
在智能合约安全的进阶之路上,仅仅理解理论漏洞是远远不够的。Damn Vulnerable DeFi 提供了一个完美的实战训练场,让你在攻防对抗中锤炼真正的安全技能。本文将带你全面了解这一传奇的安全靶场,并指导你如何开始你的第一场挑战。
一、什么是 Damn Vulnerable DeFi?
Damn Vulnerable DeFi 是由 OpenZeppelin 发起、现由 The Red Guild 维护的免费开源 DeFi 安全“靶场”。你可以把它理解为 DeFi 安全领域的 “黑客密室” —— 每个挑战都模拟了一个真实的 DeFi 协议(如借贷池、DEX、预言机等),而你的任务是扮演攻击者,找出漏洞并窃取资产。
核心理念:Learning by breaking。只有亲手攻破一个协议,才能真正理解如何防御。
二、为什么选择它?
1. 实战导向的“战争游戏”
每个挑战都精心设计了特定的安全陷阱,你需要:
- 分析合约代码,发现漏洞。
- 编写攻击合约或脚本,实施攻击。
- 验证攻击成功,获取所有资产。
2. 覆盖全面的 DeFi 攻击面
挑战主题涵盖了 DeFi 世界的主流安全风险,包括但不限于:
- 闪电贷与重入攻击
- 价格预言机操纵
- 治理攻击与提案操纵
- 时间锁与访问控制绕过
- NFT 与 DEX 相关漏洞
- 元交易与签名重放
3. 完全免费,持续进化
- 无需付费,无需登录,任何人都可以克隆仓库开始挑战。
- 社区持续更新,新版本会反映最新的攻击手法和 DeFi 热点。
三、挑战内容一览
截至最新版本(V4),Damn Vulnerable DeFi 已全面迁移至 Foundry 框架,挑战数量和质量均有提升。以下是部分代表性挑战:
| 挑战名称 | 主题 / 漏洞类型 |
|---|---|
| Unstoppable | 无限制操作 / 拒绝服务 |
| Curvy Puppet | AMM / 价格操纵 |
| Shards | 分数化 NFT / 所有权逻辑 |
| Withdrawal | 提款逻辑 / 访问控制 |
| The Rewarder | 奖励分发 / 治理攻击 |
| Truster | 闪电贷 / 任意调用 |
| Puppet | 预言机操纵 / 闪电贷 |
| Selfie | 治理攻击 / 闪电贷 |
| Compromised | 私钥泄露 / 签名验证 |
| Side Entrance | 重入攻击 / 资金池逻辑 |
| Wallet Mining | 钱包安全 / 防止被攻击 |
每个挑战都配有详细的说明文档,描述协议的业务逻辑和你的攻击目标。
四、环境搭建指南
1. 基础环境准备
确保你的机器已安装以下工具:
- Git:用于克隆仓库。
- Node.js(推荐 v12.20.0 或更高版本)。
- Foundry:目前主要的开发框架,用于编译、测试和部署。
安装 Foundry(如果尚未安装):
curl -L https://foundry.paradigm.xyz | bash
foundryup
2. 获取项目代码
git clone https://github.com/theredguild/damn-vulnerable-defi.git
cd damn-vulnerable-defi
3. 安装依赖
forge install
npm install # 部分挑战可能还需要 JavaScript 依赖
4. 验证环境
运行一个示例测试,确保一切正常工作:
forge test --match-contract Unstoppable -vvvv
如果看到测试失败(红色输出),恭喜你,环境已就绪 —— 你的任务就是让它变绿(即攻击成功)。
五、如何开始第一个挑战?
以 Unstoppable(最简单的入门挑战)为例:
1. 阅读挑战说明
在 test/unstoppable/ 目录下,你会找到:
Unstoppable.t.sol:测试文件,包含攻击目标。- 合约源码:位于
src/unstoppable/。 - 说明文档:通常在
README.md或注释中。
2. 分析合约
寻找协议中的逻辑缺陷。Unstoppable 挑战中,你需要让一个本应“不可停止”的借贷池停止工作。
3. 编写攻击代码
在测试文件中,找到 test_unstoppable() 函数,在其中实现你的攻击逻辑。
function test_unstoppable() public checkSolvedByPlayer {
// 你的攻击代码写在这里
// 目标:使借贷池的 `flashLoan` 函数永远失败
}
4. 运行并验证
forge test --match-contract Unstoppable -vvvv
如果攻击成功,测试将通过(绿色输出)。
5. 对照学习
搜索社区题解(如 OpenZeppelin 官方博客、LearnBlockchain 等技术社区),对比你的思路与他人的差异。
六、学习资源与社区
- 官方仓库:github.com/theredguild…
- 官方网站:www.damnvulnerabledefi.xyz/
- 官方题解(部分):OpenZeppelin 博客曾发布过早期版本的题解,可作参考。
- 社区讨论:GitHub Issues、Twitter、技术论坛中都有大量讨论和思路分享。
七、常见问题与技巧
| 问题 | 解决方案 |
|---|---|
| 编译失败 | 检查 Foundry 版本是否正确,运行 foundryup 更新。 |
| 测试 gas 不足 | 在 foundry.toml 中调整 gas_limit 或使用 -gas-limit 参数。 |
| 不知道从何入手 | 从 Unstoppable 开始,它是最简单的入门挑战。 |
| 卡在某一步 | 查阅官方文档、社区讨论,或尝试打印日志(console.log)调试。 |
八、总结
Damn Vulnerable DeFi 是连接 “理论漏洞知识” 与 “真实攻防能力” 的桥梁。通过它,你可以:
- 亲手验证 重入、预言机操纵、治理攻击等漏洞的实际利用方法。
- 理解防御 为什么某些模式(如 CEI、Chainlink VRF)是必要的。
- 建立直觉 在审计真实协议时,快速识别可疑代码模式。
下一步行动:
- 按照上述环境搭建步骤,在本地安装 Damn Vulnerable DeFi。
- 从
Unstoppable开始,完成你的第一个挑战。 - 逐步挑战更复杂的题目(如
Puppet、Selfie),直到你能够独立分析并攻破一个完整的 DeFi 协议。
如果你在挑战中遇到困难,欢迎在评论区留言讨论 —— 记住,每个安全专家都曾是“攻破者”。
延伸阅读: