《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > ERC20智能合約整數(shù)溢出系列漏洞披露
ERC20智能合約整數(shù)溢出系列漏洞披露
信息技術(shù)與網(wǎng)絡(luò)安全
陳力波,,殷婷婷,,倪遠東,張超
(清華-360企業(yè)安全聯(lián)合研究中心(籌),北京 100015)
摘要: 從2016年The DAO被盜取6000萬美元開始 ,,到美鏈BEC價值歸零,、BAI和EDU任意賬戶轉(zhuǎn)帳,再到最近EOS漏洞允許惡意合約穿透虛擬機危害礦工節(jié)點,,“智能合約”儼然成為區(qū)塊鏈安全重災(zāi)區(qū),。“清華-360企業(yè)安全聯(lián)合研究中心”團隊在區(qū)塊鏈安全方面進行了持續(xù)研究,,開發(fā)了自動化漏洞掃描工具,,近期發(fā)現(xiàn)了多個新型整數(shù)溢出漏洞,可造成超額鑄幣,、超額購幣,、隨意鑄幣、高賣低收,、下溢增持等嚴重危害,。
中圖分類號:TP393.08
文獻標識碼:A
DOI: 10.19358/j.issn.2096-5133.2018.08.001
中文引用格式:陳力波,殷婷婷,,倪遠東,等.ERC20智能合約整數(shù)溢出系列漏洞披露[J].信息技術(shù)與網(wǎng)絡(luò)安全,,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  引言

智能合約作為區(qū)塊鏈2.0的代表技術(shù),適應(yīng)于區(qū)塊鏈去中心化,、分布式的特點,,具有獨立運行、不可篡改的優(yōu)良特性,,可用于實現(xiàn)包含金融工具在內(nèi)的各類分布式應(yīng)用,。開發(fā)者可以自行定義交易邏輯并開發(fā)代碼發(fā)布到鏈上,合約代碼在礦工節(jié)點的虛擬機環(huán)境(如EVM)中執(zhí)行,。合約交易被打包進區(qū)塊后,,鏈上節(jié)點執(zhí)行相同代碼,從而同步改變鏈上數(shù)據(jù)狀態(tài),。故合約的多方參與者無需建立信任,,也無法相互欺騙。

與傳統(tǒng)程序一樣,,智能合約無法避免地存在安全漏洞,。而與傳統(tǒng)程序不一樣的是,合約運行在開放的區(qū)塊鏈網(wǎng)絡(luò)當中,,可以被任意調(diào)用,,而且合約的執(zhí)行具有“不可更改”的效果,導(dǎo)致合約的漏洞被利用之后危害更大[6],。前面提到的BEC等合約中存在的整數(shù)溢出漏洞便是一個典型的例子,,攻擊者對漏洞的利用造成了數(shù)額驚人的損失,。 

整數(shù)溢出是一種常見的高危漏洞,曾引發(fā)許多嚴重事故,。1996年阿麗亞娜5型運載火箭在發(fā)射37 s后解體并爆炸就是由于整數(shù)溢造成的[7],。整數(shù)溢出的原理是:計算機中整數(shù)變量有上下界,如果在算術(shù)運算中出現(xiàn)越界,,即超出整數(shù)類型的最大表示范圍,,數(shù)字便會如表盤上的時針從12到1一般,由一個極大值變?yōu)橐粋€極小值或直接歸零,。此類越界的情形在傳統(tǒng)的軟件程序中很常見,,但是否存在安全隱患取決于程序上下文,部分溢出是良性的(如TCP序號等),,甚至是故意引入的(例如用作hash運算等),。整數(shù)溢出漏洞檢測和校驗是有挑戰(zhàn)性的,程序員極容易犯錯,,而自動化檢測方法最大難點在于判斷候選溢出是否真正導(dǎo)致了危害,,以免造成大量的誤報。

1   自動化挖掘

“清華-360企業(yè)安全聯(lián)合研究中心” ChainTrust團隊成員充分利用多年軟件漏洞挖掘的經(jīng)驗,,針對智能合約開發(fā)了自動化檢測工具,,可以高效挖掘高危整數(shù)溢出漏洞。檢測工具通過準確構(gòu)建整數(shù)溢出點的上下文語義,,采用符號執(zhí)行和污點分析等技術(shù),,有效區(qū)分了無害溢出和有害溢出,能夠顯著降低漏洞的誤報率和漏報率,。

截止到目前,,團隊針對Etherscan上排名前470位的代幣合約進行了檢測,除去未提供源碼,、沒有完整爬取源碼或耗時過長的合約,,最終完整分析了390份合約。在這些被分析的合約中,,團隊總共發(fā)現(xiàn)25個智能合約存在整數(shù)溢出安全問題,,申請獲得了5個CVE編號,主要包含下述6類新型危害,。

團隊成員在“全球EOS開發(fā)者大會”上對部分漏洞進行了首次披露。本報告將進行詳細披露,,旨在推進社區(qū)的安全健康發(fā)展,。

2  新型漏洞詳情

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

管理員通過修改合約中的參數(shù)來制造溢出漏洞,導(dǎo)致用戶提幣轉(zhuǎn)出token之后,,卻收不到ETH(或收到極少量ETH),,造成用戶經(jīng)濟損失,。

漏洞實例:合約Internet Node Token (INT)。

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


clb1_副本.jpg

圖 1  高賣低收漏洞

 

漏洞攻擊效果:用戶提幣之后,無法得到對應(yīng)數(shù)額的ETH,。

漏洞原理:sellPrice被修改為精心構(gòu)造的大數(shù)后,,可導(dǎo)致amount * sellPrice的結(jié)果大于整數(shù)變量(uint256)最大值,發(fā)生整數(shù)溢出,,從而變?yōu)橐粋€極小值甚至歸零,。該值在程序語義中是用于計算用戶提幣應(yīng)得的ETH數(shù)量,并在175行進行了校驗,,但該值被溢出變?yōu)闃O小值之后可以逃逸175行的校驗,,并導(dǎo)致用戶售出token后只能拿到少量的(甚至沒有)ETH。

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

管理員在特定條件下,,通過調(diào)用合約中有漏洞的發(fā)幣函數(shù)制造下溢,,從而實現(xiàn)對自身賬戶余額的任意增加。

 漏洞實例:合約Bitcoin Red(BTCR)

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


clb2_副本.jpg

圖 2   下溢增持漏洞 

漏洞攻擊效果:管理員執(zhí)行了一個正常向某個地址進行發(fā)幣的操作,實際已經(jīng)暗中將自身賬戶的余額修改為了一個極大的數(shù),。 

漏洞原理:distributeBTR()函數(shù)的本意是管理員給指定地址發(fā)放一定數(shù)額的token,,并從自身賬戶減少對應(yīng)的token數(shù)量。減少管理員賬戶余額的操作為balances[owner] -= 2000 * 10**8,,運算的結(jié)果將被存到balances[owner]中,,是一個無符號整數(shù)類型。當管理員余額本身少于2000 * 10**8時,,減法計算結(jié)果為負值,,解釋為無符號整數(shù)即一個極大值。

2.3 mintAny:隨意鑄幣(CVE-2018-11812)

管理員調(diào)用鑄幣函數(shù)給某個地址增加token時,,利用溢出漏洞可以突破該函數(shù)只能增加token的限制,,實際減少該地址的token數(shù)量,從而實現(xiàn)對任一賬戶余額的任意篡改(增加或減少),。在檢測中,,有多達18個合約存在類似安全問題。

漏洞實例:合約PolyAi (AI)

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


clb3_副本.jpg

圖 3   隨意鑄幣漏洞

漏洞攻擊效果:管理員可以繞過合約限制,任意篡改所有地址的token余額,。

 漏洞原理:攻擊者通過構(gòu)造一個極大的mintedAmount,,使得balanceOf[target] + mintedAmount發(fā)生整數(shù)溢出,,計算結(jié)果變?yōu)橐粋€極小值。

2.4 overMint:超額鑄幣(CVE-2018-11809)

管理員通過構(gòu)造惡意參數(shù),,可以繞過程序中規(guī)定的token發(fā)行上限,,實現(xiàn)超額鑄幣。合約Playkey (PKT)存在此類漏洞,,導(dǎo)致合約中的鑄幣上限形同虛設(shè),,從而發(fā)行任意多的token。此外,,還發(fā)現(xiàn)Nexxus (NXX),、Fujinto (NTO)兩個合約存在類似漏洞,這兩個合約沒有鑄幣上限限制,,但同樣的手段,,可以溢出合約中一個用于記錄已發(fā)幣總量(totalSupply)的變量值,使其與市場中實際流通的總幣數(shù)不一致,。

漏洞實例:合約Playkey (PKT)

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

 

clb4_副本.jpg

圖 4   超額鑄幣漏洞

漏洞攻擊效果:管理員可以篡改已發(fā)幣總量(totalSupply)為任意值,,并繞過合約中的鑄幣上限超額發(fā)行token,。

漏洞原理:_value在函數(shù)調(diào)用時被設(shè)置為精心構(gòu)造的極大值,使得totalSupply + _value計算結(jié)果溢出后小于tokenLimit,,從而輕易繞過237行的鑄幣上限檢測,。

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

管理員通過制造溢出來繞過合約中對單地址發(fā)幣的最大上限,可以對指定地址分配超額的token,,使得對單地址的發(fā)布上限無效,。

漏洞實例:合約LGO (LGO)

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

 

clb5_副本.jpg

圖 5   超額定向分配漏洞

 

漏洞攻擊效果:管理員繞過合約中規(guī)定的單地址發(fā)幣上限,,給指定地址分配超額的token。

漏洞原理:一個極大的_amount可以使得算數(shù)加法運算holdersAllocatedAmount + _amount發(fā)生整數(shù)溢出,,變?yōu)橐粋€極小值,,從而繞過286行的檢測。

2.6 overBuy:超額購幣(CVE-2018-11809)

買家如果擁有足夠多的ETH,,可以通過發(fā)送大量token制造溢出,,從而繞過ICO發(fā)幣上限,達到超額購幣,。

漏洞實例:合約EthLend (LEND)

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

 

clb6_副本.jpg

圖 6   超額購幣漏洞

漏洞攻擊效果:調(diào)用者繞過合約中規(guī)定ICO的token容量上限,,獲得了超額購幣,。

漏洞原理:一個極大的_newTokens可以使得算數(shù)加法運算totalSoldTokens + newTokens發(fā)生整數(shù)溢出,變?yōu)橐粋€極小值,,從而繞過236行的檢測,。

3  結(jié)論

智能合約之所以“智能”,是由于合約代碼一旦上鏈,,其執(zhí)行效果完全由可見且不可篡改的代碼來決定,,而不用依賴于對任何參與方的信任。然而,,智能合約并沒有預(yù)期的“智能”,,存在相當多的安全風險,尤其是管理員權(quán)限下,,可能導(dǎo)致諸多嚴重的安全問題,。僅僅通過整數(shù)溢出這一常見漏洞類型,管理員便能夠任意篡改所有賬戶余額,,惡意超額,,甚至無上限鑄幣,背離合約白皮書的約定,,這樣的合約無法保證參與多方的公平性,,更談不上智能。而管理員利用整數(shù)溢出進行作惡早已有先例,,2018年2月初,,基于以太坊的Monero Gold(XMRG) Token在交易所的價格先猛漲787%,后迅速暴跌至崩盤,,造成大量用戶經(jīng)濟損失[8],,其背后就是管理團隊利用預(yù)留的整數(shù)溢出漏洞進行超額鑄幣,并在交易所拋售造成惡性通貨膨脹,,最后價值幾乎歸零[9],。在區(qū)塊鏈上運行的智能合約,本意是利用區(qū)塊鏈不可篡改的特性來構(gòu)建可信的執(zhí)行環(huán)境,,然而安全漏洞的存在就像一個個隱藏的定時炸彈,,對智能合約的可信任基礎(chǔ)帶來了巨大的挑戰(zhàn)。

 

參考文獻

[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被黑客攻擊始末:期貨與現(xiàn)貨的組合套現(xiàn)[EB/OL]. (2018-05-24)[2018-06-20]. https://wallstreetcn.com/articles/3320043.

[4] BAI智能合約存在和EDU一樣的漏洞,可轉(zhuǎn)走任意賬戶里的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.#/blog/eos-node-remote-code-execution-vulnerability/. 

[6] 360企業(yè)安全.區(qū)塊鏈智能合約漏洞,,想說補你不容易[EB/OL].(2018-05-31)[2018-06-20].http://www.freebuf.com/articles/blockchain-articles/173481.html.

[7] NEOHOPE.導(dǎo)致慘重代價的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企業(yè)安全技術(shù)研究院研究員,主要研究方向:IoT,、區(qū)塊鏈安全,。

 

殷婷婷,,女,研究生,,主要研究方向:區(qū)塊鏈安全及自動化漏洞挖掘,。

 

倪遠東,男,,碩士研究生,,主要研究方向:系統(tǒng)安全、區(qū)塊鏈安全,。

 

張超,,男,博士,,清華大學副教授(博導(dǎo)),,青年千人。主要研究方向:系統(tǒng)與軟件安全,,重點是自動化攻防技術(shù),。

 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。