织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 比特币 > 比特币资讯

深度 | 剖析以太坊智能合约的安全性漏洞,有何解决办法?(4)

时间:2021-03-08 14:54来源:未知 作者:admin 点击:
具有意外还原的DoS:发生这种情况的原因是,由于主叫方合约遇到外部呼叫失败而导致事务被还原,或者被叫方合约故意执行还原操作以中断主叫方合约的

具有意外还原的DoS:发生这种情况的原因是,由于主叫方合约遇到外部呼叫失败而导致事务被还原,或者被叫方合约故意执行还原操作以中断主叫方合约的执行。此漏洞是由执行被调用方合约还原的调用方合约引起的。通过使接收者调用交易来“提取”发件人为接收者预留的资金,可以防止此漏洞,从而有效地防止了发件人的交易被还原。

整数上溢和下溢:首次从针对BEC令牌的攻击中发现了此漏洞[4]。当运算的结果超出了Solidity数据类型的范围时,就会发生这种情况,例如导致对攻击者的余额或其他状态变量进行未经授权的操纵。该漏洞是由Solidity源代码未在数字输入上执行正确的验证引起的,并且Solidity编译器和EVM均未提供整数上溢/下溢检测。可以通过使用SafeMath库来防止此漏洞处理这些问题。 

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol

操纵余额:当合约的控制流决策依赖于此值时,会发生此漏洞。平衡或解决(balance)平衡,攻击者可以利用它使自己成为唯一可以获取金钱的人。可以通过不使用任何条件声明中的合约余额来防止此漏洞[5]。通过tx.origin进行身份验证:tx.origin是Solidity中的全局变量,它指的是发起有问题交易的原始EOA。当合约使用tx.origin进行授权时会发生此漏洞,这可能会受到网络钓鱼攻击的危害。通过使用msg.sender而不是tx.origin进行身份验证,可以防止此漏洞,因为msg.sender返回导致该消息的帐户。

错误的可见性:错误地指定功能的可见性,从而允许未经授权的访问。 

无保护的自杀:合约的所有者(或受委托的第三方)可以使用自杀或自毁方法销毁合约。 取消合约时,将删除其关联的字节码和存储。 该漏洞是由合约强制执行的身份验证不足引起的。 可以通过强制执行例如多因素身份验证来缓解此漏洞,这意味着自杀操作必须得到多方的批准。

将以太币泄漏到任意地址:当任意调用方都可以提取合约的资金时,该漏洞就不会发生,该调用方既不是合约的所有者,也不是向合约存入资金的投资者。 此漏洞是由调用者调用将以太币发送到任意地址的功能时无法检查呼叫者的身份引起的。 通过对发送资金的功能进行适当的身份验证,可以防止此漏洞。

机密性失效:在区块链中,由于区块链的公共性质(即交易细节是众所周知的),限制变量或函数的可见性并不能确保变量或函数是机密的。 防止此漏洞的一种可能解决方案是使用加密技术,例如定时承诺[6]。

签名信息不足:当数字签名对多个交易有效时,就会发生此漏洞,当一个发件人(例如Alice)通过代理合约向多个收件人汇款(而不是发起多个交易)时,可能会发生此漏洞。 此漏洞最初是在针对智能合约的重播攻击中利用的。通过在每条消息中合并适当的信息(例如现时值和时间戳)可以防止此漏洞。 (责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容