安全態勢感知與機器學習:數據預處理與特征工程
隨著網絡規模和復雜性不斷增大,新型高級入侵攻擊手段不斷涌現,傳統的網絡安全方案力不從心,單點檢測和防護技術很難應對復雜的安全問題,網絡安全人員的關注點也從單個安全問題的解決,發展到研究整個網絡的安全狀態及其變化趨勢。
安全態勢感知就是獲取影響網絡安全的諸多要素,進行多維度綜合理解、評估,并預測未來的發展趨勢,態勢感知已經成為網絡安全2.0時代安全技術的焦點,對保障網絡安全起著非常重要的作用。
安全態勢感知的概念由來已久,早在1995年,前美國空軍首席科學家Mica R. Endsley就建立了態勢感知的經典模型,其核心內容包括:態勢要素獲取、態勢理解和態勢預測,如下圖所示。

態勢要素獲取(第1級):提取環境中態勢要素的位置和特征等信息;
態勢理解(第2級):關注信息融合以及信息與預想目標之間的聯系;
態勢預測(第3級):主要預測未來的態勢演化趨勢以及可能發生的安全事件。
根據正在討論的國標《信息安全技術 網絡安全態勢感知通用技術要求(征求意見稿)》,安全態勢感知系統主要劃分為數據匯聚層、數據分析層、態勢展示層和監測預警層,具體框圖如下所示:

數據匯聚層包括數據采集、數據預處理和數據存儲,對應Endsley模型中的態勢要素獲取。
數據分析層包括網絡攻擊分析、異常行為分析和資產風險分析,對應Endsley模型中的態勢理解。
態勢展示層包括整體態勢展示、專題態勢展示和態勢報告,是態勢理解的可視化展示。
監測預警層包括監測告警和安全預警,對應Endsley模型中的態勢預測。
總體來看,安全態勢感知系統本質就是一個大數據分析系統,通過對海量數據的智能分析,理解網絡的當前安全狀態,預測網絡的未來安全狀態。數據匯聚層負責采集原始數據并進行預處理和存儲,這部分功能決定了數據的質量,也是大數據分析的基礎,數據質量決定分析質量,本文主要討論數據預處理的相關技術。
數據預處理
安全態勢感知系統通過各種方式、采用多種協議、從多種設備采集到各種數據,采集數據類型包括但不限于網絡流量、資產信息、日志、漏洞信息、用戶行為、威脅信息等數據。這些多源異構數據必須經過預處理才能進入后續的分析環節。

傳統的數據預處理的內容一般包括:
- 數據篩選
即基于既定策略(如必填字段缺失、重要字段格式錯誤、重復數據等)對采集的原始數據進行篩選,丟棄無效垃圾數據,確保數據質量。
- 數據轉換
即將采集的同一類型、不同格式的原始數據轉換為統一的數據格式,且轉換時不能造成關鍵數據項的丟失和損壞,如統一時間格式、統一漏洞名稱等。數據轉換保證后續處理過程中的數據一致性性和概念一致性。
- 數據歸并
即對采集的原始數據進行同類項合并,如對同一事件的多次告警進行歸并,對同一會話的日志進行歸并等。數據歸并能大幅減少數據量,同時又不影響數據質量。
- 數據補全
即基于資產庫、威脅信息庫、地理信息庫等對采集的原始數據進行補全,補全的內容可包括資產屬性、關聯事件、地理位置等。數據補全能提供更完整的數據信息,通過數據冗余的方式,減少關聯查詢的性能消耗,更有利于后續的數據分析。
- 數據標簽
即根據數據字段對采集的原始數據進行標簽化處理,標簽內容應基于分析需求進行設置,具體可包括數據可信度、重要程度、數據來源、區域、行業等。數據標簽能豐富數據的內容,根據已有的數據知識做初步的判斷,并和原始數據綁定在一起,進入后續的數據分析階段。
經過上述的數據預處理,我們就得到了一個規范、精煉、完整、內容豐富的數據集,這樣的數據集可以比較好的支持多個維度的統計分析。
近年來,機器學習技術得到快速發展和應用,在安全態勢感知系統中也有豐富的應用案例和場景。對于機器學習來講,這樣的數據集屬于原始數據集,還不能直接用于機器學習算法。要在態勢感知系統中引入機器學習模型和算法,還需要對這些原始數據進行特殊處理,也就是機器學習領域最重要的特征工程。
特征工程
Coming up with features is difficult,time-consuming,requires expert knowledge. “Applied machine learning” is basicallyfeature engineering. ——Andrew Ng(吳恩達)
吳恩達認為:“應用機器學習”本質上就是在做特征工程(Feature Engineering)。特征工程是機器學習的必備過程,需要大量專業知識,而不是簡單地把數據扔給機器就可以學習了。數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。
數據預處理、特征工程以及機器學習的邏輯關系如下圖所示。

特征工程,顧名思義就是最大限度地從原始數據中構建事務的特征以供算法和模型使用的一項工程活動。構造特征是一個嚴重依賴經驗的過程,需要對業務有深入的理解。對業務理解的越深入,越能抓住數據的重點構建合適的特征,越能幫助機器學習算法進行更有效的學習和判斷。
特征越好,數據分析的靈活性越強,機器學習就可以選擇相對簡單的模型,運行速度更快,也更容易理解和維護,不需要花大量時間調參和優化就可以取得很好的效果。
下面舉兩個實際的例子來說明特征構建。
問題一,根據一個人的身高和體重,判斷此人是否肥胖。身高和體重是2個主要的原始數據,但是直接根據這兩個數據很難判斷胖瘦。針對這個問題,一個非常經典的特征工程是,構建BMI指數作為特征,BMI=體重/(身高^2),其中體重使用公斤為單位,身高使用米為單位。這樣,通過BMI指數,就能非常顯然地幫助我們,刻畫一個人身材如何。甚至,你可以拋棄原始的體重和身高數據。
問題二,根據用戶登錄信息,判斷是否異常登錄。一般登錄信息包括用戶名、登錄時間、登錄IP、登錄結果(成功/失敗),這些維度的數據可以用來識別一些常見的異常登錄,比如多次登錄失敗。如果對安全登錄有更深的理解,就可能構造一些其他特征,比如:是否工作時間登錄、登錄失敗時間間隔、連續失敗次數、登錄IP地域信息等,這樣就能從更多的維度描述登錄過程,能更有效的識別異常登錄。
所以特征構建的主要目的是基于原始數據集,構造適合機器學習的特征數據,并且這些數據要和業務需求緊密相關。
那么什么樣的數據適合機器學習?答案是標準化和歸一化的數據。
比如前面例子中的登錄時間,如果是具體的時間,最常用的就是精確到秒的時間,這些數據的差別可能非常大,但是如果轉換為是否工作時間,那就是0或者1,極大的簡化了時間特征,這種屬于定量特征二值化的處理方法。
歸一化方法即把大范圍的數據轉換為同一量綱,把數據映射到[0,1]或者[a,b],這樣所有的數據都位于一個區間范圍,更具有可比性。歸一化方法是特征工程常用的一種處理方法。
其他還有很多特征數據處理方法,這些常用的處理方法都已經在Python的sklearn.preprocessing庫中有完整的實現,可以直接使用。
經過特征工程處理后的數據,就應該是標準化和歸一化的數據,這些數據一般可以使用矩陣向量(或矢量)表示,也稱為特征向量(或矢量),方便計算機的算法處理。

下面我們再回到本文的主題,看看在安全態勢感知領域,特征工程主要涉及哪些內容。
網絡安全特征集
分析網絡安全,最重要的數據就是原始流量報文,所有的網絡掃描、滲透和攻擊,都必然要通過網絡報文來實現。所以,流量報文數據就是我們的原始數據集。
網絡安全涉及的范圍非常寬泛,針對不同的問題,需要做不同的特征選擇和處理。比如,研究網絡層的攻擊,就需要針對TCP/IP的頭部信息、分片信息等進行細粒度的分析處理,建立特征;研究HTTP應用層攻擊,就需要針對HTTP的頭部信息、內容信息等進行細粒度的分析處理,建立特征;研究工控系統的網絡攻擊,就需要針對工控協議進行深度解析,對命令碼、參數變量等進行細粒度的分析處理,建立特征。
針對通用的網絡入侵攻擊,業界早已出現標準的數據集和其特征集。
KDD99數據集是最早最出名的網絡安全數據集,是由MIT利用TCPdump收集了9周時間的網絡連接和系統審計數據,仿真各種用戶類型、各種不同的網絡流量和攻擊手段形成的數據樣本。這些樣本分別被標記為正常(normal)或異常(attack),被廣泛用來測試各種入侵檢測以及類型算法的驗證實驗集。哥倫比亞大學的Sal Stolfo 教授和來自北卡羅萊納州立大學的 Wenke Lee 教授采用數據挖掘等技術對以上的數據集進行數據預處理和特征分析,形成了一個新的數據集即特征集。
KDD99數據集獲取方式:https://www.ll.mit.edu/ideval/data/1999data.html
下面我們來分析一下這些經過處理后的特征集,特征集共分為4大類41個特征,這些特征的具體說明詳見下列各表:
表 1基于獨立TCP連接基礎的特征集

表 2基于安全專業知識的特征集

表 3基于2秒時間窗口的統計特征集

表 4基于100個連接窗口的統計特征集

通過上述分析,可以看到網絡安全相關的特征工程,主要從幾個方面入手:
1、網絡層連接的基本屬性,包括連接時長、IP端口、Flag標志等,除了KDD99特征集中的特征,還可以考慮報文長度、滑動窗口尺寸、分片數量、分片大小等諸多維度的特征,并進一步基于這些特征做方差、均值等計算,得到一些新的特征。
2、應用層和安全相關的屬性,這要結合具體的業務應用和應用層協議進行具體分析,KDD99特征集主要對遠程登錄相關的數據抽取特征,如果你的應用涉及其他業務,應該從你的業務出發構建特征,比如要識別SQL注入,就需要解析到SQL語句,對字符串中的information_schema、information_schema.table、select、from、where等關鍵詞進行特征抽取;要識別XSS攻擊,就需要解析HTTP協議,對提交的內容中的javascript、alert、onerror=等特征進行抽取。對工業控制系統的特征構建,需要針對工控協議中的每個指令碼建立特征,尤其是那些高危指令,需要專門進行統計建立統計特征。
3、基于時間窗口的統計特征,這部分可以參考KDD99的2秒時間窗統計特征集,也需要結合具體的網絡業務做進一步的分析,比如要識別CC攻擊,就需要對連接的特殊URL進行統計建立特征。
4、時間窗口的特征無法準確表達慢連接攻擊或者APT攻擊,KDD99中使用最近的100個連接進行統計分析,我們在實際應用中,還可以進一步細分,比如針對同一目的IP、針對同一源IP分別進行統計建立特征集。
另外,CICIDS2017數據集則是目前較新的網絡安全數據集,由Canadian Institute for Cybersecurity采集發布,格式類似于kdd99,其特征集包含81個特征,具有更豐富的特征數據,可能檢測識別更多類型的異常情況,有興趣的同學可以自行進行研究。
CICIDS2017數據集獲取方式:http://www.unb.ca/cic/datasets/ids-2017.html
總 結
網絡安全態勢感知系統,本質是一個大數據分析系統。近年來隨著機器學習的廣泛應用,越來越多的安全態勢感知系統開始使用機器學習進行數據分析和態勢預測。應用機器學習的重要環節就是特征工程,特征工程做不好,機器學習學不好。
特征工程是數據分析中最耗時間和精力的一部分工作,它不像算法和模型那樣是確定的步驟,更多是工程上的經驗和權衡,也沒有統一的方法。
要做好特征工程,首先需要找到該領域懂業務的專家,或者借鑒領域專家的經驗繼續優化。安全態勢感知系統在使用機器學習前,必須依靠安全專家結合各自領域的具體業務,對數據進行特征提取和構建,只有貼合業務的特征才能起到更好的表達效果,才能更好地利用機器學習理解態勢、預測態勢。