林丹,林凱欣,吳嘉婧,鄭子彬
基于字節(jié)碼的以太坊智能合約分類方法
林丹1,林凱欣2,吳嘉婧2,鄭子彬1
(1. 中山大學(xué)軟件工程學(xué)院,廣東 珠海 519082;2. 中山大學(xué)計算機學(xué)院,廣東 廣州 510006)
近年來,區(qū)塊鏈技術(shù)已在金融、醫(yī)療和政務(wù)等領(lǐng)域得到了廣泛應(yīng)用和關(guān)注。然而,由于智能合約的不易篡改性和運行環(huán)境的特殊性,各類安全問題頻繁出現(xiàn)。一方面是合約開發(fā)者在編寫合約時出現(xiàn)的代碼安全問題,另一方面是以太坊出現(xiàn)不少高風(fēng)險智能合約,普通用戶很容易被高風(fēng)險合約提供的高回報所吸引,但對合約的風(fēng)險卻無從知曉。然而,關(guān)于智能合約安全的研究主要集中于代碼安全方面,對合約功能識別的研究相對較少。假如能對智能合約功能進行準確分類,將有助于人們更好地理解智能合約的行為,同時保障智能合約生態(tài)安全,減少或挽回用戶的損失。已有的智能合約分類方法通常依賴于對智能合約開源代碼的分析,但以太坊發(fā)布的合約僅強制要求部署字節(jié)碼,且只有極少數(shù)合約公布了其開源代碼。因此,提出了一種基于字節(jié)碼的以太坊智能合約分類方法。收集以太坊智能合約字節(jié)碼和對應(yīng)類別標簽,然后提取操作碼頻率特征以及控制流圖特征;通過實驗對特征重要性進行分析,獲取適合的圖向量維度及最優(yōu)的分類模型;在交易所、金融、賭博、游戲和高風(fēng)險5個類別的智能合約多分類任務(wù)中進行實驗驗證,使用XGBoost分類器時的1值達到0.913 8。實驗結(jié)果表明所提方法能較好地完成以太坊智能合約的分類任務(wù),并且能夠應(yīng)用于現(xiàn)實中的智能合約類別預(yù)測。
區(qū)塊鏈;智能合約;字節(jié)碼;分類
作為點對點(P2P,peer-to-peer)網(wǎng)絡(luò)中的一種分布式賬本技術(shù),區(qū)塊鏈集成了分布式存儲、密碼學(xué)、共識機制等技術(shù),成為一種新型信任體系的構(gòu)建方法?;趨^(qū)塊鏈的智能合約技術(shù),具有公開透明、不易篡改、經(jīng)濟高效等特性,因此在諸多領(lǐng)域得到了廣泛應(yīng)用,包括但不限于金融、交易所、社交、游戲等[1-2]。然而,由于這一新興技術(shù)發(fā)展時間較短且監(jiān)管尚不成熟,一些合約可能存在安全漏洞[3]或者欺詐行為[4]。一方面是代碼本身可能存在漏洞,容易被犯罪分子利用從中牟利;另一方面是可能存在欺詐合約和惡意合約,對用戶的資金產(chǎn)生威脅。
出于對代碼安全、用戶安全和區(qū)塊鏈系統(tǒng)安全的考慮,本文提出了基于字節(jié)碼的以太坊智能合約分類方法。該方法可以充分整合代碼邏輯信息,實現(xiàn)對合約的自動化分類;并且提醒用戶哪些智能合約可能存在風(fēng)險,起到促進以太坊智能合約生態(tài)健康發(fā)展的作用。
區(qū)塊鏈是在計算機網(wǎng)絡(luò)節(jié)點之間共享的分布式數(shù)據(jù)庫,以數(shù)字格式保存電子信息[5]。區(qū)塊鏈和典型數(shù)據(jù)庫的一個關(guān)鍵區(qū)別是數(shù)據(jù)結(jié)構(gòu)[6]。區(qū)塊鏈會以分組(稱為塊)的形式收集信息,并且以時間順序?qū)K連接起來以確保數(shù)據(jù)可靠性,這一特性在比特幣等加密“貨幣”系統(tǒng)的賬本數(shù)據(jù)管理中起到了關(guān)鍵作用。區(qū)塊鏈從技術(shù)上保證了數(shù)據(jù)記錄的真實性和安全性,被廣泛應(yīng)用在加密“貨幣”、去中心化金融(DeFi,decentralized finance)應(yīng)用程序、非同質(zhì)化“代幣”(NFT,non- fungible token)和智能合約中。其中智能合約和區(qū)塊鏈的結(jié)合被視為重要的技術(shù)革新,在工業(yè)界和學(xué)術(shù)界均備受關(guān)注。
智能合約可以理解為自動執(zhí)行的合約[7],可將買賣雙方之間的協(xié)議條款直接寫進代碼邏輯,而代碼和其中包含的協(xié)議存在于一個分布式的區(qū)塊鏈網(wǎng)絡(luò)中。代碼能夠包含“協(xié)議”,即在滿足一定條件時自動執(zhí)行提前預(yù)定好的操作,包括轉(zhuǎn)賬、做決策、與其他合約交互等。目前,以太坊是支持智能合約的最大公鏈平臺,最受合約發(fā)布者和用戶的歡迎。智能合約在非中心化應(yīng)用(DApp,decentralized applications)上得到了充分的發(fā)展。一個或多個智能合約以及一個用戶交互界面(UI,user interface),就構(gòu)成一個基本的DApp。開發(fā)者在區(qū)塊鏈平臺上部署智能合約,并且在UI界面設(shè)計調(diào)用智能合約的相關(guān)接口,來實現(xiàn)區(qū)塊鏈分布式應(yīng)用的多種功能。
在以太坊上,智能合約通常采用編程語言Solidity編寫,由專門的編譯器(solc)編譯成低級字節(jié)碼,并由以太坊虛擬機(EVM,Ethereum virtual machine)執(zhí)行。智能合約創(chuàng)建后,代碼會被存儲在合約賬戶中以供調(diào)用。
以太坊的賬戶主要分為合約賬戶和外部賬戶。針對外部賬戶的分類問題,如釣魚詐騙賬戶識別[8]、賬戶業(yè)務(wù)分類[9]等,主要基于交易網(wǎng)絡(luò)和賬戶交易信息進行挖掘[10-11]。相比而言,目前對合約賬戶的分類研究還處于早期,因為合約分類不僅需要挖掘合約賬戶的交易數(shù)據(jù),而且要對合約代碼進行分析。由于以太坊為當(dāng)前最大的支持智能合約的平臺,現(xiàn)有的對智能合約分類的研究大多集中在以太坊上。例如,文獻[12]提出使用長短期記憶(LSTM,long short-term memory)網(wǎng)絡(luò)對智能合約源碼進行特征提取,并結(jié)合交易信息進行合約分類。然而,由于以太坊僅要求公開合約字節(jié)碼,并不強制要求公開源碼。因此有一些對基于字節(jié)碼及翻譯得到的操作碼來進行合約分類的研究。Shi等[13]提取賬戶特征和操作碼頻率特征對智能合約進行分類,實驗結(jié)果表明賬戶特征對于合約分類任務(wù)的重要性較低,而操作碼頻率的重要性較高。Chen等[14]基于賬戶特征和操作碼特征對龐氏騙局的合約進行分類。Hu等[15]收集了超過10 000份智能合約,首先分析了交易中的4種行為模式,然后定制了14個基本特征,使用LSTM網(wǎng)絡(luò)進行合約分類。
對智能合約分類的研究集中在交易特征和代碼特征兩方面。在交易特征方面,由于并不是所有合約賬戶都能提供足夠的交易信息,因此通常會出現(xiàn)冷啟動的局限。例如,在欺詐合約方面,還未開始大規(guī)模欺詐的合約并沒有很多的交易信息提供,因此通過交易對這類合約進行判斷通常較為滯后。但是欺詐合約的代碼或者字節(jié)碼肯定會被創(chuàng)建者提前部署上鏈,因此從代碼特征的角度更有可能在初始階段檢測出欺詐合約。在代碼特征方面,目前的研究主要集中在源碼的語義和統(tǒng)計操作碼頻率特征上。然而,以太坊智能合約并不強制公開源碼,僅有極少數(shù)的智能合約公布源碼,因此基于源碼的自然語言處理方法不具有普適性。現(xiàn)有基于字節(jié)碼的分析方法,提取的是統(tǒng)計操作碼頻率特征,忽略了智能合約代碼結(jié)構(gòu)層面上的信息。因此,如果能夠在分類模型中使用必須公開的字節(jié)碼來添加智能合約結(jié)構(gòu)信息,可以使代碼數(shù)據(jù)特征更加完整。
此外,對智能合約進行分類與識別將有助于更好地理解智能合約的行為,對智能合約的代碼安全、用戶安全以及區(qū)塊鏈系統(tǒng)等方面都有重要意義。
1) 在代碼安全方面:對于有類別信息的合約,可以有針對性地設(shè)計代碼安全分析的方法,能夠有效提高分析結(jié)果的準確率,提升效率。
2) 在用戶安全方面:現(xiàn)實中的智能合約平臺存在為了欺騙用戶而故意標錯標簽的合約,智能合約自動化分類能夠幫助識別合約的行為特征和真實目的,從而可以輔助用戶判斷合約是否為詐騙合約,一定程度上保障了用戶的資產(chǎn)安全。
3) 在區(qū)塊鏈系統(tǒng)方面:區(qū)塊鏈中存在一些惡意合約,發(fā)出大量請求導(dǎo)致系統(tǒng)擁堵,因而智能合約的分類能夠為識別此類合約提供參考。
智能合約的有效分類和功能識別以及人們對智能合約的行為特征的理解,有助于保障智能合約的安全,減少惡意合約對用戶造成的損失,因此本文針對合約的分類問題提出相應(yīng)的解決方法??偟膩碚f,本文的主要貢獻可以分為以下3個部分。
1) 數(shù)據(jù)收集。本文從XBlock[16]、DAppRader網(wǎng)站和DApp網(wǎng)站上收集了4 757個智能合約的運行時字節(jié)碼和類別信息,包括交易所、金融、賭博、游戲和高風(fēng)險5個類別。
2) 算法設(shè)計?;谑占淖止?jié)碼數(shù)據(jù),本文自動化地提取了智能合約的控制流圖(CFG,control flow graph)特征和操作碼頻率特征,其中控制流圖的圖特征能夠豐富智能合約的語義信息和邏輯結(jié)構(gòu)。
3) 實驗驗證?;谔崛〉闹悄芎霞s特征,本文使用XGBoost(extreme gradient boosting)等分類算法對智能合約進行分類。實驗結(jié)果表明,所提的智能合約特征抽取算法能夠有效地分類智能合約,并應(yīng)用于現(xiàn)實中的高風(fēng)險合約識別和智能合約分類。
智能合約中包含的字節(jié)碼信息,可以轉(zhuǎn)換為操作碼,并進一步生成控制流圖。因此,本文考慮結(jié)合圖特征和操作碼頻率特征來表示智能合約。
基于字節(jié)碼的以太坊智能合約分類方法流程如圖1所示。首先,輸入智能合約字節(jié)碼,利用EtherSolve生成每個合約的控制流圖,這個過程包括字節(jié)碼的解析,具體的字節(jié)碼和操作碼的轉(zhuǎn)換規(guī)則如表1所示;接著,得到每個合約的控制流圖后,提取控制流圖的拓撲結(jié)構(gòu)并輸入圖嵌入模型Graph2vec,得到合約的圖特征向量,同時通過正則表達式獲取控制流圖中的操作碼頻率特征向量;然后,將上述兩種特征向量結(jié)合拼接,并對特征進行預(yù)處理和標準化;之后,將處理好的特征輸入多種分類模型中進行智能合約分類;最后,利用收集的標簽信息來驗證分類器的效果。
圖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é)具體介紹本文使用的基于棧符號執(zhí)行的新型靜態(tài)分析方法EtherSolve,以及其將智能合約字節(jié)碼轉(zhuǎn)化為控制流圖的詳細過程。
(1)EtherSolve
與x86匯編不同,在EVM中沒有函數(shù)的概念:一切都是通過跳轉(zhuǎn)來管理的,既沒有用于函數(shù)調(diào)用的操作碼,也沒有用于從函數(shù)調(diào)用返回的操作碼,唯一可用的返回是來自外部智能合約的函數(shù)調(diào)用。這些設(shè)計決策使得對EVM字節(jié)碼進行靜態(tài)分析較為困難。
EtherSolve是一種基于以太坊的靜態(tài)分析方法,該方法可以解析以太坊字節(jié)碼中的跳轉(zhuǎn),并為編譯的智能合約構(gòu)造精確的控制流圖。此處的CFG表示執(zhí)行流程的有向圖,其中的節(jié)點是程序的基本塊,邊用于連接流程中可能的基本塊。
(2)EtherSolve方法流程
在EtherSolve中實現(xiàn)的靜態(tài)分析由以下步驟組成。
1) 解析字節(jié)碼:解析字節(jié)碼以識別操作碼。
2) 構(gòu)建基本塊:將操作碼分組到基本塊中,按照改變程序控制流的操作碼來劃分基本塊。
3) 構(gòu)建基本邊:解決基本塊之間基本的跳轉(zhuǎn)問題,根據(jù)每個基本塊的最后一個操作碼對其進行分析。
4) 解決孤立跳躍:CFG構(gòu)造中最具挑戰(zhàn)性的步驟是解決孤立跳躍的目的地,這些跳轉(zhuǎn)非常常見,如Solidity編譯器使用函數(shù)調(diào)用后的返回值,為了解決這部分問題,需要進行棧符號執(zhí)行。
5) 刪除靜態(tài)數(shù)據(jù):靜態(tài)數(shù)據(jù)段與實際可執(zhí)行代碼分離。
6) 修飾CFG:對獲得的CFG進行裝飾,以突出顯示調(diào)度函數(shù),并確定后備功能的入口點。
使用EtherSolve方法后,獲取的智能合約字節(jié)碼就可以轉(zhuǎn)換為智能合約對應(yīng)的控制流圖。
圖嵌入技術(shù)可以有效地將高維稀疏圖轉(zhuǎn)換為低維、稠密、連續(xù)的向量空間,最大限度地保持圖的結(jié)構(gòu)性質(zhì)。然而,由于需要處理的數(shù)據(jù)較多,模型的效率是核心問題。
因此,本文選擇了可以應(yīng)用于任何圖任務(wù),且復(fù)雜度較低的方法,即基于隨機游走的Graph2vec方法[18]。本節(jié)將具體介紹Graph2vec方法,及其將控制流圖嵌入向量的過程。
(1)Graph2vec
Graph2vec是一種無監(jiān)督的圖表示學(xué)習(xí)方法,可以學(xué)習(xí)到圖的向量表示。這些圖向量表示可以作為圖的特征應(yīng)用于后續(xù)的與圖相關(guān)的任務(wù)中,如圖的聚類、分類、可視化等。Graph2vec將自然語言處理中的詞嵌入算法doc2vec[19]的思想遷移到圖嵌入算法上,將整個圖看作一個文檔,將每個節(jié)點周圍的有根子圖視為文檔的文字。
與圖內(nèi)核和其他子結(jié)構(gòu)嵌入方法相比,Graph2vec具有以下關(guān)鍵優(yōu)勢。
1) 無監(jiān)督表示學(xué)習(xí):以完全無監(jiān)督的方式學(xué)習(xí)圖嵌入。
2) 與任務(wù)無關(guān)的嵌入:由于Graph2vec在其表示學(xué)習(xí)過程中不利用任何特定于任務(wù)的信息(如分類標簽),因此它學(xué)習(xí)到的嵌入向量是通用的。
3) 數(shù)據(jù)驅(qū)動的嵌入:與圖內(nèi)核方法不同,Graph2vec從大量的圖數(shù)據(jù)中學(xué)習(xí)圖嵌入,這使Graph2vec能夠避免基于手工特征的嵌入方法的缺點。
4) 捕獲結(jié)構(gòu)等價性:在采樣時,Graph2vec考慮了非線性子結(jié)構(gòu)(如固定長度的隨機游走),確保了在學(xué)習(xí)的過程中,結(jié)構(gòu)相似的圖可以產(chǎn)生相似的嵌入。
(2)Graph2vec方法流程
給定控制流圖的集合{1,2,…}和期望輸出的向量大小,Graph2vec方法的任務(wù)是為每個控制流圖G∈學(xué)習(xí)一個維的實數(shù)向量表示。
Graph2vec的基本思想是將每個節(jié)點周圍的所有有根子圖(即鄰域)的集合視為其詞匯表。隨后,通過魏斯菲爾德?雷曼內(nèi)核(WL kernel,Weisfieler-Lehman kernel)[20]生成有根子圖,并且為有根子圖分配唯一的標簽。接著,在有根子圖使用doc2vec中的Skipgram優(yōu)化模型,來學(xué)習(xí)數(shù)據(jù)集中每個控制流圖的向量表示。
分類方法有近年來熱門的神經(jīng)網(wǎng)絡(luò)方法,也有發(fā)展完善、基礎(chǔ)夯實的統(tǒng)計方法。因此,本文嘗試了多種分類方法,但經(jīng)過實驗證明,XGBoost表現(xiàn)較好。XGBoost[21]比較靈活,而且支持自定義優(yōu)化函數(shù)來實現(xiàn)更好的分類效果。此外,與神經(jīng)網(wǎng)絡(luò)等方法相比,XGBoost的速度和效率都更加優(yōu)越。而與傳統(tǒng)的決策樹等方法相比,XGBoost是多個弱分類器的結(jié)合,分類效果會更好。
訓(xùn)練完成得到棵樹之后,對模型輸入測試樣本。對于一個樣本特征,XGBoost為其在每棵樹上獲得一個葉子節(jié)點得分。最終將每棵樹上對應(yīng)葉子節(jié)點的分數(shù)求和即為測試樣本的預(yù)測值。
其中,w(x)為葉子節(jié)點的分數(shù),()為其中一棵回歸樹,表示將樣本映射到相應(yīng)葉子的樹結(jié)構(gòu)。是樹中的葉子數(shù)。每個f對應(yīng)一個獨立的樹結(jié)構(gòu)和葉子權(quán)重。
XGBoost目標函數(shù)定義如下:
XGBoost尋找最優(yōu)的f,使目標函數(shù)最小。本文輸入智能合約的帶標簽數(shù)據(jù)集,尋找最優(yōu)的 f使目標函數(shù)最小。最終得到優(yōu)化的目標函數(shù),應(yīng)用于合約分類任務(wù)中。
在提取了智能合約的字節(jié)碼頻率特征和控制流圖特征后,本文使用多種分類方法對智能合約進行分類。本節(jié)將重點描述數(shù)據(jù)收集和預(yù)處理、評估方法、智能合約分類實驗與結(jié)果分析。
首先,為了實現(xiàn)分類效果更好且有監(jiān)督的智能合約分類模型,本文從DAppRadar和DApp網(wǎng)站收集智能合約的標簽信息。各類別智能合約數(shù)量如表2所示,本文收集到的數(shù)據(jù)類標簽有5種,分別是交易所、金融、賭博、游戲、高風(fēng)險,共計4 757個有標簽的智能合約。對于標簽信息,如交易所的功能如下:作為一種中介,交易所允許客戶在法定貨幣和加密“貨幣”之間或不同加密“貨幣”之間進行交易,就像證券交易所一樣。例如,較多人使用的Uniswap V2,可以在以太坊上交換代幣。該交易所消除了受信任的中介機構(gòu),可以允許快速、高效的交易。被標記為高風(fēng)險的合約主要是承諾了高收益但在風(fēng)險水平上并不透明的投資項目,因此這些高回報往往是不可持續(xù)的。DappRader平臺根據(jù)DApp的交易量、市值、用戶量等因素以發(fā)現(xiàn)該DApp是否可能被有限的交易活動輕易操縱,進而來評估金融風(fēng)險,給存在金融欺詐的項目合約打上“高風(fēng)險”標簽。
表2 各類別智能合約數(shù)量
然后,從區(qū)塊鏈數(shù)據(jù)集網(wǎng)站Xblock[16]下載了以太坊的前1 325萬個區(qū)塊的智能合約信息,包括公開可訪問的字節(jié)碼數(shù)據(jù),提取了上述4 757個有標簽的智能合約的字節(jié)碼數(shù)據(jù)。盡管智能合約的源代碼對于理解智能合約有著非常重要的作用,但由于源代碼并不是強制性開源的,因此本文提出的智能合約框架只依賴字節(jié)碼信息。收集的字節(jié)碼數(shù)據(jù)示例如表3所示。
表3 收集的字節(jié)碼數(shù)據(jù)示例
接著,將這4 757個智能合約字節(jié)碼數(shù)據(jù)解析成操作碼,并提取了兩類特征:一是基于EtherSolve方法和Graph2vec方法生成控制流圖的圖嵌入特征;二是通過正則表達式獲取控制流圖中的操作碼頻率特征。控制流圖的圖嵌入特征設(shè)置為16維、32維、64維、和128維的向量,命名為x0~x_15、x_31、x_63、x_127。操作碼頻率特征是139維的向量,均進行了數(shù)據(jù)標準化。特征提取后未標準化的數(shù)據(jù)示例如表4所示。
表4 特征提取后未標準化的數(shù)據(jù)示例
為了衡量不同檢測方法對智能合約的分類效果,本文主要利用3個指標來對分類模型進行評價,分別是精確率(,Precision)、召回率(,Recall)和1值(1 score)。
其中,TP(true positive)指的是真陽性,F(xiàn)P(false positive)指的是假陽性,F(xiàn)N(false negative)指的是假陰性,TN(true negative)指的是真陰性。
由于本文進行的是智能合約的多分類任務(wù),不同類別的合約在數(shù)量上存在差異,因此考慮使用指標的加權(quán)平均值對分類效果進行評估。首先計算每個類別的精確率、召回率和1值,再將支持度(每個類別的真實合約數(shù))作為每個類別的權(quán)重,通過加權(quán)平均法計算分類模型最終的精確率、召回率和1值。
(1)不同分類模型的效果
本文采用多種有監(jiān)督分類方法進行分類,包括決策樹[22]、隨機森林[23]、樸素貝葉斯[24]、XGBoost[21]、支持向量機(SVM,support vector machine)[25]和梯度提升決策樹(GBDT,gradient boosting decision tree)[26]。其中每個分類模型的訓(xùn)練集和測試集都劃分為7:3,即測試集有1 428個智能合約。其中,各個模型參數(shù)如表5所示。
表5 模型參數(shù)
不同分類模型的分類效果如表6所示。
表6 各分類模型效果
從表6可以看出,XGBoost取得了最好的分類效果,1值為0.911 1。其他模型如隨機森林、XGBoost、SVM和GBDT的1值基本都大于0.85,證明了本文提取特征方法的有效性。而其中效果比較好的隨機森林、XGBoost、GBDT都屬于集成學(xué)習(xí),這是因為集成學(xué)習(xí)以某種策略來組合多個模型,發(fā)揮出“集體智慧”的優(yōu)勢,所以在分類問題上效果通常較好。更進一步,效果最好的XGBoost模型在代價函數(shù)里加入了正則項,使學(xué)習(xí)出來的模型更加簡單,防止過擬合;并且借鑒了隨機森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計算。分類效果較差的方法是樸素貝葉斯和決策樹。由于樸素貝葉斯基于條件相互獨立,算法較為簡單,所以,效果較差。而決策樹是單一的樹,且限制樹深度為10,所以效果比較有限。
(2)圖向量維度的選擇
通過不同分類模型的結(jié)果比較可以發(fā)現(xiàn)XGBoost是較合適的分類模型。因此本文使用XGBoost對不同維度的圖向量,結(jié)合操作碼頻率特征進行分類測試。對于不同維度的圖向量,智能合約分類結(jié)果如表7所示。
表7 不同維度的圖向量在XGBoost模型中的分類效果
從表7可知,分類效果最好的是32維的圖向量。但其實32維、64維和128維的效果相差并不大,原因可能是32維以上的向量能夠充分提取控制流圖的結(jié)構(gòu)信息,而16維的特征會因為維度較小而損失一些信息。32維的圖特征能夠較好地表達控制流圖的結(jié)構(gòu)和邏輯信息,并且數(shù)據(jù)量較小,有助于提高后面分類器的訓(xùn)練速度。因此,在特征重要性分析實驗中采用32維的圖向量。
(3)特征重要性分析
通過查看特征重要性來判斷,什么特征在智能合約分類上更有幫助。在XGBoost中排名1~10的特征重要性如圖2所示,排名48~59的特征重要性如圖3所示。
如圖2所示,PUSH14、BALANCE、PUSH28、DUP7等排名在1~10的操作碼在智能合約分類中起到重要的作用。由圖3可知,圖的特征重要性較低。在圖特征中重要性最高的為x_35,但x_35在全部特征中排48位,重要性僅有0.000 519(總重要性為1)。
圖特征和操作碼頻率特征的重要性差別較大,因此需要進行進一步的分析。僅使用操作碼頻率特征對智能合約進行分類,并選擇XGBoost模型進行合約分類,各個類別的分類效果如表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分類效果
采用不同智能合約特征時XGBoost的分類結(jié)果如表9所示,從表9可以得出3個結(jié)論。
表9 采用不同智能合約特征時XGBoost的分類效果
1) 使用操作碼特征來對智能合約進行分類具有較高準確率。只使用操作碼特征可以較好地實現(xiàn)智能合約分類任務(wù),可見不同類別的智能合約操作碼頻率存在很大差異,憑此可以有效地對智能合約進行區(qū)分。
2) 控制流圖特征比操作碼特征的分類效果差。僅使用控制流圖特征進行智能合約分類的結(jié)果并沒有比僅使用操作碼特征的分類結(jié)果好。由于智能合約不同類別的表現(xiàn)不同,原本預(yù)計加入能表示代碼邏輯的控制流圖特征,會有良好的表現(xiàn)。然而,基于控制流圖特征的模型分類效果在精確率、召回率、1值上均比僅使用操作碼特征要低。原因可能是:許多智能合約都是實驗性的,很難從行為中檢測出它們的類型;不同類別的智能合約可能存在相似的代碼,而Graph2vec 僅使用了節(jié)點的出入度信息和圖結(jié)構(gòu)信息,這導(dǎo)致其提取控制流圖特征的能力較為有限(在未來的研究中有必要針對蘊含豐富節(jié)點和邊特征的控制流圖設(shè)計特有的圖嵌入算法,以提高智能合約分類的準確率);當(dāng)結(jié)合控制流圖特征后,分類效果有所下降。但是在只使用32維控制流圖特征時,分類效果在交易所、賭博和游戲類別表現(xiàn)都較好,可能是因為金融和高風(fēng)險類別的數(shù)據(jù)太少,圖特征分類效果較差。
3) 控制流圖特征和操作碼特征結(jié)合可行性。結(jié)合兩個特征進行分類,從理論上可以將代碼邏輯結(jié)合到數(shù)據(jù)中,增強模型的魯棒性。如果能夠在圖嵌入模型上選擇更好的方案,或者對于數(shù)據(jù)量較少的類別獲取更多數(shù)據(jù)可能會提高分類效果。
對智能合約進行分類與識別將有助于更好地理解智能合約的行為,對智能合約的安全、性能以及區(qū)塊鏈系統(tǒng)等方面都有重要意義。
對智能合約自動分類與識別有助于區(qū)塊鏈研究者和用戶更好地理解智能合約的行為,且對區(qū)塊鏈生態(tài)上的用戶安全、代碼安全等方面均有重要意義。
本文收集了以太坊智能合約的標簽數(shù)據(jù)集,進而提出了一種基于字節(jié)碼的以太坊智能合約分類方法。該方法基于提取的控制流圖特征和操作碼頻率特征,使用XGBoost對智能合約數(shù)據(jù)進行分類訓(xùn)練。實驗結(jié)果表明,該方法提取的特征比較有效,在多個分類模型中有較為優(yōu)秀的表現(xiàn)。而且本文所使用的字節(jié)碼特征,在任何正在運行的智能合約中都可以公開訪問。同時,通過對特征重要性的分析,可以發(fā)現(xiàn)在進行智能合約分類時,操作碼頻率特征比控制流圖特征更為重要。然而,僅使用操作碼頻率特征的分類方法可能容易遭受攻擊,攻擊者可以插入無關(guān)代碼進而干擾分類模型效果。通過一系列的實驗驗證,本文提出的研究思路和方法有著較好的智能合約分類性能,且適用于大部分的智能合約分類預(yù)測問題。
[1] 沈鑫,裴慶祺,劉雪峰. 區(qū)塊鏈技術(shù)綜述[J]. 網(wǎng)絡(luò)與信息安全學(xué)報, 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]. 計算機研究與發(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] 付夢琳, 吳禮發(fā), 洪征, 等. 智能合約安全漏洞挖掘技術(shù)研究[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)狀、趨勢與挑戰(zhàn)[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]. 計算機工程, 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é)報(自然科學(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] 黃步添, 劉琦, 何欽銘, 等. 基于語義嵌入模型與交易信息的智能合約自動分類系統(tǒng)[J]. 自動化學(xué)報, 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
國家重點研發(fā)計劃(2020YFB1006005);國家自然科學(xué)基金(61973325);廣東省自然科學(xué)基金(2021A1515011661);廣州市科技計劃項目(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é)報, 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? ),女,廣東揭陽人,中山大學(xué)博士生,主要研究方向為區(qū)塊鏈、加密貨幣、網(wǎng)絡(luò)科學(xué)的理論和應(yīng)用。
林凱欣(2000? ),女,廣東廣州人,中山大學(xué)碩士生,主要研究方向為區(qū)塊鏈、智能合約以及加密“貨幣”。
吳嘉婧(1989? ),女,江西吉安人,中山大學(xué)副教授,主要研究方向為網(wǎng)絡(luò)科學(xué)、區(qū)塊鏈交易網(wǎng)絡(luò)、網(wǎng)絡(luò)表示學(xué)習(xí)。
鄭子彬(1982? ),男,廣東潮州人,中山大學(xué)教授,主要研究方向為區(qū)塊鏈、大數(shù)據(jù)、服務(wù)計算、機器學(xué)習(xí)、軟件可靠性。