值得关注的其他问题
尽管有一个安全问题排名很不错,但它往往一些有趣的细节,因为某些细节与排名列表并不完全一致。在深入挖掘10大问题之前,必要阐述一下原始研究中一些值得关注的亮点问题:
在2018年,最主要的两个问题是外部合约拒绝服务和重入。但是现在这些问题有所缓解。可以从我们的研究博客中了解更多有关Reentrancy的信息:从安全角度出发审视智能合约。
译者注:实际上由于DeFi应用之间的组合应用,又导致了多起严重的重入攻击事件。
现在Solidityv0.6.x发布了,它带来了许多重大变化,然而扫描的智能合约中有50%甚至还没有准备好使用Solidityv0.5.0编译器。另外30%智能合约使用了过时的语法,并且83%的合约在指定编译器版本存在规范问题。
Hacken已成功完成对Scaleswap的智能合约代码审查及安全分析:5月11日,基于以太坊Layer2的ID0平台Scaleswap宣布,网络安全公司Hacken对Scaleswap智能合约代码的安全审查已结束,并于审查结果中给出了well-secured(完全可靠)的最高评价。Scaleswap是一个基于以太坊Layer2的ID0平台,旨在建立一个兼顾高效率、低GAS费、安全可靠的ID0平台。[2021/5/12 21:52:44]
译者注:Solidity0.6在语义上更明确了,有助于编译器及时发现问题,让代码更安全,
尽管可见性问题没有出现在2018年的前10位,也没有出现今年的前10,但可见性问题增加了48%,值得关注。
下表比较了2018年和2020年十大常见问题列表之间的变化。这些问题按严重程度和流行程度排序:
掌柜调查署 | FTX首席运营官:目前DeFi的火热存在智能合约安全性等隐患:在今日举行的《掌柜调查署 | DeFi正面临生死抉择?FTX带你抓住新机遇》直播中,针对“DeFi 的火热泡沫可能会破裂,现存DeFi的隐患又有哪些?”的问题,FTX首席运营官Constance表示,目前DeFi的火热存在几点隐患(1) 智能合约的安全性问题;(2) 对Defi的实际需求是否真实存在;(3)对于DEX本身的需求是否可以持续。
首先,智能合约的漏洞是一大隐患。今年4月uniswap爆出智能合约漏洞,漏洞被人利用盗取数十万美金资产,后Landf.me因相同漏洞,被盗取数千万美金资产。其中,智能合约自动化协议的授权转账相关的滥用漏洞让用户钱包内的资产面临风险。同时,智能合约的撰写人在撰写的能力上和本身道德标准上提出了更高要求,这对后续智能合约的运行风险产生了直接的影响。这些风险是否会随着区块链行业以及DeFi的普遍迭代中慢慢减少还有待考察。
其次,DeFi的需求是否真实存在。例如流动性挖矿存在一定的风险,究其根本是流动性挖矿的需求是伪需求,并没有为大家带来真实的流动性,解决生活中的任何实际问题。
最后,对于DEX的需求是否可以持续。几个月以前,全球DEX交易量每天不超过1千美金,而到今天,因为流动性挖矿而使交易量上升到2亿美金一天。[2020/8/18]
1.未检查的外部调用
政策 | 英国法律委员会探索现行法律框架在智能合约领域应用性:据CCN报道,英国法律委员会(UK Law Commission)2017-18年度报告透露,英国法律委员会于2018年夏季启动新项调研,预期调研报告内容有10页,旨在审查现行的英国法律框架是否适用于区块链智能合约。[2018/7/29]
在2018年Solidity十大安全问题榜单上未检查的外部调用是第三个常见问题。由于现在前两个解决了,因此未检查的外部调用成为了2020年更新列表中最常见的问题。
Solidity底层调用方法,(例如
address.call()
)不会抛出异常。而是在遇到错误,返回
false
。
而如果使用合约调用
ExternalContract.doSomething()
时,如果
doSomething()
Penta可以为智能合约及区块链应用提供独立的虚拟智能运行空间:Penta公链(PNT) CMO Stephane Laurent在“区块链技术与应用高峰论坛”谈及Penta作为公链如何吸引开发者在其平台构建DAPP时表示:首先在技术层面,Penta构建的梵塔界(PDW)为智能合约及区块链应用提供完整的、独立的虚拟智能运行空间,梵塔界会为区块链应用提供独立计算资源、数据库、文件存储等应用运行所需资源;其次Penta公链对开发者非常友好,提供 DAPP应用开发组件与SDK,简化 DAPP的开发;此外Penta团队此前已经与诸多企业、机构合作落地了很多联盟链项目,可以帮助应用开发者更好了解企业和行业需求,打造可持续的商业模型;最关键的是Penta将利用自身的社区优势帮助开发者共建社区,实现互惠共赢。[2018/6/3]
抛出异常,则异常会继续「冒泡」传播。
应该通过检查返回值来显式处理不成功的情况,以下使用
addr.send()
Penta CEO David Ritter针对EOS重大漏洞表示:智能合约虚拟机与宿主机的安全隔离至关重要:Penta公链(PNT)CEO David Ritter针对EOS被曝出的堪称“史诗级漏洞”的智能合约虚拟机安全问题表示,智能合约虚拟机是区块链平台承载商业的核心,智能合约虚拟机与宿主机的安全隔离至关重要,设计时需要考虑:
1.智能合约运行环境要容器化、沙盒化,尽量与操作系统隔离;
2.智能合约语言要采用DSL,而非通用语言,如采用函数式语言;
3.智能合约虚拟机设计要简洁明了,避免引入复杂繁琐的功能;
4.对智能合约的复杂度要有限制,递归调用、多重嵌套循环等过于复杂的合约应拒绝执行。[2018/5/29]
进行以太币转账是一个很好的例子,这对于其他外部调用也有效。
if(!addr.send(1)){revert(。
2.高成本循环
高成本循环从Solidity安全榜单的第四名上升至第二名。受该问题影响的智能合约数量增长了近30%。
大家都知道,以太坊上的运算是需要付费的。因此,减少完成操作所需的计算,不仅仅是优化问题,还涉及到成本费用。
循环是一个昂贵的操作,这里有一个很好的例子:数组中包含的元素越多,就需要更多迭代才能完成循环。最终,无限循环会耗尽所有可用GAS。
for(uint256i=0;i<elements.length;i++){//dosomething}
如果攻击者能够影响元素数组的长度,则上述代码将导致拒绝服务(执行无法跳出循环)。而在扫描的智能合约中发现有8%的合约存在数组长度操纵问题。
3.权力过大的所有者
这是Soldiity十大安全问题新出现的问题,该问题影响了约16%的合约,某些合约与其所有者紧密相关,某些函数只能由所有者地址调用,如下例所示:
只有合约所有者能够调用
doSomething()和doSomethingElse()
函数:前者使用onlyOwner修饰器,而后者则显式执行该修饰器。这带来了严重的风险:如果所有者的私钥遭到泄露,则攻击者可以控制该合约。
4.算术精度问题
由于使用256位虚拟机,Solidity的数据类型有些复杂。Solidity不提供浮点运算,并且少于32个字节的数据类型将被打包到同一个32字节的槽位中。考虑到这一点,你应该预见以下程序精度问题:
functioncalculateBonus(uintamount)returns(uint){returnamount/DELIMITER*BONUS;}
如上例所示,在乘法之前执行的除法,可能会有巨大的舍入误差。
5.依赖tx.origin
6.溢出
Solidity的256位虚拟机存在上溢出和下溢出问题,这里有具体的分析。在
for
循环条件中使用
uint
数据类型时,开发人员要格外小心,因为它可能导致无限循环:
7.不安全的类型推导
该问题在Solidity十大安全问题排行榜中上升了两位,现在影响到的智能合约比之前多了17%以上。
8.不正确的转账
此问题在Solidity十大安全问题榜单中从第六位下降到第八位,目前影响不到1%的智能合约。
9.循环内转帐
当在循环体中进行以太币转账时,如果其中一个转账失败,那么整个交易将被回滚。
for(uinti=0;i<users.lenghth;i++){users.transfer(amount);}
在这个例子中,攻击者可能利用此行为来进行拒绝服务攻击,从而阻止其他用户接收以太币。
10.时间戳依赖
如果你的应用需要随机性,可以参考RANDAO合约,该合约基于任何人都可以参与的去中心化自治组织,是所有参与者共同生成的随机数。
总结
比较2018年和2020年十大常见问题时,我们可以观察到开发最佳实践的一些进展,尤其是那些影响安全性的实践。看到2018年排名前2位的问题:外部合约拒绝服务和重入,已经不再榜单了,这是一个积极的信号,但仍然需要采取措施来避免这类常见错误。
请记住,智能合约在设计上是不可变的,这意味着一旦创建,就无法修补源代码。这对安全性构成了巨大挑战,开发人员应利用可用的安全测试工具来确保在部署之前对源代码进行了充分的测试和审核。
Solidity是一种非常新且仍在成熟的编程语言,Solidityv0.6.0引入了一些重大更改,并且预计在以后的版本中还会有更多更改。
经过了之前USDT事件的一波震荡之后,近期USDT已经重新稳定,汇价回到1USDT=0.98USD,整体盘势也相对平淡.
1900/1/1 0:00:00实际上在公链领域除了数字货币还有一些非常热门和值得关注的生态。对普通投资者来说,这些生态也是可以尝试参与的,参与这些生态也能带来风险可控的收益.
1900/1/1 0:00:00最近加密货币市场一片哀嚎,比特币从11/15经历第一次大跌,11/20经历第二波下跌,至今日已跌到4300美元左右.
1900/1/1 0:00:00了解过比特币的人,很难对比特币无动于衷。 有的人是比特币“革命派”,对他们而言,比特币能重塑金融体系.
1900/1/1 0:00:00一个经常听到的评论是,没有银行会使用Ripple或XRP。美国银行最近加入RippleNet似乎大大改变了这种说法.
1900/1/1 0:00:00人们常常会想,“这项技术是如此地优越,为什么大家不去采用呢?”,但实际要改变根深蒂固的行为是很困难的,因此转型通常需要几十年而不是几年的时间.
1900/1/1 0:00:00