林丹,林凱欣,吳嘉婧,鄭子彬
基于字節(jié)碼的以太坊智能合約分類方法
林丹1,林凱欣2,吳嘉婧2,鄭子彬1
(1. 中山大學(xué)軟件工程學(xué)院,廣東 珠海 519082;2. 中山大學(xué)計(jì)算機(jī)學(xué)院,廣東 廣州 510006)
近年來(lái),區(qū)塊鏈技術(shù)已在金融、醫(yī)療和政務(wù)等領(lǐng)域得到了廣泛應(yīng)用和關(guān)注。然而,由于智能合約的不易篡改性和運(yùn)行環(huán)境的特殊性,各類安全問(wèn)題頻繁出現(xiàn)。一方面是合約開發(fā)者在編寫合約時(shí)出現(xiàn)的代碼安全問(wèn)題,另一方面是以太坊出現(xiàn)不少高風(fēng)險(xiǎn)智能合約,普通用戶很容易被高風(fēng)險(xiǎn)合約提供的高回報(bào)所吸引,但對(duì)合約的風(fēng)險(xiǎn)卻無(wú)從知曉。然而,關(guān)于智能合約安全的研究主要集中于代碼安全方面,對(duì)合約功能識(shí)別的研究相對(duì)較少。假如能對(duì)智能合約功能進(jìn)行準(zhǔn)確分類,將有助于人們更好地理解智能合約的行為,同時(shí)保障智能合約生態(tài)安全,減少或挽回用戶的損失。已有的智能合約分類方法通常依賴于對(duì)智能合約開源代碼的分析,但以太坊發(fā)布的合約僅強(qiáng)制要求部署字節(jié)碼,且只有極少數(shù)合約公布了其開源代碼。因此,提出了一種基于字節(jié)碼的以太坊智能合約分類方法。收集以太坊智能合約字節(jié)碼和對(duì)應(yīng)類別標(biāo)簽,然后提取操作碼頻率特征以及控制流圖特征;通過(guò)實(shí)驗(yàn)對(duì)特征重要性進(jìn)行分析,獲取適合的圖向量維度及最優(yōu)的分類模型;在交易所、金融、賭博、游戲和高風(fēng)險(xiǎn)5個(gè)類別的智能合約多分類任務(wù)中進(jìn)行實(shí)驗(yàn)驗(yàn)證,使用XGBoost分類器時(shí)的1值達(dá)到0.913 8。實(shí)驗(yàn)結(jié)果表明所提方法能較好地完成以太坊智能合約的分類任務(wù),并且能夠應(yīng)用于現(xiàn)實(shí)中的智能合約類別預(yù)測(cè)。
區(qū)塊鏈;智能合約;字節(jié)碼;分類
作為點(diǎn)對(duì)點(diǎn)(P2P,peer-to-peer)網(wǎng)絡(luò)中的一種分布式賬本技術(shù),區(qū)塊鏈集成了分布式存儲(chǔ)、密碼學(xué)、共識(shí)機(jī)制等技術(shù),成為一種新型信任體系的構(gòu)建方法。基于區(qū)塊鏈的智能合約技術(shù),具有公開透明、不易篡改、經(jīng)濟(jì)高效等特性,因此在諸多領(lǐng)域得到了廣泛應(yīng)用,包括但不限于金融、交易所、社交、游戲等[1-2]。然而,由于這一新興技術(shù)發(fā)展時(shí)間較短且監(jiān)管尚不成熟,一些合約可能存在安全漏洞[3]或者欺詐行為[4]。一方面是代碼本身可能存在漏洞,容易被犯罪分子利用從中牟利;另一方面是可能存在欺詐合約和惡意合約,對(duì)用戶的資金產(chǎn)生威脅。
出于對(duì)代碼安全、用戶安全和區(qū)塊鏈系統(tǒng)安全的考慮,本文提出了基于字節(jié)碼的以太坊智能合約分類方法。該方法可以充分整合代碼邏輯信息,實(shí)現(xiàn)對(duì)合約的自動(dòng)化分類;并且提醒用戶哪些智能合約可能存在風(fēng)險(xiǎn),起到促進(jìn)以太坊智能合約生態(tài)健康發(fā)展的作用。
區(qū)塊鏈?zhǔn)窃谟?jì)算機(jī)網(wǎng)絡(luò)節(jié)點(diǎn)之間共享的分布式數(shù)據(jù)庫(kù),以數(shù)字格式保存電子信息[5]。區(qū)塊鏈和典型數(shù)據(jù)庫(kù)的一個(gè)關(guān)鍵區(qū)別是數(shù)據(jù)結(jié)構(gòu)[6]。區(qū)塊鏈會(huì)以分組(稱為塊)的形式收集信息,并且以時(shí)間順序?qū)K連接起來(lái)以確保數(shù)據(jù)可靠性,這一特性在比特幣等加密“貨幣”系統(tǒng)的賬本數(shù)據(jù)管理中起到了關(guān)鍵作用。區(qū)塊鏈從技術(shù)上保證了數(shù)據(jù)記錄的真實(shí)性和安全性,被廣泛應(yīng)用在加密“貨幣”、去中心化金融(DeFi,decentralized finance)應(yīng)用程序、非同質(zhì)化“代幣”(NFT,non- fungible token)和智能合約中。其中智能合約和區(qū)塊鏈的結(jié)合被視為重要的技術(shù)革新,在工業(yè)界和學(xué)術(shù)界均備受關(guān)注。
智能合約可以理解為自動(dòng)執(zhí)行的合約[7],可將買賣雙方之間的協(xié)議條款直接寫進(jìn)代碼邏輯,而代碼和其中包含的協(xié)議存在于一個(gè)分布式的區(qū)塊鏈網(wǎng)絡(luò)中。代碼能夠包含“協(xié)議”,即在滿足一定條件時(shí)自動(dòng)執(zhí)行提前預(yù)定好的操作,包括轉(zhuǎn)賬、做決策、與其他合約交互等。目前,以太坊是支持智能合約的最大公鏈平臺(tái),最受合約發(fā)布者和用戶的歡迎。智能合約在非中心化應(yīng)用(DApp,decentralized applications)上得到了充分的發(fā)展。一個(gè)或多個(gè)智能合約以及一個(gè)用戶交互界面(UI,user interface),就構(gòu)成一個(gè)基本的DApp。開發(fā)者在區(qū)塊鏈平臺(tái)上部署智能合約,并且在UI界面設(shè)計(jì)調(diào)用智能合約的相關(guān)接口,來(lái)實(shí)現(xiàn)區(qū)塊鏈分布式應(yīng)用的多種功能。
在以太坊上,智能合約通常采用編程語(yǔ)言Solidity編寫,由專門的編譯器(solc)編譯成低級(jí)字節(jié)碼,并由以太坊虛擬機(jī)(EVM,Ethereum virtual machine)執(zhí)行。智能合約創(chuàng)建后,代碼會(huì)被存儲(chǔ)在合約賬戶中以供調(diào)用。
以太坊的賬戶主要分為合約賬戶和外部賬戶。針對(duì)外部賬戶的分類問(wèn)題,如釣魚詐騙賬戶識(shí)別[8]、賬戶業(yè)務(wù)分類[9]等,主要基于交易網(wǎng)絡(luò)和賬戶交易信息進(jìn)行挖掘[10-11]。相比而言,目前對(duì)合約賬戶的分類研究還處于早期,因?yàn)楹霞s分類不僅需要挖掘合約賬戶的交易數(shù)據(jù),而且要對(duì)合約代碼進(jìn)行分析。由于以太坊為當(dāng)前最大的支持智能合約的平臺(tái),現(xiàn)有的對(duì)智能合約分類的研究大多集中在以太坊上。例如,文獻(xiàn)[12]提出使用長(zhǎng)短期記憶(LSTM,long short-term memory)網(wǎng)絡(luò)對(duì)智能合約源碼進(jìn)行特征提取,并結(jié)合交易信息進(jìn)行合約分類。然而,由于以太坊僅要求公開合約字節(jié)碼,并不強(qiáng)制要求公開源碼。因此有一些對(duì)基于字節(jié)碼及翻譯得到的操作碼來(lái)進(jìn)行合約分類的研究。Shi等[13]提取賬戶特征和操作碼頻率特征對(duì)智能合約進(jìn)行分類,實(shí)驗(yàn)結(jié)果表明賬戶特征對(duì)于合約分類任務(wù)的重要性較低,而操作碼頻率的重要性較高。Chen等[14]基于賬戶特征和操作碼特征對(duì)龐氏騙局的合約進(jìn)行分類。Hu等[15]收集了超過(guò)10 000份智能合約,首先分析了交易中的4種行為模式,然后定制了14個(gè)基本特征,使用LSTM網(wǎng)絡(luò)進(jìn)行合約分類。
對(duì)智能合約分類的研究集中在交易特征和代碼特征兩方面。在交易特征方面,由于并不是所有合約賬戶都能提供足夠的交易信息,因此通常會(huì)出現(xiàn)冷啟動(dòng)的局限。例如,在欺詐合約方面,還未開始大規(guī)模欺詐的合約并沒(méi)有很多的交易信息提供,因此通過(guò)交易對(duì)這類合約進(jìn)行判斷通常較為滯后。但是欺詐合約的代碼或者字節(jié)碼肯定會(huì)被創(chuàng)建者提前部署上鏈,因此從代碼特征的角度更有可能在初始階段檢測(cè)出欺詐合約。在代碼特征方面,目前的研究主要集中在源碼的語(yǔ)義和統(tǒng)計(jì)操作碼頻率特征上。然而,以太坊智能合約并不強(qiáng)制公開源碼,僅有極少數(shù)的智能合約公布源碼,因此基于源碼的自然語(yǔ)言處理方法不具有普適性。現(xiàn)有基于字節(jié)碼的分析方法,提取的是統(tǒng)計(jì)操作碼頻率特征,忽略了智能合約代碼結(jié)構(gòu)層面上的信息。因此,如果能夠在分類模型中使用必須公開的字節(jié)碼來(lái)添加智能合約結(jié)構(gòu)信息,可以使代碼數(shù)據(jù)特征更加完整。
此外,對(duì)智能合約進(jìn)行分類與識(shí)別將有助于更好地理解智能合約的行為,對(duì)智能合約的代碼安全、用戶安全以及區(qū)塊鏈系統(tǒng)等方面都有重要意義。
1) 在代碼安全方面:對(duì)于有類別信息的合約,可以有針對(duì)性地設(shè)計(jì)代碼安全分析的方法,能夠有效提高分析結(jié)果的準(zhǔn)確率,提升效率。
2) 在用戶安全方面:現(xiàn)實(shí)中的智能合約平臺(tái)存在為了欺騙用戶而故意標(biāo)錯(cuò)標(biāo)簽的合約,智能合約自動(dòng)化分類能夠幫助識(shí)別合約的行為特征和真實(shí)目的,從而可以輔助用戶判斷合約是否為詐騙合約,一定程度上保障了用戶的資產(chǎn)安全。
3) 在區(qū)塊鏈系統(tǒng)方面:區(qū)塊鏈中存在一些惡意合約,發(fā)出大量請(qǐng)求導(dǎo)致系統(tǒng)擁堵,因而智能合約的分類能夠?yàn)樽R(shí)別此類合約提供參考。
智能合約的有效分類和功能識(shí)別以及人們對(duì)智能合約的行為特征的理解,有助于保障智能合約的安全,減少惡意合約對(duì)用戶造成的損失,因此本文針對(duì)合約的分類問(wèn)題提出相應(yīng)的解決方法。總的來(lái)說(shuō),本文的主要貢獻(xiàn)可以分為以下3個(gè)部分。
1) 數(shù)據(jù)收集。本文從XBlock[16]、DAppRader網(wǎng)站和DApp網(wǎng)站上收集了4 757個(gè)智能合約的運(yùn)行時(shí)字節(jié)碼和類別信息,包括交易所、金融、賭博、游戲和高風(fēng)險(xiǎn)5個(gè)類別。
2) 算法設(shè)計(jì)。基于收集的字節(jié)碼數(shù)據(jù),本文自動(dòng)化地提取了智能合約的控制流圖(CFG,control flow graph)特征和操作碼頻率特征,其中控制流圖的圖特征能夠豐富智能合約的語(yǔ)義信息和邏輯結(jié)構(gòu)。
3) 實(shí)驗(yàn)驗(yàn)證。基于提取的智能合約特征,本文使用XGBoost(extreme gradient boosting)等分類算法對(duì)智能合約進(jìn)行分類。實(shí)驗(yàn)結(jié)果表明,所提的智能合約特征抽取算法能夠有效地分類智能合約,并應(yīng)用于現(xiàn)實(shí)中的高風(fēng)險(xiǎn)合約識(shí)別和智能合約分類。
智能合約中包含的字節(jié)碼信息,可以轉(zhuǎn)換為操作碼,并進(jìn)一步生成控制流圖。因此,本文考慮結(jié)合圖特征和操作碼頻率特征來(lái)表示智能合約。
基于字節(jié)碼的以太坊智能合約分類方法流程如圖1所示。首先,輸入智能合約字節(jié)碼,利用EtherSolve生成每個(gè)合約的控制流圖,這個(gè)過(guò)程包括字節(jié)碼的解析,具體的字節(jié)碼和操作碼的轉(zhuǎn)換規(guī)則如表1所示;接著,得到每個(gè)合約的控制流圖后,提取控制流圖的拓?fù)浣Y(jié)構(gòu)并輸入圖嵌入模型Graph2vec,得到合約的圖特征向量,同時(shí)通過(guò)正則表達(dá)式獲取控制流圖中的操作碼頻率特征向量;然后,將上述兩種特征向量結(jié)合拼接,并對(duì)特征進(jìn)行預(yù)處理和標(biāo)準(zhǔn)化;之后,將處理好的特征輸入多種分類模型中進(jìn)行智能合約分類;最后,利用收集的標(biāo)簽信息來(lái)驗(yàn)證分類器的效果。

圖1 基于字節(jié)碼的以太坊智能合約分類方法流程
Figure 1 Process of bytecode-based approach for Ethereum smart contract classification

表1 字節(jié)碼和操作碼的轉(zhuǎn)換規(guī)則
關(guān)于智能合約控制流圖的構(gòu)建,學(xué)術(shù)界已有不少研究和方法,本文選擇了目前較新的以太坊智能合約控制流圖構(gòu)建方法EtherSolve[17]。
本節(jié)具體介紹本文使用的基于棧符號(hào)執(zhí)行的新型靜態(tài)分析方法EtherSolve,以及其將智能合約字節(jié)碼轉(zhuǎn)化為控制流圖的詳細(xì)過(guò)程。
(1)EtherSolve
與x86匯編不同,在EVM中沒(méi)有函數(shù)的概念:一切都是通過(guò)跳轉(zhuǎn)來(lái)管理的,既沒(méi)有用于函數(shù)調(diào)用的操作碼,也沒(méi)有用于從函數(shù)調(diào)用返回的操作碼,唯一可用的返回是來(lái)自外部智能合約的函數(shù)調(diào)用。這些設(shè)計(jì)決策使得對(duì)EVM字節(jié)碼進(jìn)行靜態(tài)分析較為困難。
EtherSolve是一種基于以太坊的靜態(tài)分析方法,該方法可以解析以太坊字節(jié)碼中的跳轉(zhuǎn),并為編譯的智能合約構(gòu)造精確的控制流圖。此處的CFG表示執(zhí)行流程的有向圖,其中的節(jié)點(diǎn)是程序的基本塊,邊用于連接流程中可能的基本塊。
(2)EtherSolve方法流程
在EtherSolve中實(shí)現(xiàn)的靜態(tài)分析由以下步驟組成。
1) 解析字節(jié)碼:解析字節(jié)碼以識(shí)別操作碼。
2) 構(gòu)建基本塊:將操作碼分組到基本塊中,按照改變程序控制流的操作碼來(lái)劃分基本塊。
3) 構(gòu)建基本邊:解決基本塊之間基本的跳轉(zhuǎn)問(wèn)題,根據(jù)每個(gè)基本塊的最后一個(gè)操作碼對(duì)其進(jìn)行分析。
4) 解決孤立跳躍:CFG構(gòu)造中最具挑戰(zhàn)性的步驟是解決孤立跳躍的目的地,這些跳轉(zhuǎn)非常常見,如Solidity編譯器使用函數(shù)調(diào)用后的返回值,為了解決這部分問(wèn)題,需要進(jìn)行棧符號(hào)執(zhí)行。
5) 刪除靜態(tài)數(shù)據(jù):靜態(tài)數(shù)據(jù)段與實(shí)際可執(zhí)行代碼分離。
6) 修飾CFG:對(duì)獲得的CFG進(jìn)行裝飾,以突出顯示調(diào)度函數(shù),并確定后備功能的入口點(diǎn)。
使用EtherSolve方法后,獲取的智能合約字節(jié)碼就可以轉(zhuǎn)換為智能合約對(duì)應(yīng)的控制流圖。
圖嵌入技術(shù)可以有效地將高維稀疏圖轉(zhuǎn)換為低維、稠密、連續(xù)的向量空間,最大限度地保持圖的結(jié)構(gòu)性質(zhì)。然而,由于需要處理的數(shù)據(jù)較多,模型的效率是核心問(wèn)題。
因此,本文選擇了可以應(yīng)用于任何圖任務(wù),且復(fù)雜度較低的方法,即基于隨機(jī)游走的Graph2vec方法[18]。本節(jié)將具體介紹Graph2vec方法,及其將控制流圖嵌入向量的過(guò)程。
(1)Graph2vec
Graph2vec是一種無(wú)監(jiān)督的圖表示學(xué)習(xí)方法,可以學(xué)習(xí)到圖的向量表示。這些圖向量表示可以作為圖的特征應(yīng)用于后續(xù)的與圖相關(guān)的任務(wù)中,如圖的聚類、分類、可視化等。Graph2vec將自然語(yǔ)言處理中的詞嵌入算法doc2vec[19]的思想遷移到圖嵌入算法上,將整個(gè)圖看作一個(gè)文檔,將每個(gè)節(jié)點(diǎn)周圍的有根子圖視為文檔的文字。
與圖內(nèi)核和其他子結(jié)構(gòu)嵌入方法相比,Graph2vec具有以下關(guān)鍵優(yōu)勢(shì)。
1) 無(wú)監(jiān)督表示學(xué)習(xí):以完全無(wú)監(jiān)督的方式學(xué)習(xí)圖嵌入。
2) 與任務(wù)無(wú)關(guān)的嵌入:由于Graph2vec在其表示學(xué)習(xí)過(guò)程中不利用任何特定于任務(wù)的信息(如分類標(biāo)簽),因此它學(xué)習(xí)到的嵌入向量是通用的。
3) 數(shù)據(jù)驅(qū)動(dòng)的嵌入:與圖內(nèi)核方法不同,Graph2vec從大量的圖數(shù)據(jù)中學(xué)習(xí)圖嵌入,這使Graph2vec能夠避免基于手工特征的嵌入方法的缺點(diǎn)。
4) 捕獲結(jié)構(gòu)等價(jià)性:在采樣時(shí),Graph2vec考慮了非線性子結(jié)構(gòu)(如固定長(zhǎng)度的隨機(jī)游走),確保了在學(xué)習(xí)的過(guò)程中,結(jié)構(gòu)相似的圖可以產(chǎn)生相似的嵌入。
(2)Graph2vec方法流程
給定控制流圖的集合{1,2,…}和期望輸出的向量大小,Graph2vec方法的任務(wù)是為每個(gè)控制流圖G∈學(xué)習(xí)一個(gè)維的實(shí)數(shù)向量表示。
Graph2vec的基本思想是將每個(gè)節(jié)點(diǎn)周圍的所有有根子圖(即鄰域)的集合視為其詞匯表。隨后,通過(guò)魏斯菲爾德?雷曼內(nèi)核(WL kernel,Weisfieler-Lehman kernel)[20]生成有根子圖,并且為有根子圖分配唯一的標(biāo)簽。接著,在有根子圖使用doc2vec中的Skipgram優(yōu)化模型,來(lái)學(xué)習(xí)數(shù)據(jù)集中每個(gè)控制流圖的向量表示。
分類方法有近年來(lái)熱門的神經(jīng)網(wǎng)絡(luò)方法,也有發(fā)展完善、基礎(chǔ)夯實(shí)的統(tǒng)計(jì)方法。因此,本文嘗試了多種分類方法,但經(jīng)過(guò)實(shí)驗(yàn)證明,XGBoost表現(xiàn)較好。XGBoost[21]比較靈活,而且支持自定義優(yōu)化函數(shù)來(lái)實(shí)現(xiàn)更好的分類效果。此外,與神經(jīng)網(wǎng)絡(luò)等方法相比,XGBoost的速度和效率都更加優(yōu)越。而與傳統(tǒng)的決策樹等方法相比,XGBoost是多個(gè)弱分類器的結(jié)合,分類效果會(huì)更好。

訓(xùn)練完成得到棵樹之后,對(duì)模型輸入測(cè)試樣本。對(duì)于一個(gè)樣本特征,XGBoost為其在每棵樹上獲得一個(gè)葉子節(jié)點(diǎn)得分。最終將每棵樹上對(duì)應(yīng)葉子節(jié)點(diǎn)的分?jǐn)?shù)求和即為測(cè)試樣本的預(yù)測(cè)值。


其中,w(x)為葉子節(jié)點(diǎn)的分?jǐn)?shù),()為其中一棵回歸樹,表示將樣本映射到相應(yīng)葉子的樹結(jié)構(gòu)。是樹中的葉子數(shù)。每個(gè)f對(duì)應(yīng)一個(gè)獨(dú)立的樹結(jié)構(gòu)和葉子權(quán)重。
XGBoost目標(biāo)函數(shù)定義如下:



XGBoost尋找最優(yōu)的f,使目標(biāo)函數(shù)最小。本文輸入智能合約的帶標(biāo)簽數(shù)據(jù)集,尋找最優(yōu)的 f使目標(biāo)函數(shù)最小。最終得到優(yōu)化的目標(biāo)函數(shù),應(yīng)用于合約分類任務(wù)中。
在提取了智能合約的字節(jié)碼頻率特征和控制流圖特征后,本文使用多種分類方法對(duì)智能合約進(jìn)行分類。本節(jié)將重點(diǎn)描述數(shù)據(jù)收集和預(yù)處理、評(píng)估方法、智能合約分類實(shí)驗(yàn)與結(jié)果分析。
首先,為了實(shí)現(xiàn)分類效果更好且有監(jiān)督的智能合約分類模型,本文從DAppRadar和DApp網(wǎng)站收集智能合約的標(biāo)簽信息。各類別智能合約數(shù)量如表2所示,本文收集到的數(shù)據(jù)類標(biāo)簽有5種,分別是交易所、金融、賭博、游戲、高風(fēng)險(xiǎn),共計(jì)4 757個(gè)有標(biāo)簽的智能合約。對(duì)于標(biāo)簽信息,如交易所的功能如下:作為一種中介,交易所允許客戶在法定貨幣和加密“貨幣”之間或不同加密“貨幣”之間進(jìn)行交易,就像證券交易所一樣。例如,較多人使用的Uniswap V2,可以在以太坊上交換代幣。該交易所消除了受信任的中介機(jī)構(gòu),可以允許快速、高效的交易。被標(biāo)記為高風(fēng)險(xiǎn)的合約主要是承諾了高收益但在風(fēng)險(xiǎn)水平上并不透明的投資項(xiàng)目,因此這些高回報(bào)往往是不可持續(xù)的。DappRader平臺(tái)根據(jù)DApp的交易量、市值、用戶量等因素以發(fā)現(xiàn)該DApp是否可能被有限的交易活動(dòng)輕易操縱,進(jìn)而來(lái)評(píng)估金融風(fēng)險(xiǎn),給存在金融欺詐的項(xiàng)目合約打上“高風(fēng)險(xiǎn)”標(biāo)簽。

表2 各類別智能合約數(shù)量
然后,從區(qū)塊鏈數(shù)據(jù)集網(wǎng)站Xblock[16]下載了以太坊的前1 325萬(wàn)個(gè)區(qū)塊的智能合約信息,包括公開可訪問(wèn)的字節(jié)碼數(shù)據(jù),提取了上述4 757個(gè)有標(biāo)簽的智能合約的字節(jié)碼數(shù)據(jù)。盡管智能合約的源代碼對(duì)于理解智能合約有著非常重要的作用,但由于源代碼并不是強(qiáng)制性開源的,因此本文提出的智能合約框架只依賴字節(jié)碼信息。收集的字節(jié)碼數(shù)據(jù)示例如表3所示。

表3 收集的字節(jié)碼數(shù)據(jù)示例
接著,將這4 757個(gè)智能合約字節(jié)碼數(shù)據(jù)解析成操作碼,并提取了兩類特征:一是基于EtherSolve方法和Graph2vec方法生成控制流圖的圖嵌入特征;二是通過(guò)正則表達(dá)式獲取控制流圖中的操作碼頻率特征。控制流圖的圖嵌入特征設(shè)置為16維、32維、64維、和128維的向量,命名為x0~x_15、x_31、x_63、x_127。操作碼頻率特征是139維的向量,均進(jìn)行了數(shù)據(jù)標(biāo)準(zhǔn)化。特征提取后未標(biāo)準(zhǔn)化的數(shù)據(jù)示例如表4所示。

表4 特征提取后未標(biāo)準(zhǔn)化的數(shù)據(jù)示例
為了衡量不同檢測(cè)方法對(duì)智能合約的分類效果,本文主要利用3個(gè)指標(biāo)來(lái)對(duì)分類模型進(jìn)行評(píng)價(jià),分別是精確率(,Precision)、召回率(,Recall)和1值(1 score)。



其中,TP(true positive)指的是真陽(yáng)性,F(xiàn)P(false positive)指的是假陽(yáng)性,F(xiàn)N(false negative)指的是假陰性,TN(true negative)指的是真陰性。
由于本文進(jìn)行的是智能合約的多分類任務(wù),不同類別的合約在數(shù)量上存在差異,因此考慮使用指標(biāo)的加權(quán)平均值對(duì)分類效果進(jìn)行評(píng)估。首先計(jì)算每個(gè)類別的精確率、召回率和1值,再將支持度(每個(gè)類別的真實(shí)合約數(shù))作為每個(gè)類別的權(quán)重,通過(guò)加權(quán)平均法計(jì)算分類模型最終的精確率、召回率和1值。
(1)不同分類模型的效果
本文采用多種有監(jiān)督分類方法進(jìn)行分類,包括決策樹[22]、隨機(jī)森林[23]、樸素貝葉斯[24]、XGBoost[21]、支持向量機(jī)(SVM,support vector machine)[25]和梯度提升決策樹(GBDT,gradient boosting decision tree)[26]。其中每個(gè)分類模型的訓(xùn)練集和測(cè)試集都劃分為7:3,即測(cè)試集有1 428個(gè)智能合約。其中,各個(gè)模型參數(shù)如表5所示。

表5 模型參數(shù)
不同分類模型的分類效果如表6所示。

表6 各分類模型效果
從表6可以看出,XGBoost取得了最好的分類效果,1值為0.911 1。其他模型如隨機(jī)森林、XGBoost、SVM和GBDT的1值基本都大于0.85,證明了本文提取特征方法的有效性。而其中效果比較好的隨機(jī)森林、XGBoost、GBDT都屬于集成學(xué)習(xí),這是因?yàn)榧蓪W(xué)習(xí)以某種策略來(lái)組合多個(gè)模型,發(fā)揮出“集體智慧”的優(yōu)勢(shì),所以在分類問(wèn)題上效果通常較好。更進(jìn)一步,效果最好的XGBoost模型在代價(jià)函數(shù)里加入了正則項(xiàng),使學(xué)習(xí)出來(lái)的模型更加簡(jiǎn)單,防止過(guò)擬合;并且借鑒了隨機(jī)森林的做法,支持列抽樣,不僅能降低過(guò)擬合,還能減少計(jì)算。分類效果較差的方法是樸素貝葉斯和決策樹。由于樸素貝葉斯基于條件相互獨(dú)立,算法較為簡(jiǎn)單,所以,效果較差。而決策樹是單一的樹,且限制樹深度為10,所以效果比較有限。
(2)圖向量維度的選擇
通過(guò)不同分類模型的結(jié)果比較可以發(fā)現(xiàn)XGBoost是較合適的分類模型。因此本文使用XGBoost對(duì)不同維度的圖向量,結(jié)合操作碼頻率特征進(jìn)行分類測(cè)試。對(duì)于不同維度的圖向量,智能合約分類結(jié)果如表7所示。

表7 不同維度的圖向量在XGBoost模型中的分類效果
從表7可知,分類效果最好的是32維的圖向量。但其實(shí)32維、64維和128維的效果相差并不大,原因可能是32維以上的向量能夠充分提取控制流圖的結(jié)構(gòu)信息,而16維的特征會(huì)因?yàn)榫S度較小而損失一些信息。32維的圖特征能夠較好地表達(dá)控制流圖的結(jié)構(gòu)和邏輯信息,并且數(shù)據(jù)量較小,有助于提高后面分類器的訓(xùn)練速度。因此,在特征重要性分析實(shí)驗(yàn)中采用32維的圖向量。
(3)特征重要性分析
通過(guò)查看特征重要性來(lái)判斷,什么特征在智能合約分類上更有幫助。在XGBoost中排名1~10的特征重要性如圖2所示,排名48~59的特征重要性如圖3所示。
如圖2所示,PUSH14、BALANCE、PUSH28、DUP7等排名在1~10的操作碼在智能合約分類中起到重要的作用。由圖3可知,圖的特征重要性較低。在圖特征中重要性最高的為x_35,但x_35在全部特征中排48位,重要性僅有0.000 519(總重要性為1)。
圖特征和操作碼頻率特征的重要性差別較大,因此需要進(jìn)行進(jìn)一步的分析。僅使用操作碼頻率特征對(duì)智能合約進(jìn)行分類,并選擇XGBoost模型進(jìn)行合約分類,各個(gè)類別的分類效果如表8所示。從表8可知,添加控制流圖特征后的分類效果反而有所下降。

圖2 特征重要性(排名1~10)
Figure 2 Feature importance (Ranks 1 to 10)

圖3 特征重要性(排名48~59)
Figure 3 Feature importance (Ranks 48 to 59)

表8 僅使用操作碼頻率特征的XGBoost分類效果
采用不同智能合約特征時(shí)XGBoost的分類結(jié)果如表9所示,從表9可以得出3個(gè)結(jié)論。

表9 采用不同智能合約特征時(shí)XGBoost的分類效果
1) 使用操作碼特征來(lái)對(duì)智能合約進(jìn)行分類具有較高準(zhǔn)確率。只使用操作碼特征可以較好地實(shí)現(xiàn)智能合約分類任務(wù),可見不同類別的智能合約操作碼頻率存在很大差異,憑此可以有效地對(duì)智能合約進(jìn)行區(qū)分。
2) 控制流圖特征比操作碼特征的分類效果差。僅使用控制流圖特征進(jìn)行智能合約分類的結(jié)果并沒(méi)有比僅使用操作碼特征的分類結(jié)果好。由于智能合約不同類別的表現(xiàn)不同,原本預(yù)計(jì)加入能表示代碼邏輯的控制流圖特征,會(huì)有良好的表現(xiàn)。然而,基于控制流圖特征的模型分類效果在精確率、召回率、1值上均比僅使用操作碼特征要低。原因可能是:許多智能合約都是實(shí)驗(yàn)性的,很難從行為中檢測(cè)出它們的類型;不同類別的智能合約可能存在相似的代碼,而Graph2vec 僅使用了節(jié)點(diǎn)的出入度信息和圖結(jié)構(gòu)信息,這導(dǎo)致其提取控制流圖特征的能力較為有限(在未來(lái)的研究中有必要針對(duì)蘊(yùn)含豐富節(jié)點(diǎn)和邊特征的控制流圖設(shè)計(jì)特有的圖嵌入算法,以提高智能合約分類的準(zhǔn)確率);當(dāng)結(jié)合控制流圖特征后,分類效果有所下降。但是在只使用32維控制流圖特征時(shí),分類效果在交易所、賭博和游戲類別表現(xiàn)都較好,可能是因?yàn)榻鹑诤透唢L(fēng)險(xiǎn)類別的數(shù)據(jù)太少,圖特征分類效果較差。
3) 控制流圖特征和操作碼特征結(jié)合可行性。結(jié)合兩個(gè)特征進(jìn)行分類,從理論上可以將代碼邏輯結(jié)合到數(shù)據(jù)中,增強(qiáng)模型的魯棒性。如果能夠在圖嵌入模型上選擇更好的方案,或者對(duì)于數(shù)據(jù)量較少的類別獲取更多數(shù)據(jù)可能會(huì)提高分類效果。
對(duì)智能合約進(jìn)行分類與識(shí)別將有助于更好地理解智能合約的行為,對(duì)智能合約的安全、性能以及區(qū)塊鏈系統(tǒng)等方面都有重要意義。
對(duì)智能合約自動(dòng)分類與識(shí)別有助于區(qū)塊鏈研究者和用戶更好地理解智能合約的行為,且對(duì)區(qū)塊鏈生態(tài)上的用戶安全、代碼安全等方面均有重要意義。
本文收集了以太坊智能合約的標(biāo)簽數(shù)據(jù)集,進(jìn)而提出了一種基于字節(jié)碼的以太坊智能合約分類方法。該方法基于提取的控制流圖特征和操作碼頻率特征,使用XGBoost對(duì)智能合約數(shù)據(jù)進(jìn)行分類訓(xùn)練。實(shí)驗(yàn)結(jié)果表明,該方法提取的特征比較有效,在多個(gè)分類模型中有較為優(yōu)秀的表現(xiàn)。而且本文所使用的字節(jié)碼特征,在任何正在運(yùn)行的智能合約中都可以公開訪問(wèn)。同時(shí),通過(guò)對(duì)特征重要性的分析,可以發(fā)現(xiàn)在進(jìn)行智能合約分類時(shí),操作碼頻率特征比控制流圖特征更為重要。然而,僅使用操作碼頻率特征的分類方法可能容易遭受攻擊,攻擊者可以插入無(wú)關(guān)代碼進(jìn)而干擾分類模型效果。通過(guò)一系列的實(shí)驗(yàn)驗(yàn)證,本文提出的研究思路和方法有著較好的智能合約分類性能,且適用于大部分的智能合約分類預(yù)測(cè)問(wèn)題。
[1] 沈鑫,裴慶祺,劉雪峰. 區(qū)塊鏈技術(shù)綜述[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2016, 2(11): 11-20.
SHEN X, PEI Q Q, LIU X F, Survey of block chain[J]. Chinese Journal of Network and Information Security, 2016, 2(11): 11-20.
[2] 賀海武, 延安, 陳澤華. 基于區(qū)塊鏈的智能合約技術(shù)與應(yīng)用綜述[J]. 計(jì)算機(jī)研究與發(fā)展, 2018, 55(11): 2452-2466.
HE H W, YAN A, CHEN Z H. Survey of smart contract technology and application based on blockchain[J]. Journal of Computer Research and Development, 2018, 55(11): 2452-2466.
[3] 付夢(mèng)琳, 吳禮發(fā), 洪征, 等. 智能合約安全漏洞挖掘技術(shù)研究[J]. 計(jì)算機(jī)應(yīng)用, 2019, 39(7): 1959-1966.
FU M L, WU L F, HONG Z, et al. Research on vulnerability mining technique for smart contracts[J]. Journal of Computer Applications, 2019, 39(7): 1959-1966.
[4] 陳偉利, 鄭子彬. 區(qū)塊鏈數(shù)據(jù)分析: 現(xiàn)狀、趨勢(shì)與挑戰(zhàn)[J]. 計(jì)算機(jī)研究與發(fā)展, 2018, 55(9): 1853-1870.
CHEN W L, ZHENG Z B. Blockchain data analysis: a review of status, trends and challenges[J]. Journal of Computer Research and Development, 2018, 55(9): 1853-1870.
[5] NAKAMOTO S. Bitcoin: a peer-to-peer electronic cash system[R]. 2009.
[6] 張亮, 劉百祥, 張如意, 等. 區(qū)塊鏈技術(shù)綜述[J]. 計(jì)算機(jī)工程, 2019, 45(5): 1-12.
ZHANG L, LIU B X, ZHANG R Y, et al. Overview of blockchain technology[J]. Computer Engineering, 2019, 45(5): 1-12.
[7] BUTERIN V. A next-generation smart contract and decentralized blockchain platform[EB].
[8] WU J J, YUAN Q, LIN D, et al. Who are the phishers? phishing scam detection on ethereum via network embedding[J]. IEEE Transactions on Systems, Man, and Cybernetics: Systems, 2022, 52(2): 1156-1166.
[9] HUANG T, LIN D, WU J J. Ethereum account classification based on graph convolutional network[J]. IEEE Transactions on Circuits and Systems II: Express Briefs, 2022, 69(5): 2528-2532.
[10] LIN D, WU J J, YUAN Q, et al. Modeling and understanding ethereum transaction records via a complex network approach[J]. IEEE Transactions on Circuits and Systems II: Express Briefs, 2020, 67(11): 2737-2741.
[11] 吳嘉婧, 劉潔利, 林丹, 等. 區(qū)塊鏈交易網(wǎng)絡(luò)研究綜述[J]. 中山大學(xué)學(xué)報(bào)(自然科學(xué)版), 2021, 60(5): 1-12.
WU J J, LIU J L, LIN D, et al. Blockchain transaction networks: a survey[J]. Acta Scientiarum Naturalium Universitatis Sunyatseni, 2021, 60(5): 1-12.
[12] 黃步添, 劉琦, 何欽銘, 等. 基于語(yǔ)義嵌入模型與交易信息的智能合約自動(dòng)分類系統(tǒng)[J]. 自動(dòng)化學(xué)報(bào), 2017, 43(9): 1532-1543. HUANG B T, LIU Q, HE Q M, et al. Towards automatic smart-contract codes classification by means of word embedding model and transaction information[J]. Acta Automatica Sinica, 2017, 43(9): 1532-1543.
[13] SHI C, XIANG Y, DOSS R, et al. A bytecode-based approach for smart contract classification[J]. arXiv preprint arXiv: 2106.15497, 2021.
[14] CHEN W L, ZHENG Z B, CUI J H, et al. Detecting ponzi schemes on Ethereum: towards healthier blockchain technology[C]//Pro- ceedings of the 2018 World Wide Web Conference. 2018: 1409-1418.
[15] HU T, LIU X L, CHEN T, et al. Transaction-based classification and detection approach for Ethereum smart contract[J]. Information Processing & Management, 2021, 58(2): 102462.
[16] ZHENG P L, ZHENG Z B, WU J J, et al. XBlock-ETH: extracting and exploring blockchain data from Ethereum[J]. IEEE Open Journal of the Computer Society, 2020, 1:95-106.
[17] CONTRO F, CROSARA M, CECCATO M, et al. EtherSolve: computing an accurate control-flow graph from Ethereum bytecode[C]//Proceedings of 2021 IEEE/ACM 29th International Conference on Program Comprehension (ICPC). 2021: 127-137.
[18] NARAYANAN A, CHANDRAMOHAN M, VENKATESAN R, et al. Graph2vec: learning distributed representations of graphs[J]. arXiv preprint arXiv:1707.05005, 2017.
[19] LAU J H, BALDWIN T. An empirical evaluation of doc2vec with practical insights into document embedding generation[J]. arXiv preprint arXiv:1607.05368, 2016.
[20] SHERVASHIDZE N, SCHWEITZER P, VAN LEEUWEN E J, et al. Weisfeiler-Lehman graph kernels[J]. Journal of Machine Learning Research, 2011, 12(9).
[21] CHEN T, HE T, BENESTY M, et al. XGBoost: extreme gradient boosting[J]. R Package Version 0.4-2, 2015, 1(4): 1-4.
[22] SAFAVIAN S R, LANDGREBE D. A survey of decision tree classifier methodology[J]. IEEE Transactions on Systems, Man, and Cybernetics, 1991, 21(3): 660-674.
[23] BELGIU M, DR?GU? L. Random forest in remote sensing: a review of applications and future directions[J]. ISPRS Journal of Photogrammetry and Remote Sensing, 2016, 114: 24-31.
[24] RISH I. An empirical study of the naive bayes classifier[C]//IJCAI 2001 Workshop on Empirical Methods in Artificial Intelligence. 2001: 41-46.
[25] SCHULDT C, LAPTEV I, CAPUTO B. Recognizing human actions: a local SVM approach[C]//Proceedings of the 17th International Conference on Pattern Recognition. 2004: 32-36.
[26] RAO H D, SHI X Z, RODRIGUE A K, et al. Feature selection based on artificial bee colony and gradient boosting decision tree[J]. Applied Soft Computing, 2019, 74: 634-642.
Bytecode-based approach for Ethereum smart contract classification
LIN Dan1, LIN Kaixin2, WU Jiajing2, ZHENG Zibin1
1. School of Software Engineering, Sun Yat-sen University, Zhuhai 519082, China 2. School of ComputerScienceandEngineering, Sun Yat-sen University, Guangzhou 510006, China
In recent years, blockchain technology has been widely used and concerned in many fields, including finance, medical care and government affairs. However, due to the immutability of smart contracts and the particularity of the operating environment, various security issues occur frequently. On the one hand, the code security problems of contract developers when writing contracts, on the other hand, there are many high-risk smart contracts in Ethereum, and ordinaryusers are easily attracted by the high returns provided by high-risk contracts, but they have no way to know the risks of the contracts. However, the research on smart contract security mainly focuses on code security, and there is relatively little research on the identification of contract functions. If the smart contract function can be accurately classified, it will help people better understand the behavior of smart contracts, while ensuring the ecological security of smart contracts and reducing or recovering user losses. Existing smart contract classification methods often rely on the analysis of the source code of smart contracts, but contracts released on Ethereum only mandate the deployment of bytecode, and only a very small number of contracts publish their source code. Therefore, an Ethereum smart contract classification method based on bytecode was proposed. Collect the Ethereum smart contract bytecode and the corresponding category label, and then extract the opcode frequency characteristics and control flow graph characteristics. The characteristic importance is analyzed experimentally to obtain the appropriate graph vector dimension and optimal classification model, and finally the multi-classification task of smart contract in five categories of exchange, finance, gambling, game and high risk is experimentally verified, and the1score of the XGBoost classifier reaches 0.913 8. Experimental results show that the algorithm can better complete the classification task of Ethereum smart contracts, and can be applied to the prediction of smart contract categories in reality.
blockchain, smart contract, bytecode, classification
TP393
A
10.11959/j.issn.2096?109x.2022046
2022?05?16;
2022?09?01
吳嘉婧,wujiajing@mail.sysu.edu.cn
國(guó)家重點(diǎn)研發(fā)計(jì)劃(2020YFB1006005);國(guó)家自然科學(xué)基金(61973325);廣東省自然科學(xué)基金(2021A1515011661);廣州市科技計(jì)劃項(xiàng)目(202102020616)
The National Key R&D Program of China (2020YFB1006005), The National Natural Science Foundation of China (61973325), The Natural Science Foundations of Guangdong Province (2021A1515011661), Guangzhou Basic and Applied Basic Research Project (202102020616)
林丹, 林凱欣, 吳嘉婧, 等. 基于字節(jié)碼的以太坊智能合約分類方法[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2022, 8(5): 111-120.
Format: LIN D, LIN K X, WU J J, et al. Bytecode-based approach for Ethereum smart contract classification[J]. Chinese Journal of Network and Information Security, 2022, 8(5): 111-120.
林丹(1996? ),女,廣東揭陽(yáng)人,中山大學(xué)博士生,主要研究方向?yàn)閰^(qū)塊鏈、加密貨幣、網(wǎng)絡(luò)科學(xué)的理論和應(yīng)用。

林凱欣(2000? ),女,廣東廣州人,中山大學(xué)碩士生,主要研究方向?yàn)閰^(qū)塊鏈、智能合約以及加密“貨幣”。
吳嘉婧(1989? ),女,江西吉安人,中山大學(xué)副教授,主要研究方向?yàn)榫W(wǎng)絡(luò)科學(xué)、區(qū)塊鏈交易網(wǎng)絡(luò)、網(wǎng)絡(luò)表示學(xué)習(xí)。

鄭子彬(1982? ),男,廣東潮州人,中山大學(xué)教授,主要研究方向?yàn)閰^(qū)塊鏈、大數(shù)據(jù)、服務(wù)計(jì)算、機(jī)器學(xué)習(xí)、軟件可靠性。