王 迪,鄒福泰,吳 越
(上海交通大學,上海 200240)
隨著網絡的迅猛發展和計算機性能的不斷提升,大數據如今被應用在各行各業中,用以提升運作效率和精確畫像。在這個數據爆炸的時代,網絡入侵技術不斷迭代更新。2020 年2 月,美國國土安全部的網絡安全和基礎設施安全局發布公告,一家未公開名字的天然氣管道運營商,在遭到勒索軟件攻擊后關閉壓縮設施達兩天之久。攻擊事件發生的具體時間未獲公布。據悉,攻擊始于釣魚軟件內的惡意鏈接,攻擊者從IT 網絡滲透到作業OT 網絡并植入勒索軟件。在關閉壓縮設施期間,由于管道傳輸的依賴性,連帶影響到了其他地方的壓縮設施。2020 年4 月,葡萄牙跨國能源公司EDP(Energies de Portugal)遭到勒索軟件攻擊。攻擊者聲稱,已獲取EDP 公司10 TB 的敏感數據文件,且索要了1580 的比特幣贖金(折合約1090 萬美元)。
如何在海量的流量數據里捕獲到惡意的網絡攻擊是當前的一個難題。最近十幾年機器學習和深度學習被廣泛應用于網絡攻擊檢測,但是它們使用的數據集一般過于陳舊,不能反映當前網絡的流量情況。此外,這種檢測方式很難對海量數據集進行標定,只能在小范圍流量內進行訓練測試。基于此背景,本文實現了一種半監督的基于關聯知識圖和Spark 計算引擎的網絡攻擊檢測技術,在不需全部標定海量數據的同時,通過聚類算法快速縮小檢測范圍,并通過污點傳播Malrank 算法發現可疑節點,進而實現攻擊路徑的可視化。
本文組織結構如下:第1 章介紹了網絡攻擊檢測技術的相關研究;第2 章分析了具體關聯知識圖的構建;第3 章介紹了聚類算法和污點傳播算法的應用;第4 章從仿真實驗的角度驗證了整體設計的合理性;第5 章總結全文。
近年來,隨著機器學習的發展,越來越多的相關技術被應用到網絡攻擊檢測上[1]。
機器學習應用到網絡攻擊檢測的技術主要有貝葉斯網絡、聚類算法、決策樹以及支持向量機(Support Vector Machines,SVM) 等。Jemili 等人提出了使用貝葉斯網絡分類器的IDS 框架。這項工作在訓練網絡中使用了KDD 1999數據的9個特征。在異常檢測階段,正常或攻擊判斷由聯結樹推理模塊做出,并分別在正常和攻擊類別上達到88%和89%的正確率。在下一階段,異常檢測模塊從標記為攻擊數據的數據中識別出攻擊類型。DoS、探測或掃描、R2L、U2R 和其他類別識別正確的概率分別為89%、99%、21%、7%和66%。其中,R2L 和U2R 類別的性能不佳是因為訓練實例的數量比其他類別少得多。
基于機器學習的網絡攻擊檢測存在以下缺陷[3]。
(1)依賴于公開數據集的數據標定。目前研究主要使用的數據集仍然是1999 年的KDD 或是DRAPA1998,其數據不能夠很好地反映如今的流量特征,且當前也不可能做到在大數據環境下進行全部標定。
(2)不同數據集一般抽取出的攻擊特征不同,因此基于一個數據集訓練出來的模型很難被應用在別的地方。
隨著大數據的發展,為了計算海量的數據,獲取更高的處理速度,SPARK 等大數據工具開始被應用在學術和工業領域。針對海量流量無法被全部標定獲取測試樣本集,近幾年關聯圖技術結合大數據技術被應用在相關領域上。
Milajerdi 等人[4]利用圖技術結合系統日志,實現了一種檢測高級持續攻擊(Advanced Persistent Threat,APT)的系統HOLMES。HOLMES 的目標是產生一個檢測信號,表明存在著一系列的APT 階段性活動。在總結抽象階段,HOLMES 有效利用了攻擊發生期間產生的可疑信息流之間的相關性。除了具有檢測功能外,HOLMES 還能夠生成高級圖表,實時總結攻擊者的行動。分析人員可以使用此圖進行有效的分析檢測。Phyu 等人[5]把關聯圖應用在社交網絡的情感分析上,取得了良好效果。關聯圖技術首先被用來抽取Tweet 記錄。以用戶為點,Tweet中各種互動為關系構圖。然后,以這張圖為基礎,將邊上所帶的Tweet 信息進行語義解析,分析所含情感。最后,通過情感分類器將整個社交網絡圖分成志趣相投的情感社區。
本文通過收集網關流量信息并處理來構建以流量中實體為節點、實體相關性為邊的關聯知識圖[6]。
針對含有疑似攻擊流量的Pcap 文件,為了獲得構建關聯圖所需要的信息,使用Bro 框架[7]對Pcap 文件進行處理。
Bro 框架是一款開源的流量分析器,主要分為兩個概念層。一是網絡事件層(event engine),將原始的網絡流量簡化為高層的網絡事件,如TCP 連接(TCP Connection)和UDP 數據流(UDP Flow)等;二是腳本解釋器(policy scrIPt interpreter),用于解析和運行用戶編寫、實現定制化監測方案的Bro腳本。
本文使用Bro 的日志抽取合文件還原功能。在對Pcap 包進行離線分析后,抽取其相關流量特征生成日志文件,如表1 所示。

表1 Bro 日志文件
在得到反映流量特征的日志文件后,基于Spark 大數據工具[8]抽取其中關鍵信息構建關聯知識圖G=(V,E)。其中,V∈{IP,Domain,File}。如果兩個節點有一定的相關關系,則兩節點間存在一邊。每條邊通過處理最終得到一個權重W(W∈[0,1]),代表節點間的相關性。W越大,代表節點間關系越緊密。
節點間的關系根據日志間的相互聯系[9]分為直接關系和間接關系。
2.2.1 直接關系的構建
直接關系為對日志每行進行處理得到的實體之間的關系,如通過Conn.log 中的TCP 連接可以知道兩個IP 之間存在直接相連關系。
不同類型的邊本質上代表了不同相關性的關系,因此在初始階段對不同類型的邊賦予不同的初始權重代表它們的相關性。例如,Dns.log 中域名Domain與對應的解析IP之間的關系應該是強相關,因為訪問該域名其實就是訪問該IP。但與之不同的是,Dns.log 中域名Domain 對應請求解析該域名的IP 之間是訪問的關系,可能存在偶然性,初始相關權重較小,因此針對幾種初始相關權重較小的邊種類,需要根據日志信息繼續處理,即對任意兩個節點之間的連接次數進行計數,記為c,每次該邊對應的兩個節點再次相連時c=c+1,最后將c用tanh函數歸一化并賦值給權重。同時,為了減小c的影響,tanh 函數添加冪次0.03,即:

式中,W為權重。通過tanh 函數將c映射到[0,1]區間,以增大c比較小時對權重的影響和減小c比較大時對權重的影響。
2.2.2 間接關系構建
域名節點之間,文件節點之間按照日志每行記錄沒有直接關系存在,但是它們之間可能根據相似性存在潛在的間接關系,如惡意文件同屬于一個家族。
針對域名間的相似性,本文使用Jaccard 相似度算法[10]。Jaccard 相似度常用于比較有限樣本集之間的相似性與差異性。Jaccard 系數值越大,樣本相似度越高。Jaccard 相似度算法認為,如果域名屬于相同惡意家族,則存在大量相同的主機訪問它們。訪問主機具有較高重合度,重合度越高,域名屬于相同團伙的概率越大。本研究通過計算兩個域名之間的Jaccard 值,隨后與預先設定的閾值s比較,若大于閾值s,即:

則認為Domain1和Domain2之間具有間接關系,可在此兩個域名節點之間建立關聯邊。
針對文件間的相似性,如果從文本角度分析,直接采用simhash 的方法過于簡單。因此,本研究使用IDA+BinDiff 插件[11]對文件從函數層面上進行相似性分析,判斷是否存在間接關系。
最終,整個關聯知識圖實體種類和相互關系如圖1 所示。
在通過構圖獲得關聯知識圖后,需要基于此圖進行攻擊檢測,發現潛在的惡意節點和攻擊路徑。本研究先通過社區算法,利用節點間的相關性縮小后續惡意檢測的范圍,然后使用基于半監督的污點傳播算法發現更多的惡意節點或受害節點。

圖1 關聯知識圖實體及相互關系
社區算法主要有Louvain、GN 以及圖卷積算法等[12]。因為Louvain 算法在速度方面有獨特的優勢,適合大數據分析且適合本研究通過邊權值構成社區的情景,所以這里采用Louvain 算法作為社區算法。
Louvain 使用模塊度Q代表是-1 和1 之間的標量值,表示社區內部鏈接相對于社區之間鏈接的密度[13]。模塊度Q被定義為:

式中,Aij表示節點i和節點j所連邊的權重,ki表示與節點i相連的所有邊的權重和,m表示圖中所有邊的權重和,ci表示節點i所在的分區。
Louvain 算法步驟如圖2 所示。
(1)通過使模塊度Q最大,判斷所有節點的最佳社區選擇。
(2)將步驟(1)中的社區合并為一個超點,再次計算合并。

圖2 Louvain 算法步驟
Malrank 算法是一種基于有向圖的半監督靜態污點傳播算法[3],根據節點與知識圖中其他實體的關聯,通過對初始邊權重和初始惡意值的不斷迭代來推斷節點的真實惡意值。
根據Malrank 算法,假設節點x的惡意值為S(x),則S(x)第i+1 次的迭代可由式(7)計算得出:

式中,S0(x) ∈[0,1] 表示節點x的初始惡意度。一般情況下,如果已知x為惡意節點,則令S0(x)=1,否則S0(x)=0.5。∈[0,1]表示S0(x)的初始可信度,N(x)表示節點x的鄰居節點構成的集合,Wxy代表節點x對節點y的影響權重。
在得到迭代通式后,Malrank 算法需要通過迭代完成相關權重和節點惡意值的重新計算,得到潛在的惡意節點。權重迭代的公式為[14]:

式中,k是限制初始相關權重對迭代時權重影響的因子。
為了驗證關聯知識圖結合攻擊檢測的效果,本研究在真實校園網環境中搭建了攻擊環境,并模擬常見攻擊的同時混雜正常流量,得到了約1 GB 真實流量。
本研究搭建攻擊場景具體如圖3 所示。
(1)Web 攻擊。如攻擊場景1,攻擊方主機向受害主機發動SQL 注入攻擊。
(2)Brute SSH+僵尸網絡攻擊+DDoS 攻擊。如攻擊場景2 和攻擊場景3,攻擊方(C&C 服務器)首先通過暴力破解SSH 的手段登錄到受害主機內部,其次通過橫向移動入侵內部別的虛擬機,最后控制這幾臺受控制的虛擬機向別的外網IP 發動DDoS 攻擊。
得到日志后,通過聚類算法發現構建的關聯知識圖涉及3 個攻擊場景部分的節點分成了3 個子圖,如圖3 所示。以場景2 為例,在半監督的場景下,令bot 程序分發服務器和攻擊筆記本為已知初始惡意節點,通過Malrank 算法得到的包含攻擊場景2的子圖中可以找到潛在的惡意僵尸肉雞節點、惡意文件節點和受到DDoS 攻擊的惡意節點。整個子圖節點的惡意值分布如表2 所示。

圖3 攻擊場景架構

表2 攻擊場景2 節點惡意性分布
如表3 所示,除了檢測效果優秀,基于Saprk的計算引擎和社區算法的縮小了范圍,大大加快了整個檢測過程的速度。

表3 檢測速度對比
本文主要研究了基于關聯知識圖的網絡攻擊檢測方法,探討并借鑒了國內外研究中常用的圖技術檢測方法。首先考慮到流量內各個實體的相關性,構建合適的關聯知識圖;其次,通過社區算法發現包含已知惡意節點的社區,縮小后續處理節點范圍;最后,探討并改進國外先進Malrank 污點傳播技術,完成攻擊檢測。經過在校園網環境下的實驗證明,該研究在做到快速處理的同時,檢測到了隱藏的肉雞主機和受害節點,并完成了攻擊路徑的可視化。
半監督的關聯知識圖結合污點傳播算法具有很好的檢測效果,也能輔助后續進一步的攻擊分析,但是還需要在真實環境中進一步驗證和改善。此外,基于構建的關聯惡意子圖的特征進行攻擊的分類也是值得未來繼續研究的一個方向。