王 迪,鄒福泰,吳 越
(上海交通大學,上海 200240)
隨著網(wǎng)絡(luò)的迅猛發(fā)展和計算機性能的不斷提升,大數(shù)據(jù)如今被應(yīng)用在各行各業(yè)中,用以提升運作效率和精確畫像。在這個數(shù)據(jù)爆炸的時代,網(wǎng)絡(luò)入侵技術(shù)不斷迭代更新。2020 年2 月,美國國土安全部的網(wǎng)絡(luò)安全和基礎(chǔ)設(shè)施安全局發(fā)布公告,一家未公開名字的天然氣管道運營商,在遭到勒索軟件攻擊后關(guān)閉壓縮設(shè)施達兩天之久。攻擊事件發(fā)生的具體時間未獲公布。據(jù)悉,攻擊始于釣魚軟件內(nèi)的惡意鏈接,攻擊者從IT 網(wǎng)絡(luò)滲透到作業(yè)OT 網(wǎng)絡(luò)并植入勒索軟件。在關(guān)閉壓縮設(shè)施期間,由于管道傳輸?shù)囊蕾囆?,連帶影響到了其他地方的壓縮設(shè)施。2020 年4 月,葡萄牙跨國能源公司EDP(Energies de Portugal)遭到勒索軟件攻擊。攻擊者聲稱,已獲取EDP 公司10 TB 的敏感數(shù)據(jù)文件,且索要了1580 的比特幣贖金(折合約1090 萬美元)。
如何在海量的流量數(shù)據(jù)里捕獲到惡意的網(wǎng)絡(luò)攻擊是當前的一個難題。最近十幾年機器學習和深度學習被廣泛應(yīng)用于網(wǎng)絡(luò)攻擊檢測,但是它們使用的數(shù)據(jù)集一般過于陳舊,不能反映當前網(wǎng)絡(luò)的流量情況。此外,這種檢測方式很難對海量數(shù)據(jù)集進行標定,只能在小范圍流量內(nèi)進行訓練測試?;诖吮尘?,本文實現(xiàn)了一種半監(jiān)督的基于關(guān)聯(lián)知識圖和Spark 計算引擎的網(wǎng)絡(luò)攻擊檢測技術(shù),在不需全部標定海量數(shù)據(jù)的同時,通過聚類算法快速縮小檢測范圍,并通過污點傳播Malrank 算法發(fā)現(xiàn)可疑節(jié)點,進而實現(xiàn)攻擊路徑的可視化。
本文組織結(jié)構(gòu)如下:第1 章介紹了網(wǎng)絡(luò)攻擊檢測技術(shù)的相關(guān)研究;第2 章分析了具體關(guān)聯(lián)知識圖的構(gòu)建;第3 章介紹了聚類算法和污點傳播算法的應(yīng)用;第4 章從仿真實驗的角度驗證了整體設(shè)計的合理性;第5 章總結(jié)全文。
近年來,隨著機器學習的發(fā)展,越來越多的相關(guān)技術(shù)被應(yīng)用到網(wǎng)絡(luò)攻擊檢測上[1]。
機器學習應(yīng)用到網(wǎng)絡(luò)攻擊檢測的技術(shù)主要有貝葉斯網(wǎng)絡(luò)、聚類算法、決策樹以及支持向量機(Support Vector Machines,SVM) 等。Jemili 等人提出了使用貝葉斯網(wǎng)絡(luò)分類器的IDS 框架。這項工作在訓練網(wǎng)絡(luò)中使用了KDD 1999數(shù)據(jù)的9個特征。在異常檢測階段,正?;蚬襞袛嘤陕?lián)結(jié)樹推理模塊做出,并分別在正常和攻擊類別上達到88%和89%的正確率。在下一階段,異常檢測模塊從標記為攻擊數(shù)據(jù)的數(shù)據(jù)中識別出攻擊類型。DoS、探測或掃描、R2L、U2R 和其他類別識別正確的概率分別為89%、99%、21%、7%和66%。其中,R2L 和U2R 類別的性能不佳是因為訓練實例的數(shù)量比其他類別少得多。
基于機器學習的網(wǎng)絡(luò)攻擊檢測存在以下缺陷[3]。
(1)依賴于公開數(shù)據(jù)集的數(shù)據(jù)標定。目前研究主要使用的數(shù)據(jù)集仍然是1999 年的KDD 或是DRAPA1998,其數(shù)據(jù)不能夠很好地反映如今的流量特征,且當前也不可能做到在大數(shù)據(jù)環(huán)境下進行全部標定。
(2)不同數(shù)據(jù)集一般抽取出的攻擊特征不同,因此基于一個數(shù)據(jù)集訓練出來的模型很難被應(yīng)用在別的地方。
隨著大數(shù)據(jù)的發(fā)展,為了計算海量的數(shù)據(jù),獲取更高的處理速度,SPARK 等大數(shù)據(jù)工具開始被應(yīng)用在學術(shù)和工業(yè)領(lǐng)域。針對海量流量無法被全部標定獲取測試樣本集,近幾年關(guān)聯(lián)圖技術(shù)結(jié)合大數(shù)據(jù)技術(shù)被應(yīng)用在相關(guān)領(lǐng)域上。
Milajerdi 等人[4]利用圖技術(shù)結(jié)合系統(tǒng)日志,實現(xiàn)了一種檢測高級持續(xù)攻擊(Advanced Persistent Threat,APT)的系統(tǒng)HOLMES。HOLMES 的目標是產(chǎn)生一個檢測信號,表明存在著一系列的APT 階段性活動。在總結(jié)抽象階段,HOLMES 有效利用了攻擊發(fā)生期間產(chǎn)生的可疑信息流之間的相關(guān)性。除了具有檢測功能外,HOLMES 還能夠生成高級圖表,實時總結(jié)攻擊者的行動。分析人員可以使用此圖進行有效的分析檢測。Phyu 等人[5]把關(guān)聯(lián)圖應(yīng)用在社交網(wǎng)絡(luò)的情感分析上,取得了良好效果。關(guān)聯(lián)圖技術(shù)首先被用來抽取Tweet 記錄。以用戶為點,Tweet中各種互動為關(guān)系構(gòu)圖。然后,以這張圖為基礎(chǔ),將邊上所帶的Tweet 信息進行語義解析,分析所含情感。最后,通過情感分類器將整個社交網(wǎng)絡(luò)圖分成志趣相投的情感社區(qū)。
本文通過收集網(wǎng)關(guān)流量信息并處理來構(gòu)建以流量中實體為節(jié)點、實體相關(guān)性為邊的關(guān)聯(lián)知識圖[6]。
針對含有疑似攻擊流量的Pcap 文件,為了獲得構(gòu)建關(guān)聯(lián)圖所需要的信息,使用Bro 框架[7]對Pcap 文件進行處理。
Bro 框架是一款開源的流量分析器,主要分為兩個概念層。一是網(wǎng)絡(luò)事件層(event engine),將原始的網(wǎng)絡(luò)流量簡化為高層的網(wǎng)絡(luò)事件,如TCP 連接(TCP Connection)和UDP 數(shù)據(jù)流(UDP Flow)等;二是腳本解釋器(policy scrIPt interpreter),用于解析和運行用戶編寫、實現(xiàn)定制化監(jiān)測方案的Bro腳本。
本文使用Bro 的日志抽取合文件還原功能。在對Pcap 包進行離線分析后,抽取其相關(guān)流量特征生成日志文件,如表1 所示。
表1 Bro 日志文件
在得到反映流量特征的日志文件后,基于Spark 大數(shù)據(jù)工具[8]抽取其中關(guān)鍵信息構(gòu)建關(guān)聯(lián)知識圖G=(V,E)。其中,V∈{IP,Domain,File}。如果兩個節(jié)點有一定的相關(guān)關(guān)系,則兩節(jié)點間存在一邊。每條邊通過處理最終得到一個權(quán)重W(W∈[0,1]),代表節(jié)點間的相關(guān)性。W越大,代表節(jié)點間關(guān)系越緊密。
節(jié)點間的關(guān)系根據(jù)日志間的相互聯(lián)系[9]分為直接關(guān)系和間接關(guān)系。
2.2.1 直接關(guān)系的構(gòu)建
直接關(guān)系為對日志每行進行處理得到的實體之間的關(guān)系,如通過Conn.log 中的TCP 連接可以知道兩個IP 之間存在直接相連關(guān)系。
不同類型的邊本質(zhì)上代表了不同相關(guān)性的關(guān)系,因此在初始階段對不同類型的邊賦予不同的初始權(quán)重代表它們的相關(guān)性。例如,Dns.log 中域名Domain與對應(yīng)的解析IP之間的關(guān)系應(yīng)該是強相關(guān),因為訪問該域名其實就是訪問該IP。但與之不同的是,Dns.log 中域名Domain 對應(yīng)請求解析該域名的IP 之間是訪問的關(guān)系,可能存在偶然性,初始相關(guān)權(quán)重較小,因此針對幾種初始相關(guān)權(quán)重較小的邊種類,需要根據(jù)日志信息繼續(xù)處理,即對任意兩個節(jié)點之間的連接次數(shù)進行計數(shù),記為c,每次該邊對應(yīng)的兩個節(jié)點再次相連時c=c+1,最后將c用tanh函數(shù)歸一化并賦值給權(quán)重。同時,為了減小c的影響,tanh 函數(shù)添加冪次0.03,即:
式中,W為權(quán)重。通過tanh 函數(shù)將c映射到[0,1]區(qū)間,以增大c比較小時對權(quán)重的影響和減小c比較大時對權(quán)重的影響。
2.2.2 間接關(guān)系構(gòu)建
域名節(jié)點之間,文件節(jié)點之間按照日志每行記錄沒有直接關(guān)系存在,但是它們之間可能根據(jù)相似性存在潛在的間接關(guān)系,如惡意文件同屬于一個家族。
針對域名間的相似性,本文使用Jaccard 相似度算法[10]。Jaccard 相似度常用于比較有限樣本集之間的相似性與差異性。Jaccard 系數(shù)值越大,樣本相似度越高。Jaccard 相似度算法認為,如果域名屬于相同惡意家族,則存在大量相同的主機訪問它們。訪問主機具有較高重合度,重合度越高,域名屬于相同團伙的概率越大。本研究通過計算兩個域名之間的Jaccard 值,隨后與預先設(shè)定的閾值s比較,若大于閾值s,即:
則認為Domain1和Domain2之間具有間接關(guān)系,可在此兩個域名節(jié)點之間建立關(guān)聯(lián)邊。
針對文件間的相似性,如果從文本角度分析,直接采用simhash 的方法過于簡單。因此,本研究使用IDA+BinDiff 插件[11]對文件從函數(shù)層面上進行相似性分析,判斷是否存在間接關(guān)系。
最終,整個關(guān)聯(lián)知識圖實體種類和相互關(guān)系如圖1 所示。
在通過構(gòu)圖獲得關(guān)聯(lián)知識圖后,需要基于此圖進行攻擊檢測,發(fā)現(xiàn)潛在的惡意節(jié)點和攻擊路徑。本研究先通過社區(qū)算法,利用節(jié)點間的相關(guān)性縮小后續(xù)惡意檢測的范圍,然后使用基于半監(jiān)督的污點傳播算法發(fā)現(xiàn)更多的惡意節(jié)點或受害節(jié)點。
圖1 關(guān)聯(lián)知識圖實體及相互關(guān)系
社區(qū)算法主要有Louvain、GN 以及圖卷積算法等[12]。因為Louvain 算法在速度方面有獨特的優(yōu)勢,適合大數(shù)據(jù)分析且適合本研究通過邊權(quán)值構(gòu)成社區(qū)的情景,所以這里采用Louvain 算法作為社區(qū)算法。
Louvain 使用模塊度Q代表是-1 和1 之間的標量值,表示社區(qū)內(nèi)部鏈接相對于社區(qū)之間鏈接的密度[13]。模塊度Q被定義為:
式中,Aij表示節(jié)點i和節(jié)點j所連邊的權(quán)重,ki表示與節(jié)點i相連的所有邊的權(quán)重和,m表示圖中所有邊的權(quán)重和,ci表示節(jié)點i所在的分區(qū)。
Louvain 算法步驟如圖2 所示。
(1)通過使模塊度Q最大,判斷所有節(jié)點的最佳社區(qū)選擇。
(2)將步驟(1)中的社區(qū)合并為一個超點,再次計算合并。
圖2 Louvain 算法步驟
Malrank 算法是一種基于有向圖的半監(jiān)督靜態(tài)污點傳播算法[3],根據(jù)節(jié)點與知識圖中其他實體的關(guān)聯(lián),通過對初始邊權(quán)重和初始惡意值的不斷迭代來推斷節(jié)點的真實惡意值。
根據(jù)Malrank 算法,假設(shè)節(jié)點x的惡意值為S(x),則S(x)第i+1 次的迭代可由式(7)計算得出:
式中,S0(x) ∈[0,1] 表示節(jié)點x的初始惡意度。一般情況下,如果已知x為惡意節(jié)點,則令S0(x)=1,否則S0(x)=0.5。∈[0,1]表示S0(x)的初始可信度,N(x)表示節(jié)點x的鄰居節(jié)點構(gòu)成的集合,Wxy代表節(jié)點x對節(jié)點y的影響權(quán)重。
在得到迭代通式后,Malrank 算法需要通過迭代完成相關(guān)權(quán)重和節(jié)點惡意值的重新計算,得到潛在的惡意節(jié)點。權(quán)重迭代的公式為[14]:
式中,k是限制初始相關(guān)權(quán)重對迭代時權(quán)重影響的因子。
為了驗證關(guān)聯(lián)知識圖結(jié)合攻擊檢測的效果,本研究在真實校園網(wǎng)環(huán)境中搭建了攻擊環(huán)境,并模擬常見攻擊的同時混雜正常流量,得到了約1 GB 真實流量。
本研究搭建攻擊場景具體如圖3 所示。
(1)Web 攻擊。如攻擊場景1,攻擊方主機向受害主機發(fā)動SQL 注入攻擊。
(2)Brute SSH+僵尸網(wǎng)絡(luò)攻擊+DDoS 攻擊。如攻擊場景2 和攻擊場景3,攻擊方(C&C 服務(wù)器)首先通過暴力破解SSH 的手段登錄到受害主機內(nèi)部,其次通過橫向移動入侵內(nèi)部別的虛擬機,最后控制這幾臺受控制的虛擬機向別的外網(wǎng)IP 發(fā)動DDoS 攻擊。
得到日志后,通過聚類算法發(fā)現(xiàn)構(gòu)建的關(guān)聯(lián)知識圖涉及3 個攻擊場景部分的節(jié)點分成了3 個子圖,如圖3 所示。以場景2 為例,在半監(jiān)督的場景下,令bot 程序分發(fā)服務(wù)器和攻擊筆記本為已知初始惡意節(jié)點,通過Malrank 算法得到的包含攻擊場景2的子圖中可以找到潛在的惡意僵尸肉雞節(jié)點、惡意文件節(jié)點和受到DDoS 攻擊的惡意節(jié)點。整個子圖節(jié)點的惡意值分布如表2 所示。
圖3 攻擊場景架構(gòu)
表2 攻擊場景2 節(jié)點惡意性分布
如表3 所示,除了檢測效果優(yōu)秀,基于Saprk的計算引擎和社區(qū)算法的縮小了范圍,大大加快了整個檢測過程的速度。
表3 檢測速度對比
本文主要研究了基于關(guān)聯(lián)知識圖的網(wǎng)絡(luò)攻擊檢測方法,探討并借鑒了國內(nèi)外研究中常用的圖技術(shù)檢測方法。首先考慮到流量內(nèi)各個實體的相關(guān)性,構(gòu)建合適的關(guān)聯(lián)知識圖;其次,通過社區(qū)算法發(fā)現(xiàn)包含已知惡意節(jié)點的社區(qū),縮小后續(xù)處理節(jié)點范圍;最后,探討并改進國外先進Malrank 污點傳播技術(shù),完成攻擊檢測。經(jīng)過在校園網(wǎng)環(huán)境下的實驗證明,該研究在做到快速處理的同時,檢測到了隱藏的肉雞主機和受害節(jié)點,并完成了攻擊路徑的可視化。
半監(jiān)督的關(guān)聯(lián)知識圖結(jié)合污點傳播算法具有很好的檢測效果,也能輔助后續(xù)進一步的攻擊分析,但是還需要在真實環(huán)境中進一步驗證和改善。此外,基于構(gòu)建的關(guān)聯(lián)惡意子圖的特征進行攻擊的分類也是值得未來繼續(xù)研究的一個方向。