xch钱包转账费用,xch钱包下载

  

  尽管第1部分讨论了一些更明显的漏洞,但本文将讨论尚未被广泛利用的漏洞。   

  

  直接开始:   

  

  4.强迫以太坊签合同Solidityselfdestruct做了两件事。   

  

  它使契约无用,有效地删除了地址的字节码。它将所有合同的资金发送到目标地址。这里的特殊情况是,如果接收地址是合同,其备份功能是不会被执行。.   

  

  这意味着,如果合同的一个函数有一个条件语句,该语句依赖于低于特定金额的合同余额,则该语句可能被忽略:   

  

     

  

  由于回掷功能,通常契约无法接收以太坊。但是,如果以此协定为目标的协定自毁,将不会调用回退函数。因此,this.balance变得大于0,这样攻击者就可以绕过require语句onlyNonZeroBalance。   

  

  缓解办法:永远不应该用合同的余额作为保护。   

  

  5.调用未知(DoS意外恢复)该漏洞出现在以太智能合约之王中。   

  

     

  

  在这种情况下,攻击者的契约首先可以通过向不安全的契约发送足够的以太币来获得领导权。然后,由于上述代码段中的第25行,将会抛出另一个试图声明领导权的玩家的事务。   

  

  虽然是简单的攻击,但是会导致契约永久拒绝服务,使其失效。这可以在遵循相同模式的其他庞氏骗局合同中找到。   

  

  6.短url攻击这种攻击是由假人的团队发现的。这个漏洞允许攻击者滥用这个转移函数,提取比他允许的更多的ERC20令牌。   

  

  注意:为了简单起见,我们将使用正常大小的一半。   

  

  为了解释这个错误,让我们考虑一个有钱包的交易所,一个用户在交易所的钱包里有10000个代币的余额。3Tokens让我们也考虑这个用户的地址0x12345600――注意后面的零――并且他们想要提取的金额大于他们的余额。为此,他们会到交易所点击令牌的取款按钮,输入他们的地址,而不是尾随的零(交易所不执行输入验证,允许交易通过,即使攻击者的地址长度无效)。   

  

  然后,EVM通过连接函数的签名和参数计算要执行的交易的输入数据。   

  

  ERC20的传递函数公式为transfer (address to,uint256amount)。这三个字段如下:   

  

     

  

  仔细观察漏洞发现,事务的长度短了2个字节(现实世界中是4个字节,包括完整的字)。在这种情况下,EVM将用尾随零填充交易,结果是:   

  

     

  

  这样,即使攻击者根据兑换的余额是32个代币,他们也可以用更大的金额进行完全合法的转账。这当然取决于发送账户(交易所的钱包)有足够的余额进行转账。   

  

  缓解措施:   

  

  如果大小无效,将引发Msg.data。交易所必须执行输入验证   

  

  描述msg.data大小的Reddit注释   

  

  额外收获:始终避免将now和block.blockhash用于合同的业务逻辑,因为结果是可预测的,或者可以被矿工操纵。   

  

  我可以做些什么来保护我的智能合约?   

  

  其中,我认为最重要的选择是:   

  

  不要写花哨的代码,使用经过审计和测试的代码尽可能多地编写单元测试我可以使用哪些工具来审核和分析我的代码?.   

  

  首先,solc执行语义检查是迈向安全的一大步,因为编译时会发现潜在的错误。   

  

  Securify.ch是智能合约的静态分析工具。Remix还对代码进行静态分析,可以发现未初始化的存储指针和重入等错误。OYE是另一个最近发布的智能合同分析工具,Hydra是一个“加密经济合同安全和分散安全赏金的框架”。Porosity是一个“基于区块链的以太坊智能合约的反编译器”。蝎狮是一个支持EVM的动态二元分析工具。Ethersplay是EVM的二进制忍者插件。最后,用solgraph之类的工具可视化你的代码可以帮助你发现关于函数可见性的潜在错误。   

  

     

相关文章