智能合约漏洞有哪些?

以太坊智能合约中最常见的攻击(蜜罐)涉及黑客利用智能合约漏洞。但是,在社会工程学攻击中,会发生相反的配置:恶意智能合约的所有者是攻击者,智能合约的受害者是与该智能合约进行交互的个人或组织。


在这里揭露了许多可能被利用的社会工程学攻击向量。本质上,所有这些向量都是对以太坊平台的属性或行为的误解(错误假设)。将这些误解分为两大类:1)关于以太坊地址的错误认识,以及2)与EVM和Solidity中的字符串和字符有关的错误认识。


关于地址的错误认识: 以太坊公共地址是一个160位数字,使用40位十六进制表示形式。分析表明,可以在社会工程攻击中利用以下有关以太坊公共地址的四个错误假设。对地址的轻微修改(例如,替换一位数字)对攻击者没有用,因为没人知道与修改后的地址相关联的私钥。本研究证明了成功进行社会工程攻击不一定总是需要知道地址的私钥。EIP-55校验和为防止地址伪造提供了可靠的保护。本研究表明使用零售笔记本电脑或台式计算机上的暴破攻击可能会伪造EIP-55。


以太坊地址与EOA或智能合约相关联,并且不会更改其状态。本研究证明了EOA可以转变为智能合约,反之亦然。所有以太坊账户同样安全,只要它们的私钥是随机的和秘密的即可。本研究展示了以太坊账户的一小部分具有特殊属性,从而使其更容易受到特定的社会工程攻击。


Solidity中的同形异义词后门: 网络钓鱼诈骗中使用了伪造印刷符号,称为同形异义字或Unicode攻击。这些攻击主要是伪造域名,程序源代码中没有记录的同形异义词攻击。令人惊讶的是,对Solidity的分析揭示了以下三个错误认识,这些错误认识为以太坊智能合约中的同形异义词攻击打开了危险的后门。


由于ERC-20 symbol()函数返回的字符串是可选的,并且在设计上具有参考意义,因此不会造成任何危险。研究表明,通过伪造ERC-20 Token的符号,攻击者可以执行社会工程攻击。call()或delegatecall()的两个相同参数始终导致相同的32位函数选择器。研究证明了两个相同的参数能够产生不同的函数选择器,由于缺少引用的函数,这导致执行意外的函数或事务返回。Solidity编译器的函数选择器冲突防止功能消除了智能合约函数的伪造。在智能合约中,具有冲突选择器的两个函数不能共存于一个合约中。研究表明可以使用视觉上相同的call()或delegatecall()例程的参数来挖掘两个函数的名称,这些例程生成不同的选择器,从而允许这两个函数在协定中共存。因此,对于事务发送方来说未知的是,可能会调用一个不存在的函数,从而导致事务逆转。否则可能会调用错误的函数,从而导致意外的代码执行。

分享: