主页 > 问什么手机安装不了imtoken > 以太坊代币“虚假充值”漏洞细节披露

以太坊代币“虚假充值”漏洞细节披露

近日,据慢雾消息,以太坊代币“虚假充值”漏洞影响非常广泛,受影响对象至少包括:相关中心化交易所、中心化钱包、代币合约等。

据慢雾区统计,仅代币合约,据不完全统计,存在“假充值”漏洞风险的合约就有3619个,其中不乏知名代币。 慢雾安全团队分析称,此次事件的影响可能大于USDT“虚假充值”漏洞攻击事件。 由于这不仅仅是漏洞,而是真实的攻击,相关项目方应尽快进行自查。

对于至少有3619个存在“虚假充值”漏洞风险的代币,慢雾认为,一般来说,最好的办法是补发并做好新旧代币的映射。 “因为这种代币如果不这样做,就像一颗“定时炸弹”。你不能指望所有的中心化交易所、中心化钱包等平台都做好安全对接。一旦你不做做这种“假充值”漏洞的判断,吃亏的是平台方。 而如果平台方损失严重,那一定也是整个市场的损失。”

今日上午,“慢雾地带”公众号发布了以太坊代币“虚假充值”漏洞详情及修复方案。 披露全文如下:

披露时间表

以太坊代币“虚假充值”漏洞影响范围非常广泛,受影响对象至少包括:相关中心化交易所、中心化钱包、代币合约等。据我们不完全统计,有3619个单代币合约存在“虚假充值”的风险,包括许多知名代币。 相关项目方应尽快进行自查。 因为这不仅仅是一个错误,这是一次真正的攻击! 出于影响力,我们采用了负责任的披露流程。 本次攻击事件披露前后的相关时间线大致如下:

2018/6/28慢雾区消息,USDT“虚假充值”漏洞攻击披露

2018/7/1 慢雾安全团队开始分析知名公链是否存在类似问题

2018/7/7 慢雾安全团队捕获并确认以太坊相关代币“虚假充值”漏洞攻击事件

2018/7/8 慢雾安全团队分析其影响可能大于USDT“虚假充值”漏洞攻击,及时通知相关客户及慢雾合作伙伴

2018/7/9 慢雾区发布第一条预警

2018/7/10 慢雾安全团队向至少10个区块链生态安全同行同步了详情

2018/7/11 详细报告正式发布

漏洞详情

以太坊代币交易回执中的status字段是0×1(true)还是0×0(false)取决于交易执行过程中是否抛出异常(例如require/assert/revert/throw机制是用过的) 。 当用户调用代币合约的转账函数进行转账时,如果转账函数运行正常usdt充币教程,没有抛出异常,则交易状态为0×1(真)。

以太链怎么充usdt_usdt充币教程_移动话费充q币教程

如代码所示,部分代币合约的转账函数使用if判断方式查询转账发起方(msg.sender)的余额。 当balances[msg.sender] < _value时,进入else逻辑部分,返回false,最终没有抛出异常。 我们认为only if/else这种温和的判断方式在transfer等敏感函数场景下是一种不严谨的编码方式。 大部分代币合约的transfer function都会采用require/assert方式usdt充币教程,如图:

usdt充币教程_移动话费充q币教程_以太链怎么充usdt

当不满足条件时,会直接抛出异常中断合约后续指令的执行,或者可以使用EIP 20推荐的if/else + revert/throw函数组合机制来显示抛出的异常,如如图所示:

以太链怎么充usdt_移动话费充q币教程_usdt充币教程

我们很难要求所有程序员编写具有最佳安全实践的代码。 这种不精确的编码方式是一种安全缺陷,在特殊场景下可能会导致安全问题。 攻击者可以利用存在缺陷的代币合约向中心化交易所、钱包等服务平台发起充值操作。 如果交易所只判断TxReceipt Status为成功(即上述状态为0×1(true)),如果认为充值成功,则可能存在“虚假充值”漏洞。如图:

usdt充币教程_以太链怎么充usdt_移动话费充q币教程

参考示例TX:

维修方案

除了判断交易是否成功,还需要判断充值钱包地址的余额是否准确增加。 其实这个二次判断可以通过事件日志来进行。 很多中心化交易所、钱包等服务平台会通过事件日志获取转账金额来判断转账的准确性。 但是这里需要特别注意合约的恶意行为,因为Event是可以任意编写的,并不是不可篡改的强制默认选项:

发出转移(从,到,值); // value等参数可以任意定义

作为平台方,在对接新上线的代币合约之前,需要进行严格的安全审计。 这种安全审计必须强制代币合约方实施最佳安全实践。

作为代币签约方,在编码方面,应严格执行最佳安全实践,并委托第三方职业安全审计机构进行严格、完整的安全审计。

后记问答

问:我们为什么采用这种披露方式?

A:本质上就是和攻击者赛跑,但是生态太大了,我们不能用我们的力量覆盖所有的东西,我们只能尽力覆盖,比如第一时间通知我们的客户,以及然后是慢雾区合作伙伴的客户,然后是关注这个生态的安全同行的客户,最终还是要公开细节。

Q:为什么说泄露的不仅仅是漏洞,而是攻击?

A:其实以我们的作风,一般不会简单的提漏洞。 漏洞对我们来说太普遍了,利用漏洞进行高调操作可不是什么好办法。 攻击不同,攻击已经发生,我们必须与攻击者赛跑。 公开是一门艺术,没有什么是完美的,我们只能尽力让这个生态有安全感。

Q:至少有3619个代币存在“假充值”风险。 我应该如何处理这些令牌?

A:很纠结。 一般来说,这些代币最好的办法就是重新发行,然后将新旧代币“映射”。 因为如果这种代币不这样做的话,就像一颗“定时炸弹”。 你不能指望所有的中心化交易所、中心化钱包等平台都做好安全对接。 一旦不做这种“虚假充值”的判断漏洞,吃亏的就是这些平台方。 而如果平台亏损严重,对整个市场来说必然是一个损失。

Q:哪些知名代币存在“虚假充值”漏洞?

A:我们不会进行点名和披露。

Q:哪些交易所和钱包受到了“虚假充值”漏洞的攻击?

答:恐怕没有人会公开提及,我们也不会点名。

问:这些代币是否可以不重新发行?

A:也许,但并不完美。 不选择补发的代币,要么在主网发布后很快被“映射”,要么必须做好通知所有接入该代币的平台的工作。

Q:为什么慢雾可以捕捉到此类攻击?

答:我们有一个强大的威胁情报网络。 当我们发现异常时,我们的默认直觉是这是一次攻击。

Q:除了USDT和以太坊代币存在“虚假充值”漏洞的风险,还有哪些链存在?

A:暂不披露,但相信我们,“假充值”漏洞已经成为区块链生态中不容忽视的一类漏洞。 这是慢雾安全团队在漏洞和攻击发现史上的一项非常重要的成果。