《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > ERC20智能合约整数溢出系列漏洞披露
ERC20智能合约整数溢出系列漏洞披露
信息技术与网络安全
陈力波,殷婷婷,倪远东,张超
(清华-360企业安全联合研究中心(筹),北京 100015)
摘要: 从2016年The DAO被盗取6000万美元开始 ,到美链BEC价值归零、BAI和EDU任意账户转帐,再到最近EOS漏洞允许恶意合约穿透虚拟机危害矿工节点,“智能合约”俨然成为区块链安全重灾区。“清华-360企业安全联合研究中心”团队在区块链安全方面进行了持续研究,开发了自动化漏洞扫描工具,近期发现了多个新型整数溢出漏洞,可造成超额铸币、超额购币、随意铸币、高卖低收、下溢增持等严重危害。
中图分类号:TP393.08
文献标识码:A
DOI: 10.19358/j.issn.2096-5133.2018.08.001
中文引用格式:陈力波,殷婷婷,倪远东,等.ERC20智能合约整数溢出系列漏洞披露[J].信息技术与网络安全,2018,37(8):3-6.
Dozens of integer overflow vulnerabilities found in ERC20 smart contracts
Chen Libo, Yin Tingting, Ni Yuandong, Zhang Chao
(Tsinghua University-360 Enterprise Security Group Joint Research Center, Beijing 100015, China)
Abstract: In 2016,The DAO was stolen for 60 million US dollars,and later the value of Beauty Chain (BEC) became zero,and BAI and EDU were transferred to any account.What’s worse,recently the EOS vulnerability allowed malicious contracts to penetrate virtual machines to harm miner nodes.The smart contract became the hardest-hit area of blockchain.The Tsinghua-360 Enterprise Security Joint Research Center team has conducted continuous research on blockchain security,developed automated vulnerability scanning tools,and recently discovered a number of new integer overflow vulnerabilities that can result in overMint, overBuy, mintAny, underSell, owerUnderfolw,and other serious threats.
Key words : smart contract; blockchain; vulnerability scan

0  引言

智能合约作为区块链2.0的代表技术,适应于区块链去中心化、分布式的特点,具有独立运行、不可篡改的优良特性,可用于实现包含金融工具在内的各类分布式应用。开发者可以自行定义交易逻辑并开发代码发布到链上,合约代码在矿工节点的虚拟机环境(如EVM)中执行。合约交易被打包进区块后,链上节点执行相同代码,从而同步改变链上数据状态。故合约的多方参与者无需建立信任,也无法相互欺骗。

与传统程序一样,智能合约无法避免地存在安全漏洞。而与传统程序不一样的是,合约运行在开放的区块链网络当中,可以被任意调用,而且合约的执行具有“不可更改”的效果,导致合约的漏洞被利用之后危害更大[6]。前面提到的BEC等合约中存在的整数溢出漏洞便是一个典型的例子,攻击者对漏洞的利用造成了数额惊人的损失。 

整数溢出是一种常见的高危漏洞,曾引发许多严重事故。1996年阿丽亚娜5型运载火箭在发射37 s后解体并爆炸就是由于整数溢造成的[7]。整数溢出的原理是:计算机中整数变量有上下界,如果在算术运算中出现越界,即超出整数类型的最大表示范围,数字便会如表盘上的时针从12到1一般,由一个极大值变为一个极小值或直接归零。此类越界的情形在传统的软件程序中很常见,但是否存在安全隐患取决于程序上下文,部分溢出是良性的(如TCP序号等),甚至是故意引入的(例如用作hash运算等)。整数溢出漏洞检测和校验是有挑战性的,程序员极容易犯错,而自动化检测方法最大难点在于判断候选溢出是否真正导致了危害,以免造成大量的误报。

1   自动化挖掘

“清华-360企业安全联合研究中心” ChainTrust团队成员充分利用多年软件漏洞挖掘的经验,针对智能合约开发了自动化检测工具,可以高效挖掘高危整数溢出漏洞。检测工具通过准确构建整数溢出点的上下文语义,采用符号执行和污点分析等技术,有效区分了无害溢出和有害溢出,能够显著降低漏洞的误报率和漏报率。

截止到目前,团队针对Etherscan上排名前470位的代币合约进行了检测,除去未提供源码、没有完整爬取源码或耗时过长的合约,最终完整分析了390份合约。在这些被分析的合约中,团队总共发现25个智能合约存在整数溢出安全问题,申请获得了5个CVE编号,主要包含下述6类新型危害。

团队成员在“全球EOS开发者大会”上对部分漏洞进行了首次披露。本报告将进行详细披露,旨在推进社区的安全健康发展。

2  新型漏洞详情

2.1   underSell:高卖低收(CVE-2018-11811)

管理员通过修改合约中的参数来制造溢出漏洞,导致用户提币转出token之后,却收不到ETH(或收到极少量ETH),造成用户经济损失。

漏洞实例:合约Internet Node Token (INT)。

漏洞所在位置:175行,如图1所示。


clb1_副本.jpg

图 1  高卖低收漏洞

 

漏洞攻击效果:用户提币之后,无法得到对应数额的ETH。

漏洞原理:sellPrice被修改为精心构造的大数后,可导致amount * sellPrice的结果大于整数变量(uint256)最大值,发生整数溢出,从而变为一个极小值甚至归零。该值在程序语义中是用于计算用户提币应得的ETH数量,并在175行进行了校验,但该值被溢出变为极小值之后可以逃逸175行的校验,并导致用户售出token后只能拿到少量的(甚至没有)ETH。

2.2   ownerUnderflow:下溢增持(CVE-2018-11687)

管理员在特定条件下,通过调用合约中有漏洞的发币函数制造下溢,从而实现对自身账户余额的任意增加。

 漏洞实例:合约Bitcoin Red(BTCR)

 漏洞所在位置:41行,如图2所示。


clb2_副本.jpg

图 2   下溢增持漏洞 

漏洞攻击效果:管理员执行了一个正常向某个地址进行发币的操作,实际已经暗中将自身账户的余额修改为了一个极大的数。 

漏洞原理:distributeBTR()函数的本意是管理员给指定地址发放一定数额的token,并从自身账户减少对应的token数量。减少管理员账户余额的操作为balances[owner] -= 2000 * 10**8,运算的结果将被存到balances[owner]中,是一个无符号整数类型。当管理员余额本身少于2000 * 10**8时,减法计算结果为负值,解释为无符号整数即一个极大值。

2.3 mintAny:随意铸币(CVE-2018-11812)

管理员调用铸币函数给某个地址增加token时,利用溢出漏洞可以突破该函数只能增加token的限制,实际减少该地址的token数量,从而实现对任一账户余额的任意篡改(增加或减少)。在检测中,有多达18个合约存在类似安全问题。

漏洞实例:合约PolyAi (AI)

漏洞所在位置:132行,如图3所示。


clb3_副本.jpg

图 3   随意铸币漏洞

漏洞攻击效果:管理员可以绕过合约限制,任意篡改所有地址的token余额。

 漏洞原理:攻击者通过构造一个极大的mintedAmount,使得balanceOf[target] + mintedAmount发生整数溢出,计算结果变为一个极小值。

2.4 overMint:超额铸币(CVE-2018-11809)

管理员通过构造恶意参数,可以绕过程序中规定的token发行上限,实现超额铸币。合约Playkey (PKT)存在此类漏洞,导致合约中的铸币上限形同虚设,从而发行任意多的token。此外,还发现Nexxus (NXX)、Fujinto (NTO)两个合约存在类似漏洞,这两个合约没有铸币上限限制,但同样的手段,可以溢出合约中一个用于记录已发币总量(totalSupply)的变量值,使其与市场中实际流通的总币数不一致。

漏洞实例:合约Playkey (PKT)

漏洞所在位置:237行,如图4所示。

 

clb4_副本.jpg

图 4   超额铸币漏洞

漏洞攻击效果:管理员可以篡改已发币总量(totalSupply)为任意值,并绕过合约中的铸币上限超额发行token。

漏洞原理:_value在函数调用时被设置为精心构造的极大值,使得totalSupply + _value计算结果溢出后小于tokenLimit,从而轻易绕过237行的铸币上限检测。

2.5 allocateAny:超额定向分配(CVE-2018-11810)

管理员通过制造溢出来绕过合约中对单地址发币的最大上限,可以对指定地址分配超额的token,使得对单地址的发布上限无效。

漏洞实例:合约LGO (LGO)

漏洞所在位置:286行,如图5所示。

 

clb5_副本.jpg

图 5   超额定向分配漏洞

 

漏洞攻击效果:管理员绕过合约中规定的单地址发币上限,给指定地址分配超额的token。

漏洞原理:一个极大的_amount可以使得算数加法运算holdersAllocatedAmount + _amount发生整数溢出,变为一个极小值,从而绕过286行的检测。

2.6 overBuy:超额购币(CVE-2018-11809)

买家如果拥有足够多的ETH,可以通过发送大量token制造溢出,从而绕过ICO发币上限,达到超额购币。

漏洞实例:合约EthLend (LEND)

漏洞所在位置:236行,如图6所示。

 

clb6_副本.jpg

图 6   超额购币漏洞

漏洞攻击效果:调用者绕过合约中规定ICO的token容量上限,获得了超额购币。

漏洞原理:一个极大的_newTokens可以使得算数加法运算totalSoldTokens + newTokens发生整数溢出,变为一个极小值,从而绕过236行的检测。

3  结论

智能合约之所以“智能”,是由于合约代码一旦上链,其执行效果完全由可见且不可篡改的代码来决定,而不用依赖于对任何参与方的信任。然而,智能合约并没有预期的“智能”,存在相当多的安全风险,尤其是管理员权限下,可能导致诸多严重的安全问题。仅仅通过整数溢出这一常见漏洞类型,管理员便能够任意篡改所有账户余额,恶意超额,甚至无上限铸币,背离合约白皮书的约定,这样的合约无法保证参与多方的公平性,更谈不上智能。而管理员利用整数溢出进行作恶早已有先例,2018年2月初,基于以太坊的Monero Gold(XMRG) Token在交易所的价格先猛涨787%,后迅速暴跌至崩盘,造成大量用户经济损失[8],其背后就是管理团队利用预留的整数溢出漏洞进行超额铸币,并在交易所抛售造成恶性通货膨胀,最后价值几乎归零[9]。在区块链上运行的智能合约,本意是利用区块链不可篡改的特性来构建可信的执行环境,然而安全漏洞的存在就像一个个隐藏的定时炸弹,对智能合约的可信任基础带来了巨大的挑战。

 

参考文献

[1] MARIA P, GOMEZ G L. Explaining the DAO exploit for beginners in Solidity[EB/OL]. (2016-10-16)[2018-06-20] .https://medium.com/@MyPaoG/explaining-the-dao-exploit-for-beginners-in-solidity-80ee84f0d470.

[2] MICHAELl Y. Building a safer crypto token[EB/OL] .(2018-04-25) [2018-06-20].https://medium.com/cybermiles/building-a-safer-crypto-token-27c96a7e78fd.

[3] 0x2.还原EDU被黑客攻击始末:期货与现货的组合套现[EB/OL]. (2018-05-24)[2018-06-20]. https://wallstreetcn.com/articles/3320043.

[4] BAI智能合约存在和EDU一样的漏洞,可转走任意账户里的BAI Token[EB/OL].(2018-05-24)[2018-06-20]. http://www.chinaz.com/live/2018/0524/891959.shtml.

[5] CHEN Y,Peng Zhiniang. EOS Node Remote Code Execution Vulnerability— EOS WASM Contract Function Table Array Out of Bounds [Z]. (2018-0 5-29)[2018-06-20]. http://blogs.360.cn/blog/eos-node-remote-code-execution-vulnerability/. 

[6] 360企业安全.区块链智能合约漏洞,想说补你不容易[EB/OL].(2018-05-31)[2018-06-20].http://www.freebuf.com/articles/blockchain-articles/173481.html.

[7] NEOHOPE.导致惨重代价的Bug [EB/OL]. (2016-05-03)[2018-06-20].http://www.neohope.org/2016/05/03/%E5%AF%BC%E8%87%B4%E6%83%A8%E9%87%8D%E4%BB%A3%E4%BB%B7%E7%9A%84bug/.

[8] Monero Gold - The story and tech specs of a 4 million USD shitcoin scam, brilliantly executed [EB/OL] .(2018-02-04)[2018-06-20]. https://66shitcoins.com/blog/2018/2/4/monero-gold-the-story-and-tech-specs-of-a-4-million-usd-shitcoin-scam-brilliantly-executed.

[9] CoinMarketCap [EB/OL].(2018-06-20)[2018-06-20]. https://coinmarketcap.com/zh/currencies/monero-gold/.

 

        (收稿日期:2018-06-20)

作者简介:

 

陈力波,男,硕士研究生,360企业安全技术研究院研究员,主要研究方向:IoT、区块链安全。

 

殷婷婷,女,研究生,主要研究方向:区块链安全及自动化漏洞挖掘。

 

倪远东,男,硕士研究生,主要研究方向:系统安全、区块链安全。

 

张超,男,博士,清华大学副教授(博导),青年千人。主要研究方向:系统与软件安全,重点是自动化攻防技术。

 

此内容为AET网站原创,未经授权禁止转载。