THORChain (RUNE) 的安全风险

根据 THORChain 4 月 1 日发布的 2022 年第一季度财资报告,尽管受到市场持续低迷和高度不稳定的地缘政治因素的双重影响,该链的收入仍实现了增长。 公开数据显示,2022年第一季度THORChain实现收入21.7亿美元。被誉为“跨链版UniSwap”的THORChain凭借独特的优势在跨链交易市场站稳脚跟,获得了投资者的广泛认可。

在所有这些光鲜亮丽的背后,THORChain 也深受黑客攻击的困扰。 自在以太坊上推出以来,该链经常遭受安全漏洞,这一事实令人对其安全性产生怀疑。 4 月 11 日,THORChain 发布关于网络钓鱼攻击的推文,警告用户不要与 [DeTHOR] 或钱包中的其他未知代币,这再次引发了对其安全问题的担忧。

CoinEx安全团队在为CoinEx产品构建完善的安全体系的同时,还对区块链空间的安全事件进行跟踪,帮助用户从技术安全的角度更好地了解不同项目的安全性,降低投资风险。 为了提高区块链领域的安全标准,CoinEx安全团队对THORChain(RUNE)的安全风险进行了分析。 团队希望 THORChain 能够通过优化相关智能合约代码来注意和缓解以下风险。 此外,这篇文章也是对用户的一个警告,提醒他们要提高资产安全意识,避免资产损失。

THORChain (RUNE) 的安全性如何?

CoinEx安全团队通过分析THORChain(RUNE)的合约代码和逻辑,发现以下风险:

首先,让我们看看 THORChain (RUNE) 的合约代码:

https://etherscan.io/address/0x3155ba85d5f96b2d030a4966af206230e46849cb#code

我们可以看出 RUNE 是一个非常标准的 ERC-20 代币。 需要注意的是,除了 ERC-20 接口之外,THORChain (RUNE) 还提供了一个额外的接口:

根据transferTo(如上图所示),THORChain(RUNE)使用tx.origin,这是其存在安全风险的原因之一。 在这里,我们应该解释一下 tx.origin 和 msg.sender 的区别:

下图描述了当普通地址调用智能合约时会发生什么:

在这种情况下,msg.sender = account.address,并且 tx.origin = account.address,这意味着 msg.sender 与 tx.origin 相同。

下面是一个账户调用合约 A,合约 A 调用合约 B 的情况:

当合约 A 调用合约 B 时(如上图),我们可以看出 msg.sender 等于合约 A 中的 tx.origin。

但是,在合约 B 中,msg.sender = contractA.address,而 tx.origin = account.address。 因此,tx.origin 就像一个全局变量,遍历整个调用栈,返回最初发送交易的账户地址。 这是关键问题:迄今为止,几乎所有已知的针对 THORChain (RUNE) 的攻击都与 tx.origin 相关。

现在让我们看看攻击者如何通过 tx.origin 窃取用户的 RUNE 令牌:

攻击一:从羊群中偷走一只山羊

以太坊上的地址分为外部地址和合约地址。 通过外部地址将 ETH 转入这两类地址是有本质区别的。 Solidity 的官方文档指出,合约地址必须在进行转账之前实现接收以太币功能。

根据 tx.origin 的特性,黑客可能会构建攻击合约:

当攻击合约收到用户的 ETH 转账时,它会“从羊群中偷羊”——合约将在此过程中窃取用户的 RUNE 代币。

攻击二:内攻

内部攻击是一种特殊类型的攻击。 当试图通过内部攻击窃取用户的 RUNE 时,黑客需要有一个中等令牌。 此外,代币还必须调用第三方合约。 根据以太坊上RUNE的转账记录,部分攻击者通过AMP代币转账入侵RUNE。

AMP代币 使用 ERC-1820 标准来管理 Hook 注册,并在每次转移时检查 Hook 是否注册。 如果 Hook 已注册,则将调用该 Hook。

AMP代币 的合约代码显示,转账的最终实现是:_transferByPartition。 同时,涉及到 transferHook 的调用有两个:_callPreTransferHooks(传输前)和_callPostTransferHooks(传输后)。 特别地,_callPreTransferHooks 是针对from 地址,而_callPostTransferHooks 是针对to 地址(即接收地址)。

对于普通用户来说,从自己那里窃取代币是没有意义的。 因此,攻击者可能会利用 _callPostTransferHooks。 现在让我们看看 _callPostTransferHooks 的代码。

IAmpTokensRecipient(recipientImplementation).tokensReceived()

我们可以看出,攻击者可以利用的唯一回调是 IAmpTokensRecipient(recipientImplementation).tokensReceived()

接下来,我们将说明如何在进行 AMP 令牌传输时使用此调用来传输用户的 RUNE。

第一步:需要一个调用合约(如下图):

第二步:部署合约获取攻击地址。

第三步:调用ERC-1820合约接口(setInterfaceImplementer)注册接口。

ERC-1820 地址:0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24

合约接口:setInterfaceImplementer(address toAddr, bytes32 interfaceHash, address implementationer)

特别地,toAddr 是 AMP 传输的接收地址,

interfaceHash为AmpTokensRecipient的hash:

0xfa352d6368bbc643bcf9d528ffaba5dd3e826137bc42f935045c6c227bd4c72a

interfaceHash 是 AmpTokensRecipient 的哈希值:

0xfa352d6368bbc643bcf9d528ffaba5dd3e826137bc42f935045c6c227bd4c72a

Implementer 是第 2 步得到的 Attack Address。

第四步:引诱用户将AMP转移到toAddr触发回调,同时窃取他的RUNE。

攻击 3:网络钓鱼攻击

顾名思义,在网络钓鱼攻击中,攻击者承诺提供令人难以置信的好处来引诱用户执行某些合约操作。 在这里,我们将介绍一种常见的网络钓鱼攻击。

第 1 步:攻击者发行 ERC-20 代币,并可能将其写入任何涉及签名的合约接口。

第 2 步:在 Uniswap 或任何其他交易所上创建交易对;

第 3 步:向所有持有 RUNE 代币的用户/地址提供空投;

钓鱼攻击的前期工作基本就是通过以上这些步骤完成的。 接下来,攻击者只需要等待用户进行掉期交易,而用户一旦执行诸如批准、转移等操作,就有丢失其 RUNE 的风险。

此外,为了进一步验证THORChain合约代码的安全风险,CoinEx与业内知名的两家安全机构慢雾和PeckShield的安全团队进行了讨论。 经慢雾和PeckShield证实,上述安全风险确实存在。

到目前为止,我们已经介绍了几种类型的攻击,以及用户面临的安全风险。

项目组应该如何优化合约代码,让自己更安全,保护用户资产?

唯一的答案是谨慎使用 tx.origin。

面对看似不可避免的攻击,普通用户如何降低风险并保护其资产? CoinEx 安全团队提出以下建议:

  1. 对于第 1 次攻击:进行转移时,跟踪估计的 Gas 消耗量。 对于普通的 ETH 转账来说,21,000 的 Gas 费已经绰绰有余。 如果气体消耗量远远超过该数字,请小心。
  2. 对于第 2 次攻击:通过采用不同的钱包来隔离你的代币。 你可以将不同的令牌存储在不同的地址中。 当涉及到交易所提供的热钱包地址时,需要格外小心。
  3. 第 3 次攻击:贪婪是万恶之源。 不要盲目参与任何空投活动。

安全一直是区块链领域最关心的问题。 包括项目团队和交易所在内的各方在项目运营过程中应优先考虑安全,保障用户资产安全,共同推动区块链行业健康发展。

资讯来源:由0x资讯编译自NEWSBTC。版权归作者所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢