跨链交易协议THORChain被攻击事件分析

SharkTeam

    北京时间7月23日,去中心化跨链交易协议?THORChain(RUNE) 再次遭遇攻击,包括XRUNE 在内的多种 ERC20 代币受到影响,涉及损失约 800 万美元。THORChain 已是一个月内第三次受到攻击,此前在 7 月 16 日遭受攻击,损失约 4000 ETH;在 6 月 29 日遭受恶意攻击,损失 14 万美元。
    
    SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
    一、事件分析
    攻击交易:https://etherscan.io/tx/0xce958939ba23771d0a0b80532c463b4cbbb175f4d14c08d9d27dd251f68a5da1
    
    图 1攻击者攻击THORChain Router获取XRUNE代币
    攻击者调用THORChain Router合约的transferOut函数向攻击者转了一笔数量为amount的代币,代币的类型由asset的类型来确定,转账的sender为THORChain Router的合约地址。
    
    图 2?THORChain Router合约的TransferOut函数
    
    图 3?通过TransferOut函数牟利Sushi币
    攻击者之所以可以实现这样的攻击,是因为THORChain Router合约的TransferOut函数漏洞导致--使用asset.call(abi.encodeWithSignature("transfer(address,uint256)" , to, amount))语句进行转账;
    
    图 4?YFI.sol中的transfer
    
    图 5?FiatToken.sol中的transfer
    
    图 6?XRUNE.sol中的transfer?
    在使用call函数时,msg.sender的值为THORChain Router地址,执行环境为被调用者的运行环境,因此会调用asset代币合约中的transfer函数,向接收者转出代币。而此次攻击者攻击THORChain Router合约牟利的六种代币合约中,实现转账的函数均为"transfer(address,uint256)"这种形式,这也使得攻击者有可乘之机。