?

基于欠采樣和源代碼圖表征的以太坊龐氏騙局檢測

2024-01-04 06:26龔曉元劉冬明師自通
中北大學學報(自然科學版) 2023年6期
關鍵詞:龐氏源代碼騙局

龔曉元,劉冬明,高 峰,師自通

(中北大學 計算機科學與技術學院,山西 太原 030051 )

0 引 言

自2008年中本聰首次提出去中心化的支付方案,并發行了第一種加密貨幣比特幣[1]以來,區塊鏈作為一種新興技術,得到了蓬勃的發展。以太坊[2]作為區塊鏈領域的大型金融交易平臺之一,因其智能合約的存在而被廣泛應用。由于其匿名性和監管困難,以太坊的健康發展仍然面臨諸多難題,欺詐問題也日益頻發,龐氏騙局便是其中之一。以太坊龐氏騙局是一種利用智能合約投資活動進行非法集資的詐騙行為,該騙局通常會以種種宣傳術語來掩蓋其真實目的,以高額的回報率不斷地吸引投資者投入資金,來維持自身運轉,當后來的投資者試圖取回他們的投資時,通常會發現他們的資金已經被騙取。TRM Labs發布的2022年非法加密生態系統報告[3]顯示加密貨幣龐氏騙局已經給投資者造成將近78億美元的損失。因此,智能合約龐氏騙局的檢測對于以太坊區塊鏈的健康發展和投資者的財產安全至關重要。

當前,針對智能合約龐氏騙局的檢測研究仍然非常有限,且基本都是從字節碼層面和交易信息層面提取合約特征。Bartoletti等[4]提出基于標準化Levenshtein距離的方法來檢測以太坊網絡中的龐氏騙局。該方法通過蒙特卡洛算法[5]估算以太坊網絡中兩個任意智能合約的標準化Levenshtein距離,并作為智能合約相似度的判斷依據,但是,臨界值的設置缺乏科學證明,誤報率很高。Chen等[6-7]利用以太坊區塊鏈公開透明的特點,從用戶賬戶和智能合約操作碼兩方面提取特征,基于數據挖掘的思路,充分利用區塊鏈上的信息,使用隨機森林(Random Forest,RF)和極端梯度提升(eXtreme Gradient Boosting,XGBoost)的方式大幅度提升了檢測精度,并通過人工檢查的方式貢獻了一個龐氏騙局合約數據集XBlock。但是,前者的缺陷是由于從操作碼中提取特征而無法獲取智能合約豐富的語義結構信息和程序依賴信息,并且詐騙者可以通過調整合約編寫方式來控制操作碼的頻率,從而繞過檢測; 后者的缺陷是由于缺乏交易信息而無法在騙局合約部署伊始就進行主動檢測。為了在智能合約全生命周期內有效檢測龐氏騙局,Peng等[8]基于操作碼的功能,通過系統化的建模逐步實現了智能龐氏騙局的高效自動檢測模型,并且可以在智能合約部署初期進行檢測工作。Shen等[9]將龐氏騙局檢測問題轉化為異常檢測問題,將字節碼轉化為高維矩陣,使用孤立森林(Isolation Forest,Iforest)算法來識別智能合約中的龐氏騙局。Zhang等[10]創新地提取了字節碼特征,并將其與用戶交易和操作碼頻率相結合,獲取了更全面的特征,提出一種基于改進LightGBM算法的智能合約龐氏騙局識別方法,對模型訓練速度與模型性能均有顯著提升。

在深度學習領域,Liang等[11]提出了一個數據驅動的龐氏騙局檢測系統DSPSD,根據操作碼和交易數據,直接預測合約是否為龐氏騙局。Jin等[12]提出了一個通用的異構特征增強模塊,通過學習輔助異構交互圖中基于元路徑的行為特征,并將異構特征聚合到執行檢測方法的同構圖中的對應賬戶節點,進而捕獲與賬戶行為模式相關的異構信息。He等[13]提出的Ethereum-CTRF方法,提取了合約代碼的詞特征、序列特征以及交易特征,并對數據進行了簡單隨機過采樣處理,并構造了多粒度的網絡模型,但這樣容易過度擬合。Wang等[14]使用N-gram算法來提取更全面的操作碼特征,同時引入自適應合成采樣處理類別不平衡的數據,最終使用AdaBoost分類器進行騙局合約檢測。

以上文獻大多基于以太坊虛擬機層面的字節碼特征、操作碼特征和交易特征,但是,以太坊龐氏騙局作為使用Solidty高級語言[15]人為編寫的以太坊智能合約,在高級語言層面包含豐富的語義語法信息、控制依賴關系和數據依賴關系,而字節碼和操作碼不能充分體現智能合約龐氏騙局的關鍵特征,且交易信息依賴合約的運行積累,阻礙了合約檢測的時效性。同時,現有的檢測方法在處理類別不平衡的數據空間方面存在不足,騙局合約在所有智能合約中的比例很低,在數據不平衡時,分類器模型更傾向于多數類樣本,對少數騙局合約的敏感度較低,從而導致騙局合約檢測的召回率較低。針對類別不平衡問題,Modha等[16]利用K-Means算法將多數類的樣本進行聚類,合并聚類中心,以替換多數類樣本,這種方法可以達到平衡數據集并且保留多數類樣本特征的目的。

綜上所述,針對現有方法存在類別不平衡、特征來源單一且不能完整表達智能合約語義語法信息和程序依賴信息的問題,本文提出了一種基于欠采樣和源代碼圖表征的檢測方法:首先使用基于代碼相似度的聚類算法在數據層面解決智能合約類別不平衡問題,再通過改進構圖算法從Solidty源代碼層面挖掘能夠區分龐氏騙局的關鍵特征,最后使用圖神經網絡模型提高對智能合約龐氏騙局的檢測效果。

1 龐氏騙局檢測方法

1.1 總體框架

本文提出的智能合約龐氏騙局檢測方法的整體框架如圖1 所示,首先根據數據集中的合約地址,使用爬蟲工具從以太坊瀏覽器(etherscan.io)中爬取智能合約源代碼和字節碼,將所爬取源代碼和字節碼按照7∶3的比例分為訓練集與測試集,其次使用Levenshtein算法和K-Means算法對字節碼訓練集中的正常合約進行欠采樣處理,得到重組后的合約編號,使用合約編號重組源代碼訓練集,再利用重組后的源代碼訓練集和測試集進行合約圖構建并對合約圖進行標準化處理,然后訓練圖神經網絡模型,并使用訓練好的模型對測試集合約進行檢測分類。

1.2 基于代碼相似度的欠采樣方法

本文基于代碼相似度的欠采樣方法,利用Levenshtein算法計算訓練集中多數類智能合約之間的距離,進而通過K-Means算法對多數類智能合約進行聚類,有選擇地丟棄多數類合約,保證了訓練集騙局合約和正常合約類別的相對平衡。

1.2.1 Levenshtein算法

Bartoletti等[4]使用Levenshtein距離來計算以太坊網絡中兩個任意智能合約的相似度。1965年,俄國科學家Vladimir Levenshtein率先提出了Levenshtein算法,它采用動態規劃思想來計算兩個字符串之間的編輯距離,即對于給定的兩個字符串S和T,由S轉換為T,需要的最小編輯次數。該算法允許的編輯操作有:1) Insert,在被編輯的字符串中插入一個字符; 2) Delete:在被編輯的字符串中刪除一個字符; 3) Swap,在被編輯的字符串中替換一個字符。Levenshtein算法的實現步驟如下:

算法 1:Levenshtein算法

輸入:長度為a的字符串A,長度為b的字符串B。

輸出:字符串A與字符串B之間的距離distance。

步驟 1:初始化一個(a+1)×(b+1)階的編輯距離矩陣,記為DA,B(i,j),初始化第一行[0,b],第一列[0,a]。其計算公式為

DA,B(i,j)=

(1)

式中:A[i]≠B[j]是一個指示函數,當A[i]≠B[j]時,其值為1,否則為0。

步驟 2:比較字符串A和字符串B的字符。

步驟 3:根據式(1)填充距離矩陣。

步驟 4:重復步驟2和3直到DA,B[a+1,b+1]被填充。

步驟 5:得到Ldistance=DA,B[a+1,b+1]。Levenshtein距離可以作為智能合約相似度的表征,距離越小,合約特征越相近,反之,合約特征差異越大。

1.2.2 K-Means算法與多數類樣本篩選

多數類樣本篩選是指在多數類智能合約欠采樣過程中,對不同智能合約的字節碼進行聚類,距離相近的合約成為一類,去掉相似度高的合約樣本,使得被選擇的樣本仍然能夠很好地表征正常合約的多數特征。

K-Means算法的核心思想是將智能合約字節碼劃分為多個聚類,使得每個聚類中智能合約到該聚類中心的Levenshtein距離的平方和最小。K-Means算法的評價準則是誤差平方和準則,計算公式為

(2)

式中:SSE為誤差平方和;k為簇的數量;Ldistance為算法1中提出的Levenshtein距離。

以下為多數類樣本選擇算法的過程:

算法 2:多數類樣本選擇算法

輸入:多數類智能合約樣本,

輸出:重組后的多數類智能合約樣本。

步驟 1:隨機選擇k個樣本作為智能合約的初始聚類中心;

步驟 2:使用算法1計算其余合約到各聚類中心的Levenshtein距離,并將其分配到Levenshtein距離最近的簇中;

步驟 3:通過計算各簇的距離均值,更新聚類中心;

步驟 4:計算SSE;

步驟 5:重復步驟2,3,4,直到SSE收斂(不再變化);

步驟 6:從每個簇中隨機抽取單個樣本,構造重組后的多數類智能合約樣本。

1.3 源代碼圖表征

圖作為計算機科學中的一種復雜數據結構,以抽象的方式表現了數據或實體間某種多對多的復雜關系。這些數據或實體被稱為節點,而不同節點間的相關關系被稱為邊。Zhuang等[17]提出了一種能夠保存程序語義語法信息、控制依賴關系和數據依賴關系的智能合約構圖方法,把智能合約中的某些函數和變量抽取為節點,把程序執行可能穿過的路徑設置為邊,將智能合約源代碼提取為合約圖。

1.3.1 構圖方法改進

智能合約龐氏騙局檢測問題的關鍵在于如何對智能合約源代碼進行特征提取。Zhuang等[17]的方法應用于漏洞檢測時,龐氏騙局合約與漏洞合約的不同之處在于,前者在程序規則上合法,程序行為完全符合語義語法規則,而后者會利用程序漏洞使程序產生語義語法規則以外的結果。因此,本文結合人工分析騙局合約源代碼,在前人的基礎上改進了合約圖構圖算法,讓圖神經網絡捕獲并學習圖的拓撲結構關系、節點間的控制依賴和數據依賴等信息,進而在保留源代碼語義信息的同時對蘊藏其中的行為特征進行充分挖掘,提高模型對騙局合約的識別能力。改進后的構圖算法有如下變化:

1) 去除回退節點。因為Fallback()函數作為智能合約定義的安全默認函數,盡管其作為節點特征在智能合約漏洞檢測中極其重要,但是龐氏騙局合約本質上是一種特征的欺詐合約模式,在程序規則上是合法的。因此,騙局合約與漏洞合約并非同一層面的安全問題,故本文方法取消設置回退節點,同時取消與其相連的回退邊。

2) 將賬戶(用戶)余額這一關鍵變量設置為核心節點。通過人工分析騙局合約源代碼,可以發現用于表示合約賬戶余額的變量在用戶投資和返利方面比較活躍,所以本文方法將其設置為核心節點,讓神經網絡可以自行學習其變化特征。

3) 刪除向前邊??紤]到向前邊實質上并不包含語義語法信息,而且這種冗余的特征還會干擾神經網絡的學習效果,故將其取消。

1.3.2 節點表征

合約圖包含兩類節點:核心節點(Core Node,簡稱C)和普通節點(Normal Node,簡稱N)。

核心節點C代表對騙局合約檢測具有重要影響的關鍵函數調用和關鍵變量:

1) 用來發送以太幣的call.value()、send()和transfer()三個內置函數。

2) 對前述三個轉賬函數調用的函數W和對W進行調用的函數V。

3) 用于表示合約賬戶余額的變量,Balance[msg.sender],players[wating]等。

普通節點N代表函數W和函數V中沒有被提取為核心節點的變量。

1.3.3 邊表征

合約圖包含兩類有向邊:控制流邊(Control Edge,CE)和數據流邊(Date Edge,DE)。表1 詳細記錄了兩種有向邊的類型及其語義信息??刂屏鬟厑碓从诳刂坪霞s執行路徑的程序語句,例如循環控制和條件判斷。數據流邊來源于賦值語句和控制訪問,例如賦值、比較和運算語句。

表1 有向邊的分類和表示

按照上述節點表征方式和邊表征方式,對智能合約源代碼進行靜態掃描,生成合約圖,如圖2 所示。

(a) 龐氏騙局合約片段

1.4 合約圖標準化

(3)

圖3 是對圖2(b) 合約圖進行聚合優化后的標準化合約圖。

圖3 合約圖標準化

2 實驗分析

2.1 數據集

本文使用Chen等[6]給出的智能合約龐氏騙局數據集XBlock,該數據集具體包括3 793個智能合約地址及其標簽。其中:共有200個龐氏騙局合約地址和3 593個非龐氏騙局合約地址,在這3 593個非龐氏騙局合約里,有2個廢棄合約和3個錯誤標簽合約,將這些合約排除后,剩下3 788個可用合約,騙局合約與正常合約的比例接近1∶18; 龐氏騙局的標簽為1,非龐氏騙局合約的標簽為0。

2.2 實驗模型與評價指標

本文實驗選用圖卷積神經網絡(Graph Convolutional Network,GCN),采用one-hot編碼,并為每一類特征都維護一個one-hot字典,將最終提取到的合約圖特征與其字典對照,然后將離散特征的取值擴展到歐氏空間,最后進行拼接,實現對合約圖特征的向量化表示,將其作為GCN模型的輸入。實驗環境參數如表2 所示。

表2 實驗環境參數

實驗采用XBlock數據集,迭代次數epoch=30,學習率設置為0.002,dropout設置為0.7,批大小為32,GCN模型參數如表3 所示。

表3 GCN模型參數

表4 為智能合約龐氏騙局檢測混淆矩陣。

表4 智能合約龐氏騙局檢測的混淆矩陣

智能合約龐氏騙局檢測時,由于騙局合約的數量很少,如果模型認定測試集中所有合約都為正常合約,那么模型的準確率指標也會很高。所以,本文在選取智能合約龐氏騙局檢測的評價指標時,放棄使用準確率(Accuracy),最終選取了精確率、召回率和F1值來評價模型的分類性能,計算過程如下:

(4)

(5)

(6)

式中:NTP為實際騙局合約被檢測為騙局合約的數量;NFP為實際正常合約的合約代碼被檢測為騙局合約的數量;NFN為實際騙局合約被檢測為正常漏洞的數量;P為精確率,反映了模型所預測的騙局合約是否準確;R為召回率,反映了模型是否能夠檢測出所有騙局合約;F1綜合了騙局合約檢測的精確率與召回率,全面反映了模型對于智能合約的分類效果。對于騙局合約檢測,本文的預期效果是在保證精確率的前提下提高召回率,找出更多騙局合約,以減少其帶來的危害。

2.3 欠采樣倍率選擇實驗

重組后訓練集的類別比例取決于欠采樣倍率,并且會最終影響模型的性能,因為欠采樣會造成信息缺失,即將正常合約丟棄可能會導致模型丟失正常合約的重要信息。

在不同欠采樣倍率下,不同類別比例的重組訓練集對本文方法所得P、R和F1的影響如圖4 所示。

圖4 不同采樣倍率的實驗結果

由圖4 可得,當重組訓練集比例為1∶3時,模型的召回率和F1值最高,而精度略低,主要原因是丟棄掉太多的正常合約樣本,使得模型將正常合約誤判為騙局合約,并且隨著比例的增大,模型的性能會快速下降,因為在數據極度不平衡時,模型受到權重的影響而對騙局合約的敏感度降低,從而使檢測性能下降。

由于在真實以太坊網絡中騙局合約遠少于正常合約,所以本文選擇較低的精確率,而選擇更高的召回率,最終使用了重組后比例為1∶3的訓練集所對應的網絡模型,提高了智能合約龐氏騙局的檢測效果。

2.4 消融實驗

為了驗證本文方法對于智能合約龐氏騙局檢測的有效性,進行了消融對比實驗,主要是將本文方法與以下兩種方法進行了比較:① 重組前訓練集和改進構圖算法相結合的方法; ② 重組后訓練集和原始構圖算法相結合的方法。

如圖5 所示,本文方法與方法①的對比證明了本文基于代碼相似度的欠采樣方法的有效性,通過采用Levenshtein距離算法+K-Means算法對特征相近的正常合約進行了聚類,丟棄一部分正常合約,使得重組后的訓練集相對平衡,提高了模型對騙局合約的關注度,從而顯著提高了騙局合約的召回率; 本文方法與方法②的對比證明了本文針對龐氏騙局合約改進的智能合約構圖方法的有效性,通過去掉冗余的節點和有向邊,將源代碼中表示合約余額的關鍵變量設置為新的核心節點,改進了源代碼表征方式,使得網絡模型能夠更好地學習騙局合約的關鍵特征,提升了對于騙局合約的關注度和敏感程度,因此可以找出更多的騙局合約,將召回率提高了33%,從而極大地提升了模型的性能。

圖5 消融實驗結果

2.5 智能合約龐氏騙局檢測的對比實驗

為了進一步驗證本文方法對智能合約龐氏騙局檢測的有效性,綜合認可度,分別選取傳統機器學習方法、改進機器學習方法和深度學習方法,將本文方法與SVM,XGBoost,RF[7],IForest[9],DSPSD[11],Ethereum-CTRF[13],AdaBoost[14]進行實驗對比,結果如表5 所示。

表5 不同分類方法的結果對比

通過對比表5 中各分類方法的評價指標,可以看出,在前4種機器學習方法中,孤立森林(IForest)方法對智能合約龐氏騙局檢測的性能最優,精確率為99%,召回率為80%,F1值為88%,僅次于深度學習方法DSPSD。本文方法的精確率為91%,非常接近其余5種方法; 本文方法的召回率和F1值分別為98%和94%,明顯優于其余5種方法。在騙局合約識別中,本文方法期望在保證精確率的前提下提高召回率,盡可能多地找出更多騙局合約,以減少其帶來的危害。綜上所述,本文方法對智能合約龐氏騙局的檢測效果有所提升。

3 結 論

本文針對以太坊龐氏騙局合約檢測進行了研究,通過分析源代碼的特點,提出了一種基于欠采樣和源代碼圖表征的智能合約龐氏騙局檢測方法,使用Levenshtein算法和K-Means算法,在數據層面解決了智能合約類別不平衡的問題,避免了模型的過度擬合。本文首次引入了高級語言構圖方法用于龐氏騙局合約的源代碼構圖,同時改進了構圖算法,以便于從Solidty源代碼層面挖掘能夠區分龐氏騙局的關鍵特征,從而提升了網絡模型對龐氏騙局合約的敏感程度。實驗結果表明,本文方法在XBlock數據集上,在犧牲少許精度的情況下,顯著提升了智能合約龐氏騙局的召回率和F1值。本文方法在進行智能合約類別不平衡處理時,只關注了字節碼之間的編輯距離,沒有考慮其具體含義,今后的研究工作應在智能合約聚類時關注其語義語法信息,引入更加嚴格的量化指標來進行核心節點選取,并將合約類別和交易信息等特征引入模型訓練,以進一步提高模型的檢測性能。

猜你喜歡
龐氏源代碼騙局
人工智能下復雜軟件源代碼缺陷精準校正
揭秘光的折射形成的“騙局”
別被騙局牢牢關??!
基于TXL的源代碼插樁技術研究
軟件源代碼非公知性司法鑒定方法探析
勻加速騙局
二十四孝之涌泉躍鯉
天上不會掉餡餅 地下不會長黃金 “龐氏”金融騙局啟示錄:天下沒有無風險的高收益
揭秘龍湖產品“源代碼”
涌泉躍鯉
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合