美图欣赏 | 设为首页 | 加入收藏 | 网站地图

当前位置:电脑中国 > 新闻 > 安全资讯 >

去中心化应用安全威胁Top10榜单出炉!了解智能合约中的威胁有哪

2018-04-22 17:03|来源:未知 |作者:dnzg |点击:

NCC Group 发起了一个名为 2018 年去中心化应用安全 Top10 ( Decentralized Application Security Project)的项目。据悉,该项目会与类似于 OWASP 的方式发布去中心化应用安全领域中,每年的十大安全威胁报。与 OWASP 开放合作透明的运作理念相似,该项目也是以集成合作的方式披露智能合约中存在的安全漏洞。

本文是第一版的 DASP Top10 2018 内容,详细描述包括递归调用漏洞、权限控制漏洞、算数问题、返回值问题、拒绝服务、伪随机在内的智能合约威胁。


一、递归调用漏洞

该漏洞的利用有一个知名的案例,以太坊(Ethereum)漏洞。在首次发现以太坊存在这个问题的时候,很多人都觉的不可思议,在高漏洞造成数千万美元的损失之后,该漏洞可谓直接导致了以太坊的硬分叉之路。

这个漏洞的触发在于外部合约对正在起草的合约进行新的调用,而这个调用发生在初次执行完成之前。对于函数而言,这个调用意味着合同状态发生了改变,调用的合约变得不可信,外部地址却上使用了低层功能。

该漏洞造成的损失:350万 ETH 损失(当时价值 5000万美元)

二、权限控制漏洞

权限控制问题在所有程序中都很常见,而不仅存在于智能合约之中。事实上,在OWASP中该问题也排行第5。我们通常通过公开或者外部函数获取到合约的内容。但如果合约的可视性没有进行良好的安全设置,攻击者也很容易查看并获取合约的隐私内容和内部逻辑,他们能够找到绕过限制的方式。这些漏洞通常在合约使用tx.origin 对调用者进行验证时触发。

漏洞造成的损失:大约15000ETH(当时约为3000万美元)

三、算数问题

整数的溢出并不少见,但这类问题在智能合约中尤其危险。合约中无符号整数的应用非常普遍,大多数开发人员习惯于简化 int 类型(有符号整数)。 如果溢出问题发生,许多良性代码路径会成为攻击者进行信息窃取或拒绝服务的载体。

四、未经核查的返回值问题

这个问题有时也称为无声的失败发送或者未经核实的发送。我们应该尽可能避免在合约中使用低层次的调用,因为返回值如果处理不当会出现很多意外的行为。

Solidity 中有一部分功能是低层函数,如 call() ,callcode(),delegatecall() 和send()。 这些函数在处理错误方面的行为与其他 Solidity 函数完全不同,他们不会回到当前执行的状态,而只会返回布尔值false,程序会继续执行。

如果这些返回值没有得到核查,就会导致一些预想不到的结果。

五、拒绝服务问题

拒绝服务的情况,包括达到到达了程序的容量上限,意外抛出错误,意外的进程杀死,或者访问控制违规问题。

在去中心化应用、以太坊的世界中,拒绝服务问题往往会是致命的:尽管其他类型的应用程序最终总是可以恢复服务的,但智能合约可能会因一次拒绝服务攻击而永久下线。

(责任编辑:dnzg)