2010年8月,比特币发生了一次整数溢出漏洞攻击(CVE-2010-5139),使得攻击者产生了2笔输出92233720368.54277039个比特币的交易,远超中本聪设定的21000000上限。
2018年4月,以太坊上的智能合约也接连发生2起整数溢出漏洞攻击(CVE-2018-10299,CVE-2018-10376),攻击者凭空增发了大量的token,使得投资者的资产被严重稀释。
为了分析当前最流行的以太坊智能合约的安全性,SECBIT实验室安全团队深度扫描检测了当前正在运行的23357个智能合约源代码,通过AI智能合约安全审计模型扫描,实验室安全专家发现其中大量合约代码存在着不同程度的安全隐患。
扫描结果显示,这23,357个智能合约源代码中共有405882处不符合安全开发规范,平均每个合约有超过17个规范违反项。尽管这些点不会立即导致智能合约出现安全漏洞,但是对于保护巨量数字资产的代码,这些问题都有可能成为黑客的分析和攻击方向,作为项目方的开发人员,不能忽视这些隐患,应保持清晰的思路,尽可能严格按照安全开发规范要求进行开发,这样才能避开潜在的攻击威胁。
扫描结果显示,低级别(Low)的安全问题有26,821个,主要集中在未指明版本号以及高GAS消耗等问题。未指明版本号可能会在将来新版本编译器上遇到不兼容问题。高GAS消耗会在网络拥堵时使用户负担过高的手续费,因此SECBIT实验室的安全专家建议开发者在开发过程中为优化函数的GAS消耗。
另外中级(Medium)安全问题有7,202个,主要集中在整数溢出、除法、依赖时间戳、区块哈希的运算。整数溢出问题在BEC、SMT的Token发行合约上已经展现出了危害性,在此不再赘述。EVM目前不支持浮点数,除法运算在EVM上表现为向下取整,开发者在智能合约上应当尽量避免,从而杜绝安全隐患。另外如果将时间戳、区块哈希作为随机数来源,有一定被矿工操纵的风险,开发者应该注意设计安全的交互协议。
扫描结果中高危(high)安全问题有572个,主要集中在代码重入、短地址攻击、强制转账、使用合约余额来做判断、高地址脏数据、tx-origin的误用上。代码重入漏洞曾经导致以太坊历史上震惊世界的 DAO 攻击。其它几个问题也可能导致类似的严重安全问题。
这些问题都有重演类似严重安全事件的可能。
除了上文提到的使攻击者受益的一类安全问题,还有一类漏洞,虽然不会使任何一方收益,但是仍然会给用户带来巨额损失,例如Parity多重签名钱包问题。
为了了解当前智能合约的发展现状,SECBIT实验室安全团队监控扫描了以太坊上所有的历史数据,并统计分析了自创世区块以来,以太坊上所有创建的智能合约信息。
图中横轴表示日期,纵轴表示当日智能合约创建数量
如图所示,以太坊智能合约每日创建数量总体呈现上升趋势,并且合约代码的复杂程度也随之增高 。
据Amberdata网站监控统计,目前以太坊上每小时交易所涉及的金额已经达到1.6亿美元,每天可达40亿美金,其中53.5%的交易涉及智能合约。随着智能合约数量的进一步增多,DApp的广泛应用,其管理的数字资产数量提升,面临的安全威胁也随之增长,由于智能合约难以通过传统的升级、打补丁等方式填补漏洞,通常只能在开发期间或合约部署前进行完备的安全检查。
然而由于一般开发人员的安全意识仍然不够,可能在开发时无法意识到自己造成了安全隐患,这极有可能给智能合约带来相当大程度的安全风险。每一个暴露在开放网络上的智能合约都有可能成为专业黑客团队的金矿和攻击目标。
不同于传统的闭源软件,区块链上的智能合约代码是完全公开透明、并且开源的,因此引入代码安全审计是不可缺少的重要安全举措,通过第三方专业的审计这才能保证合约在虚拟机、语言、业务逻辑等多方面的稳定可靠,并具备抵御攻击能力。作为管理巨量数字资产的智能合约,透过专业的第三方团队来进行安全审计是保障资产安全的负责任的措施。
据SECBIT智能合约安全审计平台实时追踪,以太坊上部署的合约数量已经达到6,081,658个(统计截止到块高度为5,460,050),而真正经过第三方安全审计的智能合约数量可能还不足1%,未来随着智能合约数量的进一步爆发式增长,如果智能合约依然未经安全审计而上链运行,区块链安全乌云仍无法褪去。
如需深入了解智能合约安全开发与安全审计的细节,请与SECBIT实验室联系:info@secbit.io.
SECBIT实验室 由一群热爱区块链技术的极客组建,专注于可信智能合约与安全共识协议研究。实验室成员遍布在全球多个国家,专业领域涉及区块链底层架构、智能合约语言、形式化验证、密码学与安全协议、编译与分析技术、博弈论与加密经济学等诸多学科。SECBIT实验室目前着重于研究区块链智能合约的安全问题,助力区块链团队提高智能合约的可靠性与安全性,开展构建智能合约安全框架的理论探索与技术研发,参与共建共识、可信、有序的区块链经济体。