《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 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網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 成年人免费视频网站 | 亚洲精品综合一区二区三区 | 91在线免费观看网站 | 国产视频软件在线 | 特黄特黄aaaa级毛片免费看 | 成人亚洲网 | 日本一级高清不卡视频在线 | 久草欧美 | 在线成人毛片 | 国产精品国产三级国产专播 | 色综合a | 日韩美三级 | 亚洲人成高清 | 久久久久女人精品毛片 | 国产精品亚洲午夜不卡 | 久久久久综合一本久道 | 国产一级精品高清一级毛片 | 99视频福利 | 国产精品久久久久免费视频 | 欧美成人免费一区在线播放 | 欧美久久久久久久一区二区三区 | 一级特黄a视频 | 性a视频| 五月色一区二区亚洲小说 | 中文 日本 免费 高清 | 精品视频 九九九 | 亚州人成网在线播放 | 久草在线看 | 午夜影院免费入口 | 日韩欧国产精品一区综合无码 | 日韩高清成人毛片不卡 | 一本伊大人香蕉高清在线观看 | www.日本高清视频.com | 欧美特级另类xxx | 河边性xxxxfreexxxxx | 特黄a大片免费视频 | 日本一区二区三区不卡在线视频 | 伊在人亚洲香蕉精品区 | 亚洲国产伦理 | 黄色视影| 国产成人精品午夜在线播放 |