第 10 章 | DeFi × DAO × GameFi 攻防实战全解析
⚔️ 第 10 章 | DeFi × DAO × GameFi 攻防实战全解析
——真实资金、真实治理、真实死亡的场景,你写的逻辑能活下去吗?
✅ 本章导读
“我写了个流动性挖矿的合约,大家可以 stake 和领取奖励。”
—— 然后攻击者用一个多账户脚本,五分钟把奖励池清空。
在链上项目中,经济逻辑的漏洞往往比技术 bug 更致命。
你写的是 stake / 分红 / vote / 战斗奖励,
黑客看到的是:
“可以无限 mint?”、“奖励没 cooldown?”、“提案逻辑可打包调用?”…
本章将聚焦:
🧩 PART 1:DeFi 攻击实战
✅ 案例 1:流动性挖矿奖励提早/重复领取
function claim() public { uint reward = computeReward(msg.sender); token.transfer(msg.sender, reward); claimed[msg.sender] = block.timestamp;}
⚠️ 问题:
-
computeReward() 不受时间限制
-
多账户 claim,甚至合约 claim,rewardPool 被反复消耗
-
可提前 claim、无上限
✅ 安全设计:
-
添加
cooldown
-
添加最大 claim 限制
-
添加
isContract(msg.sender)
检查防 bot(注意可被绕过)
✅ 案例 2:利率模型被操控套利(Compound)
-
Compound 早期模型中,借贷利率波动剧烈
-
攻击者通过短时大额操作,拉高利率
-
清算其他借款人或套利闪电贷
✅ 安全设计:
-
引入平滑利率曲线 + 速率限制
-
清算奖励设置上限
-
使用 TWAP 替代实时利率估值
✅ 案例 3:SushiSwap MasterChef 重入风险
-
调用
deposit()
时触发奖励计算与发放 -
可通过构造钓鱼合约在回调中再次调用 deposit → 多倍 reward
✅ 防御设计:
-
分离计算与发放逻辑
-
使用 CEI 模式 / ReentrancyGuard
-
奖励使用
pull
模式发放
🏛 PART 2:DAO 合约治理攻击
✅ 案例 1:Beanstalk 提案注入攻击(2022)
攻击者创建提案合约,内部包含:
function executeProposal() external { bean.transfer(attacker, allFunds);}
再用 flashloan 借票,通过治理提案 → 执行该合约 → 所有资金归 attacker
损失:$182M+
✅ 攻击流程总结:
-
部署恶意合约
-
构造提案指向恶意合约的 call
-
flashloan 借出大量 token → 获取投票权
-
快速提案 + 快速投票 + 执行(没有 Timelock)
-
合约资金全部转出
✅ 防御设计:
✅ 案例 2:Curve Vyper 提案被 proxy 重入(2023)
-
提案中使用代理合约 call
-
由于逻辑合约升级与存储错位,导致提案可在执行中再次触发自身
-
出现“治理递归死锁”问题
✅ 教训:
-
Proxy 合约需验证
msg.sender == proxy
-
所有治理合约需限定 delegatecall 目标 & 嵌套调用逻辑
🎮 PART 3:GameFi 合约奖励逻辑漏洞
✅ 案例 1:奖励重复领取
mapping(address => uint) public lastClaim;function claimReward() external { require(block.timestamp > lastClaim[msg.sender] + 1 days); gameToken.mint(msg.sender, 100 * 1e18); lastClaim[msg.sender] = block.timestamp;}
⚠️ 攻击者通过多个合约地址反复 claim:
-
一人十合约,每日领取上限 ×10
-
甚至脚本自动 claim(bot farm)
✅ 防御建议:
require(!isContract(msg.sender))
(可被绕过)✅ 案例 2:NFT 滥发漏洞
-
NFT 铸造合约未限制总量 or 未记录 mint history
-
攻击者直接通过脚本循环 mint → 导致稀缺性崩塌
✅ 防御建议:
-
使用
maxSupply
全局总量控制 -
添加用户级
hasMinted
标志位 -
Mint 前校验持有 token / NFT
-
引入 Merkle Tree whitelist 进行权限分发
📋 审计 Checklist:业务层攻击防御
🧪 本章实战建议(GitHub 示例)
你可以构建一个复现仓库:
/defi-dao-gamefi-attacks├─ contracts/│ ├─ BuggyReward.sol # 流动性奖励漏洞│ ├─ FlashloanGovernance.sol # 提案注入攻击│ ├─ NFTInfiniteMint.sol # GameFi 奖励复现├─ test/│ └─ attack-reproduce.t.sol
✅ 本章总结
-
合约业务逻辑的漏洞远比技术漏洞更隐蔽
-
DeFi 要保护资金池 / DAO 要防治理劫持 / GameFi 要控 bot 滥用
-
所有“链上经济行为”都需要“链上防护机制”对冲
-
审计者要思考“攻击者是否能不走正门拿到奖励?”
✅ 下一章预告|第 11 章:结课项目实战 × 从合约到前端完整上线
👉 编写一个完整的 DApp 项目(合约 × 前端 × 后端)
👉 包含部署、授权、交互、奖励发放、安全验证
👉 教你如何写一份“可交付、可维护、可扩展”的链上应用
📦 想看「DAO 提案注入攻击复现完整代码 + 防御修复对比」?
📌 想补一个《链上经济攻击路径图谱》的 PDF?评论区告诉我就安排!
下一章,我们从安全走向综合项目能力输出,全链路实战 💥
你说写,我就写!🔥