付博揚 嚴寒冰,2
1(北京航空航天大學計算機學院 北京 100191)
2(國家計算機網絡應急技術處理協調中心 北京 100094)
從1993年首次出現bot的概念,到1999年第1個真正意義的惡意控制程序代碼(bot程序)出現,僵尸網絡已有近30年的歷史.僵尸網絡的最大特點是可以通過控制多臺設備實現大規模攻擊行為,其中最具代表性的是分布式拒絕服務(DDoS)攻擊.穩定的僵尸網絡被控設備由于在線時間長、帶寬穩定、控制簡單、對攻擊者隱蔽性好等特性,成為攻擊者構建攻擊跳板的首選.
近年來信息化快速發展,互聯網設備深入滲透到生活中.據Statista網站的調查[1]顯示,截至2018年,中國已建立了近33億個連接的龐大網絡,預計到2025年該數字將達到接近160億,這也導致僵尸網絡中被控設備數量大幅度增長,網絡上大規模攻擊越發猖獗.據安全公司Imperva的調查[2]顯示,在2019年的一起針對在線流媒體應用的大規模僵尸網絡攻擊中,短短13天內受控設備數量高達40多萬臺.
僵尸網絡是一組被惡意軟件攻擊并控制的連接在互聯網上的主機,用于執行一系列惡意活動.通常僵尸網絡結構如圖1所示,由1個主機(botmaster),1個或多個命令與控制(command&control,C&C)服務器以及大量受感染的機器人(bot)組成.主機常常隱藏在網絡中,通過C&C服務器發布指令,機器人定期向給定域名或通過算法生成的C&C服務器發送心跳包并接受指令,如發動DDoS攻擊等.
僵尸網絡的主機通常盡可能使用少量流量與C&C服務器通信,且不與僵尸網絡中的機器人直接連接,因此在網絡中常常處于隱匿狀態.這就導致僅通過對網絡上的單個節點流量進行檢測以發現異常,從而檢測僵尸網絡行為是不可行的,關閉流量異常節點的處置方法難以對整個僵尸網絡造成打擊.對于防守者而言,如何發現攻擊者使用的可疑的僵尸跳板網絡成為建立有效防御手段的重要步驟.
本文提出僵尸網絡多級控制關系可視化分析系統.該系統可以基于流數據,判定僵尸網絡中哪些節點是多級控制網絡中的非頂層節點,從而發現網絡設備之間的多級控制關系,定位可能處于跳板位置的C&C服務器節點,為后續溯源分析并發現隱藏的主機節點提供幫助.
僵尸網絡的出現已有近30年的歷史,已經發展出多種完善的檢測思路,主要分類如圖2所示.bot分析類[3]的主要思路是利用蜜罐捕獲僵尸網絡,從靜態代碼層面或模擬環境運行層面分析僵尸網絡的特征和行為模式.IDS類[4]根據數據獲取方法檢測僵尸網絡.通過主動發送請求獲得設備響應,從而查找在特定主機上運行的可疑程序和腳本的稱為主動類;通過設備獲取或嗅探獲得數據,通過基于規則或異常的方法檢測僵尸網絡行為的稱為被動類.框架設計類[5]主要針對經過加密等而難以有效檢測的僵尸網絡.這類方法利用各類數據挖掘方法,包括機器學習、統計學和數據庫系統等檢測僵尸網絡行為,源數據大部分是現有數據集[6];也有部分研究者通過設置多臺設備搭建內部網絡,在該網絡中的設備上運行開源僵尸網絡代碼捕獲各個設備的流量,從而得到較完整的僵尸網絡流量數據[7].
隨著網絡設備的快速發展,僵尸網絡也在不斷發展和變化.Mirai是一種廣泛傳播的代表性僵尸網絡家族,自從于2016年由一個惡意軟件研究小組首次披露以來,已被多次用于世界上的危險和大規模的DDoS攻擊,包括2016年9月和10月的OVH攻擊和Dyn攻擊.目前Mirai的大量變體仍然是最活躍的家族之一,其他如Gafgyt,Mozi等家族也在不斷向著更復雜、更隱蔽的方向進化.
Abbas等人[3]對Mirai家族和Qbot家族的17個僵尸網絡變種進行了靜態代碼分析,挖掘出攻擊者的視角、一般行為、使用技術和實現技術等.Shao等人[8]使用2種不同的配置探索自適應學習策略在僵尸網絡檢測中的有效性,使用真實抓取的網絡數據驗證所提出的自適應在線學習策略的性能.Panda等人[9]使用3種機器學習方法驗證了所設計的特征子集選擇方法以及僵尸網絡檢測系統的有效性.
為模擬僵尸網絡中主機之間的連通性以及僵尸網絡拓撲結構,基于圖的方法被用于建立網絡模型,這類方法通常使用如表1所示的基于圖的特征分析節點關系[10].大部分研究者在設計基于圖的僵尸網絡模型時都會在表1的基礎上做創新設計.例如,Wang等人[11]提出一種基于流和基于圖的流量行為混合分析的僵尸網絡自動檢測模型.Daya等人[12]使用特征歸一化,盡可能降低網絡拓撲結構對行為和通信模式的影響.除此以外,也有部分研究者根據僵尸網絡的行為特點,在特征選擇上做創新.例如,Lagraa等人[13]沒有使用表1中基于圖的特征建立主機之間的通信特征,而是為每個主機生成多個圖表.在該系統中,以2個IP在同一個時間窗口內的端口變化情況作為分析對象,對于每對產生了通信行為的IP都構造一個圖,以源端口和目的端口的二元組作為圖中節點,根據二元組的出現時間順序構建有向圖,通過比對不同圖之間的編輯距離發現存在異常行為的IP.

表1 常用基于圖的特征及說明
本文提出的僵尸網絡多級控制關系可視化分析系統結構圖如圖3所示.本文系統主要由3個模塊組成:原始數據處理、Neo4j拓撲構建和D3可視化.
2.1.1 七元組特征提取
由于流量巨大,為了確保可分析,取用僵尸網絡的流數據.這些流數據攜帶了從一個網絡節點轉發數據包到另一個網絡節點所需的基本IP層信息.為了篩選控制節點及其關系,從每條流數據中選擇最具代表性的7個特征組成七元組si=(s_sipi,s_dipi,s_sporti,s_dporti,s_packetsi,s_bytesi,s_end_timei).其中,s_sipi和s_dipi分別表示源/目的IP,s_sporti和s_dporti分別表示源/目的端口號,s_packetsi和s_bytesi分別表示從s_sipi到s_dipi的包數和字節數,s_end_timei顯示該條流數據傳輸的時間段.將1天以2小時為區間劃分為12個時間段,通過DAYh-t顯示該流數據出現在哪個時間段,其中h為第幾天,t為所屬時間段.例如,分析2022年1月的流數據,若其中1條流數據時間為“20220101 00:00:01”,則其對應的s_end_timei存儲為“DAY1-1”.多個七元組合并為集合S.
2.1.2 同源數據聚合

2.1.3 篩選控制節點
以七元組的二元組(ip,port)為分析單位,對于每個二元組bi=(ipi,porti),定義連接的IP數量(不區分向內或向外)為該二元組的度.度既包含正向流,也包含反向流,而七元組數據集T是有向流數據,因此將T中的sip與dip、sport與dport互換,就形成反向流數據集T′,與原流數據集合并,形成雙向流數據集TC.對合并后的新集合TC以二元組bi=(ipi,porti)為單位,統計包含bi在內的所有七元組中不同dipi的數量di,即為該二元組bi的度.

2.1.4 梳理控制關系

2.2.1 控制關系文件導入
Neo4j是一種高性能的圖數據庫,通過節點和關系這種結構化的形式對數據進行存儲.相較于關系數據庫,這種存儲和管理數據并維護數據關系的方法在數據庫查詢時開銷更低,因此很適合存儲僵尸網絡的節點和關系數據.Neo4j通過查詢語法Cypher篩選用戶限制條件下的節點和關系,并可視化展示出來.Cypher是一個描述性的圖形查詢語言,該語言可以直觀描述圖形情況,更符合人類自然語言,且不需要編寫復雜的查詢代碼,可以極大減少篩選圖中節點操作的負擔.
對于量級較大的數據,Neo4j有多種導入方式,包括使用Cypher語言的load csv方式和使用官方的neo4j-import工具等.本文使用官方的neo4j-import工具導入控制關系文件,該工具需要將圖中的節點和關系分別存入2個csv文件,通過輸入指令即可導入.
2.2.2 生成拓撲圖及json文件
圖4為采用Neo4j的查詢結果拓撲圖示例.圖中最上方是使用的Cypher語句,語義是查詢存在向外控制關系且個數大于2的所有節點.圖中圓點為節點,帶有箭頭的連線為控制關系,從控制節點指向被控制節點.從圖4可以看出,面對節點數量上百甚至上千的僵尸網絡中的控制關系,Neo4j的展示效果有限.圖4是已經將Neo4j展示界面放大到最大的效果,仍然不能看到全部的控制關系,且該關系圖中缺少后續分析需要的節點信息,所以需要考慮通過其他方法將控制關系可視化展示.
Neo4j本身具有數據導出功能,可以將Cypher語句的查詢結果以csv,json等多種格式導出,形成關系文件.本文選擇json格式將Neo4j通過Cypher查詢語句篩選出來的節點間關系導出.
圖5顯示了通過Neo4j導出的關系文件中的1條控制關系數據,其中保留了節點和關系的標簽和屬性.在圖5中,行3“p”后的大括號內包含1條完整的控制關系,分為2部分:第1部分給出了該條控制關系中的2個節點編號及其屬性,在圖中表示為第1個“start”和“end”后括號中的內容;第2部分給出了該條控制關系中的邊的編號及其屬性,在圖中表示為行24“segments”后括號中的內容,因為是同一條控制關系,其中的“start”和“end”與第1部分中的“start”和“end”分別對應,行36“relationship”后括號中的內容包含了該條控制關系的屬性.
在對導出的關系文件做可視化工作時,將文件中每條控制關系數據中第1部分的“start”,“end”提取去重后存儲為圖中的節點,對于第2部分中的“segments”,以起點(“start”)→控制屬性(“relationship”)→終點(“end”)的形式存儲為圖中的邊.繪制時通過查找邊文件中的起點和終點即可在圖上繪制出一條有向邊.
文獻[14]提供了使用JavaScript的函數庫D3實現導出數據可視化的思路,將導出的關系文件作為D3可視化模塊的輸入,可得到不同功能的節點間關系的可視化展示.本文在文獻[14]的基礎上根據需求分析增加了如下功能:
1) 點擊圖中某節點顯示該節點屬性并一鍵打開該節點的所有相關流數據;
2) 顯示節點間的控制方向;
3) 以不同顏色顯示控制行為的出現天數,并可以只顯示出現天數大于n天的結果;
4) 點擊連線后以餅圖顯示控制行為出現的時間段.
圖6為使用少量數據的可視化模塊的主要功能展示.在該圖中,節點及控制關系被顯示在圖的中心位置,藍色點表示節點,不同顏色的連線表示節點間的控制關系,連線上的黑色箭頭表示控制方向.圖中左下角的圖例說明了不同顏色連線的含義,由上至下分別表示1條控制關系出現1天至7天.當點擊圖中的某個節點時,圖中右下角會顯示該節點的全部屬性,包括IP地址、出現時間、出現次數等.此時如果點擊圖中右側的藍色“打開該ip文檔”,即可打開只包含與該節點相關的所有控制關系數據的csv文件.
圖7為出現天數超過規定天數的控制行為的可視化顯示,可以看出,該圖只有從黃色至紅色的連線,即只包含控制天數為5~7天的控制關系.通過該功能可以快速找到出現天數較多的控制行為,并從圖中直觀看出這些控制行為之間的多級控制關系.
通過點擊任意控制關系可視化圖中的某條連線,即在圖的最下方以餅圖的形式展示該條控制關系的出現時間段.以圖8為例,黑色部分為出現時間,可以看出該條控制關系在多天相同時間段存在控制行為,因此該條控制關系中的控制節點對應IP被標記為高度可疑.
本文采用實驗室抓取到的明確包含僵尸網絡流量的1個月的流數據進行分析,圖9展示了其中某周發現的異常節點.從圖9可以看出,節點①以橋梁的形式連接了右下角的節點群和左側的其他節點.通過點擊該節點,可僅高亮顯示與該節點直接相連的其他節點和控制關系.點擊節點①的同時,節點①附近通過白色方框顯示出該節點對應IP地址,本文做了模糊處理.從圖9可以看出,節點①與節點②③④直接相連,根據箭頭方向(從控制端指向被控端)可以發現,節點①IP單方面被節點②③④IP控制,因此分別點擊這3個節點做進一步分析.
圖10展示了對圖9中的節點④的進一步分析情況.可以看出,該節點除了對節點①存在控制行為外,左側還存在多條紅色(控制天數為7天的)向外控制關系,因此將該節點對應IP標記為高度可疑.
采用本文系統對1個月的流數據進行篩選后,共發現3個高度可疑存在多級控制關系的跳板節點,其中1個已被確認為僵尸網絡控制端.由于流數據的粗糙性以及實際網絡流量的未知性,本文系統的目的是盡可能發現存在多級控制關系的節點,以便報文數據分析以及實際取證溯源分析等工作的開展.
本文提出一個針對僵尸網絡的多級控制關系可視化分析系統,包括原始數據處理、圖數據庫拓撲構建以及可視化分析.由于問題的復雜性,1個設備可能被多個僵尸網絡控制,因而僵尸網絡多級控制關系還需進一步分析和探索.本文系統可從以下2個方面作進一步優化:
1) 引入連接次數c作為保留高價值邊的依據;
2) 將單次分析發現的多級控制關系以圖的形式導出存儲,如ip1→ip2→ip3,在后續數據分析中如果出現相同的圖,如再次出現ip1→ip2→ip3,則可以判斷存在長時間穩定多級控制行為,從而發現多次出現的相同事件.
此外,在本文系統的基礎上,可以引入基于圖的方法進一步區分節點的行為模式,劃分出不同集群,即從可疑僵尸網絡社區中選擇出真正的僵尸網絡社區,并進一步判斷僵尸網絡社區中每個節點所扮演的角色,包括主機、C&C服務器和受感染的機器人,使分析結果達到更高的正確率.