摘要
本文將從傳統SIEM元件構成入手,介紹AI對於下一代SIEM的適用性和重要性,並重點闡述當前主流SIEM&AI平臺和全新一代SIEM@AI平臺的區別;隨後將結合實際案例深入討論SIEM@AI的兩個核心技術原理:資料分析和資料關聯;在最後的篇幅,文章會探討SIEM@AI的發展和研究方向。
一、SIEM簡史
早在10年前,SIEM的概念就已經被提出。SIEM作為企業內部涉及安全的日誌管理平臺,提供日誌的採集、儲存、分析查詢功能。經過十多年的發展,如今SIEM的產品形態已得到豐富擴充,包括支援多維資料來源輸入、威脅情報中心(Threat Intelligence)、策略指令碼庫(Playbook)等,同時外部威脅資料的共享和獲取也使得SIEM系統不斷被完善。
SIEM在美國一直保持著較快發展,根據Gartner相關市場報告,SIEM在全球(主要是美國)最近每年都保持著10%的增長速度,預計在2020年市場規模可達200億人民幣。然而在中國,SIEM還處於比較初級的階段,很多企業對自身安全問題並沒有系統性的管理。2017年整個中國市場只有3.17億人民幣的規模,這個數字相比中國經濟對全球經濟的佔比是不相符的。不過可喜的是,SIEM中國市場最近每年都保持著近20%的增長速度,說明越來越多的中國企業已經意識到了SIEM的重要性。
但並非所有企業都需要SIEM,處於初期發展階段的企業資料流和業務量單一,面臨的安全威脅較少,安全裝置和軟體的需求也相對較小,依靠獨立的安全產品即可滿足基本需求。當企業發展到中大型規模時,業務線增多,內外網安全環境變得複雜,同時前期使用的安全產品也達到了一定數量,這時就有必要接入SIEM來實現統一的安全運營管理。
二、解構SIEM
採集層
系統資料入口。SIEM大多支援多種資料輸入,這些資料從來源劃分,包括終端使用者裝置、網路裝置、伺服器、儲存裝置等;從OSI模型劃分,包括了資料鏈路層、網路層、傳輸層、應用層的網路流量;從系統角色劃分,包括不同的業務系統、中介軟體系統、負載均衡系統等。這些資料或以推送的方式或以拉取的方式向SIEM平臺輸送,供SIEM進行後續的分析計算。
採集層使用的技術主要分為兩類:“侵入式”和“無侵入式”。“侵入式”一般採用部署Agent程式,或者使用者在自身程式碼邏輯中新增程式探針等方式採集資料;“無侵入式”一般則採用旁路映象流量或者輸入日誌等方式採集資料。兩種模式各有優缺點,“侵入式”有利於企業增加定製化功能,並結合SIEM平臺的多維特性深入貼合業務,但弊端在於外掛式的Agent一旦不穩定,就會影響使用者自身業務,甚至導致系統當機,我自己就遇到過好幾個客戶向我抱怨自身的服務被廠商的嵌入SDK搞的不穩定。“無侵入式”則可以完全避免對業務系統的影響,一方面提升系統穩定性,另一方面保護系統資料安全。在技術成熟的情況下,對使用者來說,“無入侵式”採集方式顯然更加友好。
儲存層
採集後的資料除了供給後面的計算分析外,還會進行儲存。儲存層有兩個目的:一是對原始採集資料進行儲存,二是對計算分析完成的結果進行儲存。
儲存可選擇的技術棧一般包括資料管道(中間資料傳輸),熱儲存(儲存常用資料查詢、更新),冷儲存(儲存不常用的資料)。嚴格說,資料管道不算是儲存,但在實際上為了防範後端資料丟失或堆積,一般也會將經過管道的資料進行臨時儲存,比如網際網路公司最常用的Kafka佇列就是將中間資料落地在磁碟上。
冷熱分級儲存的目的在於,保證熱資料操作速度的同時,在一定程度上降低企業儲存成本。對於冷儲存而言,比效能更大的技術挑戰是可靠性和可用性,支援多IDC、甚至多Zone的大型分散式儲存技術系統是企業首選;而對於熱儲存,更關注的是讀寫速度以及如何被計算單元使用,所以一般會選擇帶有Sharding能力的分散式儲存。
計算層
SIEM平臺的核心。分析準不準、全不全、快不快都依賴這層的計算單元。目前主流的計算模式包括實時計算平臺和離線計算平臺。
海量資料的離線計算平臺起源較早,早在10多年前就出現在Google的MapReduce系統中,MapReduce底層先利用GFS將海量資料分片儲存,解決了單點裝置的IO吞吐瓶頸。每個計算節點再依賴排程器或執行Map任務或執行Reduce任務,不斷將海量計算任務分解、歸併,最終輸出期望的計算結果。實時計算平臺算是海量資料計算的後起之秀,包括了以Storm為代表的實時流處理和以Spark steaming為代表的微批次處理兩種技術實現方式。
在實時性上,實時流處理模式的處理速度更快,但從實際的使用經驗來看,這種模式也要求更高的技術運維經驗。無論是實時計算平臺還是離線計算平臺,都要求支援任務的Partition,這樣可以在某些主機當機的情況下,仍然保證計算順利完成。
計算平臺最核心的並不是計算框架,而是演算法部分的計算邏輯。計算邏輯對流量、使用者請求、系統互動資訊等不同型別的資料進行計算。目前絕大部分SIEM平臺的實現都是基於規則引擎,如Drools,這就需要依賴使用者制定大量的規則,一旦使用者制定的規則有錯誤或者有遺漏,就會造成錯判漏判。
輸出層
計算層分析的結果最終傳導至輸出層。傳統SIEM的輸出方式有很多,包括展現層面、報表層面、報警通知層面、實時阻斷層面等,企業可以根據不同業務部門的不同需求選擇合適的輸出方式。SIEM的輸出結果不僅僅和安全部門或業務部門有關,還可能涉及到其他業務單元,比如資產管理、組織管理等。
從事件處理的生命週期來看,處理方式可以分成自動方式和手動方式,自動方式可以對計算層分析出的安全威脅事件進行自動處理,包括通知、預警、上報甚至阻斷,而對於不能自動處理的情況,就需要手動方式,這時可以藉助工單系統進行後續處理跟蹤,最終保證安全威脅被處理。
情報中心
情報中心為SIEM計算層提供額外的資料支撐,從而提高威脅和異常行為識別的準確率。情報中心的資料來源一般有三種渠道,第一種是來自公開輸出的威脅情報,如X-Force Exchange、ThreatBook、Shodan等;第二種是來自自身蒐集的威脅情報資料,如通過蜜罐採集、API調取或者交換購買等方式取得有價值的威脅情報;第三種就是來自跟業務自身相關的輔助資料,如使用者註冊資訊,企業資產資訊、組織資訊等等,這些資訊看似和安全威脅關聯不大,但是當多種資料聯合分析時,就可以為最終的結果輸出提供有效參考。
情報中心資料的內容包含多種形式,常用的如IP庫、裝置指紋庫、黑卡庫、漏洞庫等。使用或依賴情報中心要注意情報的實時性,因為目前雲化和共(zu)享(yong)經濟的普及,很多資源並不是獨佔的,而是在一定時間後就被回收,並交由其他用途,這樣的話如果情報更新不及時就會適得其反。
三、SIEM、態勢感知和SOC安全運營中心
總之,SIEM對於企業的整體安全分析是非常重要的,通過SIEM可以打通多種資料流的資訊,形成對於安全威脅的事前、事中、事後處理,最終保證企業的整體資產及業務安全。
四、AI遇上SIEM
如果說IT技術有風口的話,那麼AI無疑是最前沿並且最落地的,AI整體發展分為三個階段:
1. 識別階段,解決What的問題,這是最基礎的AI問題。目前的AI通過大量有監督學習,提取標註樣本的表象或內在特徵,形成一個或多個分類器,分類器對樣本資料特徵進行學習訓練,最終對新的輸入進行準確識別,從而解決什麼是什麼的問題。比如什麼是小狗、什麼是色情圖片等。
典型的應用包括驗證碼識別、語音識別、垃圾郵件識別等。人們熟知的AlphaGo也是識別問題,深度學習通過對成千上萬個已經標註好輸贏的棋局進行訓練,利用頭幾層的神經元網路,越過表象特徵挖掘出人都很難理解的深層次特徵,形成了對於棋局的“感應”能力,從而對某個棋局是更有利於黑方還是白方做出判斷,再結合αβ search或MCTS等演算法,給出下一步走法的最優解。應該說識別是應用AI最成熟的領域。
2. 理解階段,解決Why的問題,這是在識別的基礎上進一步的AI問題。比如一段文字想表達的情感是什麼?一個電影講述的故事是什麼?一段語音的問題是問什麼等等。最典型的應用場景就是人機對話,其基礎是理解人說的是什麼,想表達什麼意思。
理解問題最原始的解決辦法就是構造各種語義模板,用來做情感標註,變相把理解問題轉換成識別問題。但隨著深度學習的普及,已經出現了很多新的技術以突破模板定義的限制進而試圖真正理解內在含義。但是通過蘋果手機Siri的例子就可以看出,目前的AI對於理解問題的能力還遠遠沒有到成熟的階段。
3. 反饋階段,解決How的問題。How本質是在識別的基礎上,理解了對方的資訊內容後,做出恰當的反饋。反饋是AI的最高境界,是實現真正人機互動的關鍵,有了反饋互動的能力,AI就可以像真人一樣在一些領域部分代替人類,甚至完全代替人類。但很明顯,目前AI的發展階段離這個目標還相距甚遠。
從AI的三個發展階段看,目前AI還主要處於“識別”和“理解”的初期,離真正的“代替人類”還有很長遠的路要走,當下真正已經成熟使用的技術基本集中在“識別”問題。同時我們觀察安全領域就會發現,安全領域裡的問題恰恰就是非常典型的"識別"問題,通過SIEM裡的各種輸入資料進行分析,只需要識別這個事件或這個使用者是否存在威脅即可,整個過程無關理解也無關反饋。
五、從SIEM&AI到SIEM@AI
而企業真正需要的是:SIEM@AI(以AI作為平臺),無需很多成本甚至完全無需學習成本,即可使用AI技術從海量的輸入資料流資訊中發掘威脅事件,並自動使用AI技術對不同業務、不同維度的資料進行智慧關聯,建立內在聯絡,並最終自動的對威脅事件進行處置處理。
六、AI賦能資料分析
資料標註難題
無監督學習化解標註難題
標註難問題可解嗎?答案是肯定的,那就是利用無監督學習。無監督學習可以將正常事件聚在一起,同時也會將異常事件聚在一起,從而方便演算法識別出異常威脅。而整個威脅識別的過程無需標註樣本,也大大降低了人工參與的程度。
無監督學習是機器學習中一個非常重要的分支,不同於有監督學習需要依賴大量標註好的樣本才能讓分類器進行學習,無監督學習可以在沒有任何標註樣本的情況下由分類器自主學習。只不過目前市場上絕大多數產品都集中在有監督學習上,導致無監督被長期忽略了。
白山ATD(Advanced Threat Detection,深度威脅識別,新一代的SIEM@AI系統)產品大量使用了無監督學習技術來進行威脅事件識別,無監督學習的本質是將資料進行聚類,而根據聚類實現的過程不同又主要分為三種演算法:
1. 距離聚類
2. 核密度聚類
3. 層次聚類
距離聚類
距離聚類是最常見的聚類演算法,本質是EM演算法,通過對於距離中心點的不斷迭代修正,最終將所有事件進行歸類,那麼有威脅的事件自然會被歸到一簇或者幾簇,而正常的事件也會因為更相似的距離而歸到一簇或者幾簇。當然這是理想情況,在現實場景中實施演算法還需要做很多的加工工作。距離聚類的最大困難一是距離計算方式的選擇,二是聚類簇數量的選擇。
距離計算選擇主要包含兩個方面:
- 如何規定事件邊界:繁雜的海量資料輸入中,一個事件的邊界從哪裡開始,到哪裡結束,包含哪些資料。這需要按照不同的應用場景做不同的處理,常見的方式有按照時間段,也有按照事件切分點。
- 如何制定事件間距離:事件有很多不同的描述維度,對於最常見的維度——時間、地點而言,記錄時間有可能是UNIX時間戳,記錄地點有能是GEO IP或者MAC地址,那麼如何把UNIX時間戳和IP地址放在一個向量空間模型裡比較距離就是一個問題了。這裡ATD採用的Z-Score演算法進行距離對映,使得對映後的資料具有完全的正太分佈特徵。
簇的數量選擇對於無監督學習的演算法效果至關重要,一旦初始簇的數量選擇不合適,就有可能導致聚類的結果完全錯誤。
核密度聚類
核密度聚類不需要事先指定聚類的簇數,而是根據初始的密度值進行聚類選擇,所有與核距離過遠的事件都會被標記為離群點,這些離群點從安全形度看可能就是威脅事件。
密度聚類的前提是需要選擇合適的初始密度值,如果選擇不當將導致離群點錯誤,最終使威脅事件誤判。另一方面,控制離群點的數量和純度對最終的識別效果也很重要,因為在實際生產環境中,很有可能出現大量的離散點其實也是正常的事件。所以有時候也需要在第一次聚類後,調整事件的特徵選擇演算法,針對離群點進行二次聚類。
層次聚類
層次聚類的原理是先將所有事件看成樹的葉子節點,每個葉子節點自成一類,然後根據相互的距離,自下而上逐層合併,最終形成一個根。
層次聚類可以根據需要,按照最終聚類的簇數進行層層歸併,最終聚成的小簇我們可以認為是某種離群點,即有可能是一些威脅事件。可以看出,層次聚類的核心仍然是距離計算模型的選擇。
智慧分析風險
利用無監督學習,可以在無需標註樣本和無人工介入的前提下,發現很多異常的威脅風險。下圖是一個被ATD系統識別出的實際例子:
這是一個ATD對企業電商業務無監督學習的實際案例,案例顯示大部分使用者的訪問路徑集中在
登入頁=》授權頁=》訂單頁的訪問趨勢,通過無監督學習就可以將正常使用者的行為聚在一起。反觀刷單的惡意行為則會繞過授權頁直接訪問訂單頁,這樣在無監督學習過程中就自然形成了離群點,這樣我們就可以幫助企業識別出刷單的威脅風險。
七、AI賦能資料關聯
橫向關聯
AI威脅資料分析,分成縱向的資料分析和橫向的資料關聯:
縱向分析指的是對於事件群體按照時間軸學習規律,以此進行對於已有的威脅識別和對於未來的態勢感知。橫向關聯指對空間上不直接相關的不同事件群體,通過演算法挖掘它們的深層次關聯關係,最終形成更準確的威脅識別或者便於對威脅事件進行更全面的回溯。
對於大多數SIEM產品,只要附帶AI工具功能的,便可以完成諸如異常點檢查、趨勢預測等任務(儘管他們當中絕大多數都是有監督學習,這也就意味著客戶需要提供大量標註好的威脅事件和正常事件的樣本),不過這些任務都是縱向分析,並不是橫向關聯。因此,對於新一代SIEM@AI系統來說,比起無監督學習進行縱向分析,更有挑戰的任務是在表層不相關的海量資料中建立潛在關聯,從而實現真正的深度威脅識別。
事件的相關運算
常見的事件關聯場景基本上可以分為這兩種:
A,某一作用域(如某一時間段內)的事件集合,挖掘事件之間的關聯關係,如:
上圖就是兩個完全由不同系統統計輸出的事件,我們需要用演算法分析是否存在關聯,這個過程實際可以轉換為:按行分析相關性。
B,同一型別事件,挖掘構成的因素是否存在關聯關係,如:
上圖所示,全部“ERP系統不能訪問”的事件中,各個因素間是否存在關聯,這個過程實際可以轉換為:按列分析相關性。
由此可以看出,無論是不同事件的關聯分析,還是同一類事件的內在因素關聯,本質可以轉換為矩陣的行相關或列相關。對於列相關,通過對於矩陣轉置運算,也可以轉換為行相關,即:
我們只需要分析K1和K2是否在某種程度存在相關。
對於這種關聯分析,最常見的方式是用類似KNN演算法中,通過計算兩個事件元素的夾角來判斷相關性:
θ=acos(K1⋅K2/(|K1||K2|))
當夾角越小時,表示兩個事件越相關,而當夾角互相垂直(即正交)時,表示兩個事件完全無關。
當然,我們還可以使用其他的方式計算相關性,比如Jaccard距離:
J(K1,K2)=|K1⋂K2|/|K1⋃K2|
當J值越大,表示兩個事件越相關,反之則越不相關。
夾角距離計算方式更適用數值型的事件向量,而Jaccard距離計算方式更適合列舉字串型別的事件向量。當然事實上,我們可以把任何字串型別的事件,通過word2vec或者simhash等演算法方式轉變為數值型事件向量,然後再進行夾角計算。
啤酒與尿布
說到資料關聯,不得不提的經典故事就是“啤酒與尿布”了,沃爾瑪在做資料關聯分析時發現啤酒和尿布在購物單上是相關的,這是怎麼回事?原來妻子經常會囑咐丈夫下班以後要為孩子買尿布。而丈夫在買完尿布之後又要順手買回自己愛喝的啤酒,因此啤酒和尿布的銷售行為上具有相關性。
從資料關聯演算法複雜性的角度看,啤酒和尿布的關聯屬於比較簡單也相對直接一些的關聯,Apriori演算法就是解決這個問題的簡單可實現的演算法之一。Apriori演算法通過不斷的篩選頻繁項並且不斷的產生新關聯規則的方式,最終得到關聯性最強的事件元素。
更隱晦的事件關聯
其實,在ATD給客戶服務的實際應用場景中,上文提到的“啤酒,尿布”還都算是比較簡單的事件關聯模型。更為複雜的是,如何發現從人的感知認識角度看並不是那麼直接的關聯關係。比如空氣的霧霾指數和城市用電量的關係,從人的感知角度,這兩個並不是特別的直接相關。但當我們在兩個事件中引入一個橋樑,即室內人數佔比,就會發現這樣的概率關係:
P(用電量/霧霾)=>P(室內人數增加/霧霾)* P(用電量增加/室內人口增加),其中P(A/B)表示B事件發生情況下發生A事件的概率
如果可以列舉出霧霾導致的所有核心事件,就可以使用全概率公式推匯出霧霾和用電量的關係(所以這裡我並沒有使用等號=而是使用了=>)。
從威脅識別的角度,通過這種中間的橋樑事件,同理也可以構建出兩個看似不相關的事件之間的關係。比如在我們給某家電企業部署的ATD執行中,就發現了一次疑似的CC攻擊實際是和後端某業務線資料庫變更操作有關:
P(疑似CC攻擊/業務線資料庫變更)=>P(疑似CC攻擊/介面訪問飆升)* P(介面訪問飆升/504佔比)* P(504佔比/請求阻塞)*P(請求阻塞/資料庫阻塞)*P(資料庫阻塞/資料庫變更)
解決這種複雜隱晦的事件關聯的前提是首先要把所有資訊(不管認為是否相關)都收集進來(這也是文章開始階段提到的SIEM的採集層需要解決的),儘可能多的採集各種資料,因為只有採集到資料才有可能建立關聯。當海量的資料採集進來後,我們往往在做下一步相關分析時會發現一個難題,即:因為資料太多,導致分析的效能很低。如果威脅事件分析的不及時,很可能會影響後續的處理,所以整個分析過程的低延遲至關重要。
資料降維
如何保證處理速度呢?那就需要對資料進行降維分解,從而降低計算空間,這裡面有兩種做法:
1.有監督降維
如果企業本身有大量標註資料,那就可以使用有監督降維,最經典的有監督降維就是PCA(Principal Component Analysis,主成分分析),其原理是選擇一種最優的資料投射方式,從高維空間投射到低維空間,並且保證投射後有較好的區分度。
2.無監督降維
在沒有大量標註資料的情況下就可以使用無監督降維,這也正是ATD所使用的資料降維方式。有很多種演算法都可以進行無監督降維,ATD最早使用的是LDA(Latent Dirichlet Allocation)主題發現模型進行降維,通過LDA先將資料按照主題相關性聚類,降低每一類中資料的數量和維度,從而減少後續計算的複雜度。
這裡,我想介紹另外一種資料降維的方式,也是我們目前正在嘗試的——SVD(Singular Value Decomposition)分解。
上圖所示,我們先對於一個海量的事件集進行了SVD分解,分解的結果是三個矩陣的乘積,然後通過對於中間Σ矩陣的元素進行篩選,就可以降低整個事件叢集的複雜度,同時找到同一個隱含主題下的關聯事件和關聯因素。隱含主題的數量本質上就是事件矩陣的秩。
從更深的角度講,無論是LDA還是SVD,其實本質都是去尋找事件矩陣的秩,利用秩找到構成事件的最核心因素,比如對於一個入侵事件,可能的核心因素是使用者的屬性(內/外部使用者、是否授權、相應職級等等)、入侵時間、侵入的業務型別,而其他的因素,諸如員工的年齡、當時的伺服器負載等等其他因素有可能就會被演算法自動識別為非關鍵因素而忽略掉。通過這種方式就可以在茫茫資訊中發現關鍵因素,從而為後面的事件關聯大大降低運算量。
總之,資料的橫向關聯是一個極富挑戰性的任務,其中最重要的先決條件是通過SIEM的採集層收集足夠的資料,其次是選擇合適的演算法對資料進行加工處理,最後是通過AI演算法對資料進行關聯分析。在ATD客戶的實際使用中,我們成功地發現了外網的介面攻擊和內網資料庫變更之間的關係,也發現了某郵件系統的Exchange日誌事件和內網SSH事件之間的關係。這種關聯分析不僅僅對於已知威脅的回溯有幫助,也對未來的安全態勢感知有重大意義。
八、關於未來方向的探究
從SIEM&AI模式到SIEM@AI模式,我們不再將AI看成是外掛或者工具,而是將系統執行在一個完全由AI驅動的智慧平臺上。在這個平臺上,我們無需標註資料,無需大量人工介入,也無需定製規則,而是通過以無監督學習為主導的機器學習演算法自動對異常威脅事件進行識別,自動的為各個複雜事件建立內在關聯,提高識別的準確率和召回率的同時,解放安全工程師的人力並提高其效率,最終實現對於企業外網、業務、內網的三層智慧防禦。
白山ATD產品就是一套全新的SIEM@AI系統,我們過去花費了大量時間和精力去研發基於無監督學習的AI演算法來代替目前的傳統企業安全產品,這種模式的有效性在企業實踐中已經得到了驗證。未來,ATD還會在兩個方向做進一步探索研究:
1. 通過主動學習引入人的參與
引入無監督學習的目的是不依賴標註的樣本,因為在安全領域,標註樣本的獲取成本非常大,但是這並不代表可以完全不依靠人工。在可預見的時間範圍內,有經驗的安全專家對威脅風險的識別、對於演算法的修正以及對於整個AI系統的魯棒性維護都是非常重要的。但是,安全專家的時間精力畢竟有限,如何在準確全面識別安全威脅的前提下,降低安全專家的時間成本就顯得十分關鍵。
對此,我們引入主動學習演算法,它是一種特殊的半監督學習,依靠安全專家對少量的AI識別出的結果進行人工校驗,從而不斷對原有演算法進行微調,直到最終收斂。主動學習裡有兩個因素非常重要,一是如何挑選供給人工校驗的識別結果,二是對於識別結果的糾正如何反饋到演算法模型中。通過主動學習,我們就可以構建不斷學習、不斷演變的SIEM系統,進而隨著與人的磨合,系統會變得越來越智慧,越來越準確。
2. 通過深度學習識別非直觀威脅
有些威脅或者異常本身不具備直觀表述性,甚至不能被向量化、離散化,最直接的例子就是加密流量。加密後的流量本身是人不可表述的,只是一層二進位制輸入流。還有些安全事件由於關聯業務太多,很難用語言來表述為什麼當初這個問題被判定為異常。對於這些問題,都可以嘗試使用深度學習的演算法來解決,不過深度學習要求有大量的標註樣本,只有在這個前提下,才能保證演算法的效果。這就要求企業在平時的SIEM系統執行中,就不斷增加對於威脅事件判定的積累,當資料積累到一定程度後,就可以使用深度學習演算法進行分析。
AI作為安全領域的顛覆性技術,與SIEM的結合將構建一個完全基於AI的、充分智慧的、低人工甚至無需人工介入的新一代SIEM@AI平臺,這將改變目前安全產品依靠策略設定的固有模式,成為新一代企業安全大腦。
2016年加入白山,主要負責雲聚合產品的研發管理和雲鏈產品體系構建等。
2006年至2015年就職於新浪,原SAE(SinaAppEngine)創始人,曾任總負責人兼首席架構師,2010年起,帶領新浪雲端計算團隊從事雲相關領域的技術研發工作。
現任工信部可信雲服務認證評委。