高 見,孫 懿,王潤正,袁得崳
1.中國人民公安大學 安全防范與風險評估公安部重點實驗室,北京102623
2.中國人民公安大學 信息網絡安全學院,北京100038
2008 年11 月1 日,中本聰發布了比特幣白皮書《比特幣:一種點對點的電子現金系統》[1],提出了一種P2P形式的虛擬加密數字貨幣。比特幣是由網絡節點的計算產生的本質,是其與法定貨幣之間的明顯差別,是一種利用數字簽名、散列算法、共識機制、激勵機制等技術手段作為支撐,形成分布式、匿名性、完全去中心化的支付系統。
比特幣的獲取主要依靠算力[2],通過在一定時間內的隨機散列運算并求取隨機數獲得出礦獎勵。這也意味著只要你擁有一臺電腦即可參與到挖礦之中。因其開采的便利性且具有一般等價物的價值,引得大批人員投入到挖礦的潮流之中。
但隨著技術的發展,也帶來了許多安全方面的問題。大量的黑客通過一定的攻擊手段,以非法的方式使用受害者的系統資源和網絡資源[3]開采貨幣,造成大量損失。根據深信服安全團隊統計,如圖1 所示,2019 年上半年挖礦木馬攔截次數達54 億次,安全事件的發生也致使挖礦木馬數量驟增,挖礦攻擊已然成為目前最具威脅性的攻擊類型之一。

圖1 2019年上半年惡意挖礦攔截統計Fig.1 Interception statistics of malicious mining in the first half of 2019
隨著Web技術WebAssembly的完善,專門用以工作量證明的Cryptonight等算法的出現以及云服務的普及,黑客們的攻擊手段也更加花樣倍出。通過攻擊云服務器的方式,感染用戶進行挖礦也將成為新趨勢。這將會造成大量的資源被非法占用,受害者規模倍增,損失重大。因此對惡意挖礦的檢測也顯得尤為重要。
根據用戶經常上網的方式來看,加強對利用瀏覽器進行挖礦的檢測具有重要意義。目前針對瀏覽器的挖礦檢測具有單一性,通常靜態檢測網頁源代碼或動態監測瀏覽器各種事件響應,且使用的模型較為單一。
因此本文通過使用混合檢測的方法將以往學者們提取的網頁挖礦特征進行融合,使用四種機器學習算法模型進行訓練。在找出最適合于瀏覽器挖礦檢測模型的同時,也希望找出對瀏覽器挖礦檢測最具有標識性的特征組合。
近年來國內外對惡意挖礦攻擊檢測均較為重視,也開發了許多檢測惡意挖礦攻擊的程序軟件。涉及到的檢測主要使用機器學習算法和深度學習算法,主要包括樸素貝葉斯、隨機森林、K近鄰、支持向量機、卷積神經網絡等。
Konoth等人[4]通過運行時監視CPU緩存事件、內存訪問模式以及結合對代碼的靜態分析提出了Mine-Sweeper,一種基于監視運行時的緩存事件和代碼靜態分析的模型,具有較高的抗混淆性。Kharraz等人[5]設計了一種可以自動檢測加密劫持的檢測系統Outguard,通過使用定制Web 瀏覽器提取特征,并使用SVM 分類算法構建模型,得到了97.9%TPR和1.1%FPR的高性能檢測模型。Saad等人[6]通過對惡意加密劫持進行動態和靜態的分析,基于內容、貨幣、代碼,得出加密劫持是一種針對各種網站類型并廣泛傳播的威脅,同時強調開采貨幣平臺與貨幣之間具有相似性,并以加密腳本的代碼復雜度特征設計出一個準確率高達96.4%的檢測方法。
龍廷艷等人[7]將JavaScript 惡意代碼轉化為灰階圖像,并使用卷積神經網絡對圖像數據進行分類。張衛豐等人[8]提出了基于動態行為分析的網頁木馬檢測方法,通過針對攻擊腳本獲取、動態執行函數數量等行為,形成相關字符串操作記錄特征,得到準確率96.64%的檢測模型。魏旭、成衛青[9]基于URL 特征、網頁代碼特征和HTTP 請求特征,使用多種機器學習算法進行惡意網頁識別,最終得到準確率高達98%的網頁識別模型。秦玉海等人[10]則通過對網頁挖礦原理進行分析,基于python正則表達式對網頁后臺代碼進行匹配的方式進行識別,同時介紹一些防范策略。
除去上述研究外,一些網站或拓展程序也可實現對惡意挖礦進行檢測:CoinBlockerLists 依靠開源化、用戶更新的方式獲取惡意網頁列表,并可用以添加黑名單來達到防護目的。谷歌瀏覽器中的Wappalyzer拓展程序,可分析Cryptominers 類別中九種技術手段,同時涵蓋12 900多個黑名單,具有較高檢測率。
本文構建了一個基于機器學習用以檢測惡意挖礦網站的模型,其構建流程如圖2 所示:根據一般機器學習模型的構建流程,首先明確用來檢測惡意挖礦網站的目的,其次在了解惡意挖礦的相關內容后選取如2.2 節所示的特征,然后通過爬蟲獲取相關數據集用來訓練模型,接著根據評估標準對模型進行優化,最后將模型部署運行。

圖2 模型構建流程Fig.2 Model building process
同時本文通過nodejs 模塊構建了一個基于Chrome的遠程調試協議的爬蟲系統[5]。爬蟲系統設計如圖3所示:主要使用nodejs中的Chrome-launcher、Chrome-remoteinterface、request模塊[11],分別用以從node.js中啟動Chrome瀏覽器,使用谷歌瀏覽器調試協議與網頁進行交互,發送HTTP請求等。其次按照自己需求編寫JavaScript代碼,用以獲取特征提取中所涉及到的內容。主要使用Chromeremote-interface 模塊中Page 域、Network 域、Profiler 域、Debugger域的方法和事件,模擬用戶瀏覽該網頁時的情況,并對事件進行追蹤,同時將收集到的事件序列返回。最后使用python 從收集到的數據[12]中提取出特征及特征相應數量,形成csv 格式的數據集。本文按照惡意挖礦網站與良性網站為1∶1的比例,獲取了一個大小為2 000的數據集用以訓練模型。

圖3 爬蟲系統結構Fig.3 Architecture of crawler system
本文主要構建嵌入惡意JavaScript腳本的挖礦攻擊檢測模型,并從PublicWWW及Netlab360中獲取其公開發布的惡意挖礦網站數據集。在國內外研究的基礎上,融合提取出如下特征用以訓練模型。
(1)Websocket[5]:是一種讓通訊雙方可以在TCP 的單個連接上進行全雙工交流的協議(通訊雙方可以相互之間主動交換數據),同時建立連接的雙方之間只需完成一次認證,即可建立持久性的連接,使得服務器和客戶端之間的通信變得更加便捷。且相比于HTTP 協議每次請求的三次握手連接,Websocket 協議的持久性連接,避免了多次建立請求響應消息對而產生的冗余頭部信息,節省了大量帶寬資源,又保證了通訊的實時性。并且大多惡意挖礦網站使用Websocket協議用以受害者和攻擊者之間建立聯系,方便傳遞信息。
(2)Web Worker[5]:JavaScript語言采用單線程模式,所有任務在一個線程上完成,按照順序一步一步執行。當某一任務耗時較長時,即便后面的任務多么簡單也會致使其延后,即造成阻塞。Web Worker 理念允許創建附屬于主線程的Worker 線程,這些附屬線程可以接受并處理來自主線程分配的任務,這種Worker 線程獨立于其他腳本,在后臺運行。對于一些計算復雜、時延較長的任務可通過該線程在后臺運行,這樣通常用于交互的JavaScript主線程就不會被阻塞或拖慢。大部分惡意挖礦網站都會使用Worker 線程,因為其主要使用受害者資源進行大量數據計算,如果僅靠主線程進行計算,一般會使網頁界面反應緩慢,導致用戶體驗感不佳而放棄瀏覽或引起用戶懷疑。
(3)Postmessage[5]及onmessage 事件:人們已經知道主線程可以創建其附屬線程來避免阻塞,但二者之間如何進行數據交換,Postmessage及onmessage事件解決了這個問題。主線程通過調用worker.postMessage()方法向Worker線程發送信息,并通過worker.onmessage監聽Worker 線程接受其發送回來的信息。發現惡意挖礦網站進行大量計算的同時還需要將結果進行提交,因此會在子線程和主線程之間進行頻繁數據交換,即發生較多的Postmessage、onmessage事件。
(4)Messageloop 事件[5]:瀏覽器是一種多進程的結構設計,每個進程內又有許多線程,多線程之間的交互則通過Messageloop 事件進行。人們已經知道Web Worker 的出現可以使主線程創建多個子線程用以處理任務,子線程之間可以通過共同運算得出結果,而線程之間的交互則通過Messageloop 事件進行,因此選取其作為識別惡意挖礦網站的特征之一。
(5)CPU 使用率:挖礦網站通常會占據用戶大量的CPU 資源進行挖礦計算,獲取CPU 使用率的高低對識別惡意挖礦也具有分辨性。
(6)關鍵字匹配:觀察提供商所提供的挖礦腳本,可以發現同屬于一個提供商的腳本具有相似的代碼關鍵字。因此可以通過正則表達式匹配網頁代碼段中是否含有該關鍵字,來進行識別判斷。各提供商關鍵字如表1所示。

表1 提供商關鍵字Table 1 Provider keywords
(7)計算函數:比特幣系統中共識機制使得系統得以維護統一的賬本,其主要使用哈希函數求解隨機數運行。隨著技術的發展,除SHA-256 算法外,CryptoNight算法也常用來實現共識。此外,進行挖礦需要下載有效載荷,一般是wasm模塊。結合以上兩個特點,本文選取“Cryptonight、SHA256、hash、wasmwrapper、WebAssembly、scrypt”這6 個關鍵字用以匹配函數名稱來標識有無出現上述特點的函數。
(8)動態函數:動態執行函數及生成函數的存在,使得攻擊者可以把想要隱藏的代碼經過處理后隱藏在一個或多個字符串中[2],在運行期間又可恢復原狀并執行,進而規避一些檢測手段。因此對于該方式下的檢測也尤為重要,本文通過統計setTimeout()、setInterval()[8]函數的個數來識別挖礦網站。
可以將本文所提取的特征按照性能簡單分為兩類:Web 技術類和靜態代碼類。本文提取到的特征如表2所示。

表2 瀏覽器挖礦特征Table 2 Mining features of browser
實驗的目的是用來驗證本文選取的特征對于識別惡意挖礦網站是否有效,選出檢測效果最優的模型以及對于檢測惡意挖礦網站具有標識性的特征。
本文通過Outguard的爬蟲框架[5],以chrome瀏覽器插件的方法爬取URL 的相關特征數據,并采取了部分Outguard已標注好的惡意網站數據。本文爬取的數據,其中惡意挖礦網站來自PublicWWW 和Netlab360 公開的惡意挖礦名單(其中剔除了一些無效網站),良性網站則隨機選擇在Alexa排名在前的網頁(其中選取了一些特征值具有特殊性的網站)。
實驗使用四種分類算法,分別是邏輯回歸算法、支持向量機算法、決策樹算法和隨機森林算法[13-14],模型訓練時均使用五折交叉驗證。主要使用混淆矩陣、F1 度量、ROC曲線作為評估指標。
混淆矩陣:對于二分類問題能夠最為直觀地展示出分類結果[14],矩陣組成如圖4所示。

圖4 混淆矩陣Fig.4 Confusion matrix
F1度量:精準率和召回率的調和平均值,是一種比精度更好的評價指標,其公式如下:

ROC 曲線:受試者工作特征曲線,簡稱為ROC 曲線,它通過分類器給定不同的閾值來顯示假正例率和真正例率的曲線圖。假正例率公式如下:

其中正確檢測出含有挖礦腳本的網頁為真正例(TP),錯誤地認為正常網頁含有挖礦腳本的為假正例(FP),正確地檢測出是正常網頁的為真反例(TN),沒有正確檢測出含有挖礦腳本的網頁為假反例(FN)。
實驗1 進行四種檢測模型訓練,并將各模型評價指標數據進行對比找出最佳結果模型。該實驗得出的結果如表3及圖5所示。

圖5 四種模型的ROC曲線圖及混淆矩陣Fig.5 ROC curve and confusion matrix of four models

表3 四種模型的F1度量值Table 3 F1 measures of four models
通過直觀對比可以看出,隨機森林得到的結果最佳,F1指標高達0.989且在混淆矩陣中錯分分類個數最小。即隨機森林在該環境下最適宜于網頁挖礦檢測。
實驗2 通過篩選特定組合后的特征數據集用以訓練模型,比較篩選前評價指標的變化差值,找出對瀏覽器挖礦具有較高識別性的特征組合。
首先按照2.2節特征提取中劃分的兩類進行篩選組合,得出結果如表4及圖6、圖7所示。

圖7 去除靜態代碼特征后的模型比較Fig.7 Models after removing static code features

表4 按類去除特征后四種模型的F1度量值Table 4 F1 measures of four models after feature removal by class

圖6 去除Web技術特征后的模型比較Fig.6 Models after removing technical features of Web
結合上述數據可以直觀地看到:去除靜態代碼特征后的模型評價結果無較大差別,其中隨機森林算法模型結果有所提高,但其他三種模型結果均有所下降。去除Web技術特征后,四種模型評估指標均較大下降且數據結果無差別。在混淆矩陣中可以看到四種模型均錯誤地識別83個數據為良性網站,經手動查看后,該83個數據點均無靜態代碼特征所標識值,因此被錯誤地識別為良性網站。以上可以得出Web 技術特征對惡意挖礦網站的識別更具重要性。
下面將通過去除Web 技術特征類中的特征或特征組合,來找出對惡意挖礦識別最具標識性的特征。通過去除單個特征后,ROC曲線的波動的比較,挑選出對模型影響較大的特征,使用邏輯回歸、支持向量機、決策樹和隨機森林四種模型計算F1值,如表5所示。

表5 篩選特征組合后四種模型F1度量值Table 5 F1 measures of four models after screening feature combination
綜合每個模型混淆矩陣錯誤分類個數、F1 值相較全特征數據集之間的差值、ROC曲線的波動,可以看出Websocket、Web Worker 及Postmessage 及onmessage 事件對模型的影響較大,采用將三者剔除后的數據集進行模型訓練,得到如表6 及圖8 所示數據。較之前所有結果,去除后的F1度量值浮動最大,且混淆矩陣錯誤分類數據個數最多,因此可以得出結論:Websocket、Web Worker和Postmessage 及onmessage 事件這三個特征結合后對識別惡意挖礦網站具有最高標識性。

圖8 去除三種特征后ROC曲線圖及混淆矩陣Fig.8 ROC curve and confusion matrix after removing three features

表6 去除三種特征后F1度量值Table 6 F1 measures after removing three features
本文架構主要基于比特幣系統及惡意攻擊手段。首先對虛擬貨幣系統支撐技術和惡意挖礦攻擊手段進行簡單描述。然后綜合國內外現有的惡意挖礦檢測技術,融合八個特征進行模型訓練,完成了惡意挖礦檢測模型的設計。本文主要研究成果如下:實現了一種平均F1度量值為98.7%的瀏覽器挖礦檢測模型,并綜合評價得出Websocket、Web Worker 和Postmessage 及onmessage事件這三個特征的結合對惡意挖礦檢測具有高標識性。
本文在研究過程中主要遇到的問題在于特征的選取。在國內外的相關研究中大量的惡意挖礦檢測特征被提出,如何在此基礎上選取出更優的特征組合或者提出新的特征成為本文的最大難題。同時本文使用監督學習方式用以訓練檢測模型,但這種方式過于依賴特征的選擇及分類器的選擇[15]。一旦攻擊者使用某種方式避免或隱藏了該特征,就很容易規避檢測,從而造成他人權益損失。在未來工作中,將會著重于對瀏覽器挖礦特征選出更具有高效性的新特征及使用深度學習算法對模型進行優化。