找回密码
 立即注册
搜索
热搜: GTokenTool
查看: 117|回复: 1

攻击者是如何把代币从合约中转移走的

[复制链接]

212

主题

211

回帖

1228

积分

管理员

积分
1228
发表于 2025-6-20 18:14:08 | 显示全部楼层 |阅读模式
代币是存储在合约地址内的,攻击者使用Multicall方法调用合约地址,直接将代币全部转移走了。这种是怎么实现的?

212

主题

211

回帖

1228

积分

管理员

积分
1228
 楼主| 发表于 2025-6-20 18:18:30 | 显示全部楼层
攻击者从智能合约中转移走代币的常见手段通常涉及技术漏洞、逻辑缺陷或权限滥用。以下是主要的攻击方式及典型案例分析:

1. 重入攻击(Reentrancy)
  • 原理:合约在更新状态前先调用外部合约,攻击者通过递归回调重复提取资金。
  • 案例:2016年The DAO攻击(损失360万ETH)。
  • 攻击步骤:

    • 攻击合约调用受害合约的withdraw函数。
    • 受害合约发送ETH前未更新余额。
    • 攻击合约的fallback函数再次调用withdraw,形成循环。

  • 防御:使用检查-效果-交互模式(Checks-Effects-Interactions),或引入重入锁(如OpenZeppelin的ReentrancyGuard)。


2. 权限配置错误
  • 原理:合约管理员权限(如owner)被泄露或未限制关键函数(如mint、transferOwnership)。
  • 案例:2022年SushiSwap攻击(攻击者篡改owner后窃取代币)。
  • 常见漏洞:

    • 使用硬编码或可预测的私钥。
    • 未撤销测试网的临时权限。

  • 防御:多签名钱包管理权限,最小化特权。


3. 逻辑漏洞
  • 类型:

    • 整数溢出/下溢:未使用SafeMath库(如早期ERC20代币)。
    • 价格操纵:依赖单一交易所价格(如2023年Curve池攻击)。
    • 条件竞争:依赖时间戳或区块高度。

  • 案例:2023年BonqDAO攻击(操纵预言机价格清算抵押资产)。


4. 未验证返回值(ERC20兼容性问题)
  • 原理:部分ERC20代币(如USDT)的transfer函数返回bool,但未检查返回值。
  • 漏洞代码:
    solidity

    IERC20(token).transfer(attacker, amount); // 未检查返回值
  • 防御:使用OpenZeppelin的SafeERC20库强制检查。


5. 跨合约调用劫持
  • 原理:攻击者通过恶意合约在回调中篡改执行流。
  • 示例:
    solidity
  • function onERC721Received(address, address, uint256, bytes memory) public returns (bytes4) {    victimContract.transferFunds(); // 在NFT转账回调中触发资金转移    return IERC721Receiver.onERC721Received.selector;}
  • 防御:限制回调函数的操作范围。


6. 签名钓鱼(Phishing)
  • 方式:

    • 诱导用户签署恶意permit(ERC2612)或approve交易。
    • 伪造前端界面获取高权限授权。

  • 案例:2023年Ledger供应链攻击(伪造DApp劫持签名)。


7. 预言机操纵
  • 原理:通过操纵价格数据源(如闪电贷抬高价格)触发虚假清算或铸币。
  • 防御:使用去中心化预言机(如Chainlink)和延迟更新机制。


防御建议
  • 代码审计:使用专业工具(如Slither、MythX)和第三方审计。
  • 权限隔离:关键函数设置时间锁或多签名。
  • 标准库:优先使用OpenZeppelin等经过验证的库。
  • 监控:部署异常交易检测系统(如Forta)。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Telegram|手机版|小黑屋|GTokenTool

GMT+8, 2025-9-11 04:11 , Processed in 0.020601 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表