APT防御的重要性毋庸諱言,為了幫助各位師傅在防御方面建立一個總體認識,本文會將APT防御方法分為三類,分別是:監(jiān)控、檢測和緩解技術,并分別進行梳理,介紹分析代表性技術。這一篇分析現有的監(jiān)控技術。
APT
這里不談APT概念,就是分享兩張最近看到的覺得描述APT非常契合的圖。
如果我們把APT分成6個攻擊階段的話,一種經典的劃分方式如下

或者也可以畫成金字塔

這里我們假設攻擊目標位于金字塔的頂端,側面表示攻擊進化的環(huán)境(如物理平面、用戶平面、網絡平面、應用平面等)。金字塔平面依賴于每個組織的細節(jié),并根據記錄事件的環(huán)境定義。假設APT組織能夠全面了解目標的所有設施以確定達到目標G的可行平面。那么為了達到目標G,攻擊者可以探索漏洞并通過從一個或多個平面“爬行”接近目標。因此,最終檢測到的APT就像一棵跨越多個平面的攻擊樹。
這么說不形象,我們可以上面這個金字塔展開

這個圖就很直觀了,圖中小點代表平面中記錄的事件,而彩色連接的事件代表相關事件,其表示可能的攻擊。path1表示物理平面的相關事件,path2和path3表示涉及多個平面的相關事件。
監(jiān)控
硬盤監(jiān)控
這主要針對落地文件而言。
每個終端都需要通過反病毒、防火墻或必要的內容過濾來監(jiān)控任何惡意行為。對系統(tǒng)上運行的軟件進行必要的修補程序,可以消除已知的漏洞,從而減少攻擊者的入侵點,否則這些漏洞可能會將惡意軟件傳播到網絡中容易受到攻擊的地方。這方面的技術其實比較成熟了,而且并不適用于APT攻擊,這里就不展開說明了。
內存監(jiān)控
現在更加流行的方法是內存監(jiān)控,這主要針對現在流行無文件、不落地攻擊手段而言的,這種攻擊手段一般通過使用一個已經在內存中運行的進行來執(zhí)行惡意功能,由于沒有單獨的進程在后臺運行,所以不會留下任何軌跡。比如卡巴斯基發(fā)現的Duqu,就是運行在一個已經運行的進程的內存中。
這個領域有很多優(yōu)秀的工作,這里簡單介紹幾個。
[1]通過分析Stuxnet、Duqu、Flame和Red October使用惡意軟件進行APT攻擊的活動進行檢測,其特點比較如下。

他們介紹了APT攻擊者所使用的規(guī)避技術,如rootkit功能、負載變化的端點掃描、網絡流量加密和混淆、隱寫術、內存中惡意軟件的執(zhí)行和假數字證書等。針對這些攻擊技術,作者建議通過補丁管理、強大的網絡訪問控制和監(jiān)控、嚴格的互聯(lián)網政策、協(xié)議感知的安全解決方案、監(jiān)控DNS查詢、監(jiān)控異常域的訪問、監(jiān)控網絡連接、蜜罐和蜜網,以及標準的基于主機的入侵防御系統(tǒng)作為APT的防御對策。
[2]提取出了不同類型的惡意軟件的特征,并提出了一個通用的解決方案用于檢測不同類型的惡意軟件。他們收集惡意軟件和良性樣本作為訓練數據,并從中提取污點圖(taint graph)。然后污點圖轉換成一個特征向量,在這個特征向量上應用標準分類算法來訓練模型。這個模型訓練完成后被用來識別系統(tǒng)上的惡意行為。他們使用了不同惡意軟件(鍵盤記錄、密碼竊取、后門等)的共同特征。這些惡意軟件通常表現出的特征是異常的信息訪問和處理行為。例如,鍵盤記錄和密碼竊取會攔截擊鍵輸入。在比如說,為了不被發(fā)現,后門要么使用不常見的協(xié)議(如ICMP),要么創(chuàng)建一個原始套接字,要么攔截網絡堆棧來與遠程攻擊者通信。基于ICMP的后門訪問ICMP流量,基于原始套接字的后門訪問所有具有相同協(xié)議號的報文。例如,TCP原始套接字可以接收到所有的TCP報文,這種后門攔截網絡棧的行為類似于網絡嗅探器,對網絡流量進行竊聽以獲取有價值的信息。這些特征都被作者利用來進行檢測。整個系統(tǒng)結構設計如下

下圖是一個污點圖的例子,反映了Windows用戶身份驗證的過程。當一個密碼竊取器在后臺運行時,它捕捉到密碼并將其保存到它的日志文件“c: ginallog .log”中。

再來看一個用污點圖表示Google Desktop處理傳入的web頁面的例子

該方案檢測結果如下

[3]提出了利用硬件輔助進行惡意軟件檢測的方案。作者發(fā)現,與運行的正常軟件相比,受感染的應用程序運行時會修改控制流/數據結構,而這種行為會反映在它的內存訪問模式中。所以可以通過處理器內監(jiān)視內存訪問來檢測,其內存訪問會查看虛擬地址以獲得更一致的簽名。他們使用系統(tǒng)調用、函數調用和完整的程序運行來檢測受感染程序的惡意行為。研究表明,不論是對用戶級還是和內核級威脅都是可用的,并且針對內核級rootkit實現高精度的檢測。其設計的框架如下所示

上半部分是訓練,下半部分是運行檢測。當使用system call檢測rootkit時,結果如下

可以看到,準確率非常的高,而且誤報率很低。
[4]通過虛擬內存消耗來識別應用程序進程的異常行為,實現對惡意軟件的檢測。因為作者認為相比于網絡操作或CPU利用率,內存使用的波動性較小,不易受到影響,而且使用的是虛擬內存而不是物理內存,因為后者不包含交換到硬盤的內存量。首先使用進程和psutil收集目標機器的內存指紋。然后通過機器學習算法,基于指紋、閾值和閾值因子為每個應用計算一個模型來檢測異常行為。下面用圖的方式可以幫助大家更好的理解其方案。
下圖是三個進程的虛擬內存的時間序列

從時間序列中捕獲的滑動窗口如下所示

當窗口大小為25時,6個進程的特征分布,圖中不同顏色代表不同應用

下圖展示了訓練階段的前三個步驟,可視化閾值。初始閾值為零(左);對于第二個數據點,它擴展到a(中間);在第三個點上,它擴展到b(右)

流量監(jiān)控
APT攻擊最關鍵的部分就是C&C通信行為,而且通信并不只發(fā)生一次,通常是在系統(tǒng)第一次被攻破后為了數據傳輸而反復進行。在終端層面監(jiān)視任何帶有新目的IP的網絡數據包、異常payload的數據包以及發(fā)送到同一IP的大量數據包等特征有助于識別來自終端的任何可疑行為。
從流量中可以看到很多關鍵信息。
先看最簡單的,從http請求中就可以看出GhosNet發(fā)往C2服務器的請求
這是php版本的

這是asp版本的

還可以從流量中看到challenge信息,如下所示就是RSA Poisonlvy樣本的256字節(jié)的challenge請求

這在一次成功的TCP握手之后,由poisivy生成的網絡流量,它從256字節(jié)的看似隨機的數據開始。這些字節(jié)組成一個challenge請求,以查看“客戶端”(即RAT控制端)是否配置了嵌入在“服務器”(即受害者)中的密碼。
同樣一個樣本,還能看到keep-alive請求

接下來我們看看這方面一些經典的工作。
[5]提出的方案可以從數千個終端中檢測出少數表現出可疑活動的主機。他們通過觀察多個主機間APT的關鍵階段,并將每個主機的分析結果與它們的過去以及所觀察到的網絡中的其他主機進行比較,從而生成一個排名前k個的可疑主機列表。由于他們的方案不需要檢測載荷,所以針對加密信道進行檢測也是可行的。其方案的示意圖如下

[6]重點關注跟蹤各種網絡對象(如主機、主機組和網絡),并確定它們是否存在威脅。他們將網絡流量活動從網絡流量采集到威脅分析分為五層,從多個不同的網絡傳感器(如網絡流、NIDS、蜜罐)中收集數據,然后在多個時間段提取和聚合特征,以創(chuàng)建一個樣本空間。然后使用有監(jiān)督模型進行識別。分層示意如下所示,大多數技術都是在第一層運行,處理來自傳感器的原始數據和事件。而作者的方法首先轉換數據,即第2層,然后在第3層及以上應用分類模型

這篇工作的可視化做得很棒,如下所示

有三種不同的可視化顯示了UDP行為(右上),TCP行為(左上)和所有協(xié)議(底部)。每個點代表一個行為特征空間中的一個主機,這些圖顯示了主機從“源到sink行為”,接收數據的主機在左邊,向系統(tǒng)發(fā)送數據的主機在右邊。
還對訓練完成的SVM進行了可視化如下所示

beacon通信在超平面的右下角,表明其檢測效果很不錯。
[7]是安全產商TrendMicro發(fā)布的APT報告,里面分析了不同的APT活動,如Taidoor、IXESHE、Enfal和Sykipot,這些惡意軟件使用已知的協(xié)議(如HTTP)與C&C服務器建立通信,通常通過三個端口80、443、8080配置。攻擊者通常使用這些端口,因為他們知道通常只有這些端口在防火墻級別是開放的。但是,這里的關鍵在于,攻擊者可能會使用這些端口來傳遞不匹配的流量類型,例如在80端口發(fā)送任何非http流量或在443端口發(fā)送任何非http流量。可以通過檢測這一特點實現預警。此外,作者認為,監(jiān)視網絡流量的時間和大小是另一個需要考慮的方面,因為惡意軟件通常會在給定的時間間隔向C&C服務器發(fā)送beacon,因此使用DNS請求或url監(jiān)視時間間隔可以對此進行檢測。另外,在多數情況下,盡管設計好的惡意軟件是使用HTTP進行C2活動的,但它們通常使用API發(fā)送請求,所以可以通過分析HTTP頭信息將API調用與典型的瀏覽器活動區(qū)分開來以實現檢測。
[8]利用基于流量的分析來檢測APT,而不是基于網絡,基于流量的分析將網絡流量聚合在一起,從而減少了需要分析的數據量,之后對APT通信進行統(tǒng)計建模,成功設計出確定性的檢測特征。其設計的框架如下所示

[9]則將APT攻擊與內部威脅的結合起來進行分析,將其表述為一個雙層博弈問題,并進一步確定了博弈雙方(防御者與APT攻擊者)的最佳對策,并證明存在納什均衡。防御者、APT攻擊者和內部威脅人員的相互作用表示如下

文中給了很多數學公式推導,這里不再重復了,直接看結果吧

圖3表示攻擊者和防御者在每個時間點的動作。我們可以看到攻擊者的穩(wěn)定狀態(tài)下的動作,即α是0.2,而防御者的穩(wěn)定狀態(tài)下的動作,即β是1。圖4為系統(tǒng)狀態(tài)向穩(wěn)定狀態(tài)的演化過程。穩(wěn)定狀態(tài)為0.1667。
表明最后確實達到了納什均衡。
代碼監(jiān)控
源代碼中可能存在的漏洞可以通過靜態(tài)分析技術(如污點分析和數據流分析等技術)來識別。此外,可以在執(zhí)行期間監(jiān)視代碼的性能,并確保代碼在其范圍內運行,不會訪問未經授權的內存區(qū)域與其他資源,這樣可以更早地識別出威脅。這一塊是一個非常大的領域,我們實驗室有其他小伙伴在研究,這里也不展開了,后續(xù)有機會的話單獨發(fā)文與各位師傅一起學習。
日志監(jiān)控
有很多日志都有助于檢測,比如內存使用日志、CPU使用日志、應用程序執(zhí)行日志、系統(tǒng)日志等。
日志種類、數量都很多,不同日志之間記錄的格式又是不同的,怎么將其聯(lián)系起來進行分析是非常重要的一個問題。[10]結合了網絡日志和主機日志來檢測惡意活動。他們從這些日志中提取了4類特征,身份特征,基于網絡流量的特征,基于服務的特征和基于認證的特征,然后使用皮爾遜相關系數來減少冗余,然后刪除那些對聚類沒有貢獻的特征,接著通過聚類以識別惡意活動。
下圖是據源IP地址聚合的防火墻數據中所選特征的經驗累積分布函數

下圖是由源IP地址聚合的系統(tǒng)日志數據中所選特征的經驗累積分布函數。

在原始的10維空間中進行聚類,使用DBSCAN聚類算法,對于參數值ε = 0.15和minPts = 21的防火墻數據,投影到前三個主成分用于可視化,效果如下

在指定參數后,DBSCAN識別出6個集群和一小組離群點。雖然從圖中看不出來,但在進行聚類的高維空間中,聚類之間的距離實際上相當遠。
在原始的28維空間中進行聚類。結合防火墻和系統(tǒng)日志數據的DBSCAN聚類,參數值設ε = 0.25和minPts = 20,投影到前三個主成分(PC)進行可視化

從上圖中可以看到有四個簇和一組離群點。雖然聚類在圖中看起來不是可分離的,但在進行聚類的高維空間中,它們是相當遙遠的。其中簇1代表正常行為,而簇2、3和4被分類為異常行為。為了分析攻擊的異常簇,我們計算每個簇的歸一化平均特征向量,如下所示

每一個小表的橫軸是特征,特征1 -18對應于從系統(tǒng)日志數據中提取的特性,而特征19 - 28對應于從防火墻日志中提取的特性。當根據異常簇的正常值對其排序時,我們可以認為簇2最有可能是惡意的,其次是簇4和簇3。由于簇群3只有唯一的IP地址,所以我們認為它只包含良性主機。
[11]分析DNS日志來識別受感染的內部主機與外部惡意域名之間的的“beacon”活動,他們認為這種行為會在網絡流和DNS日志中留下自己的記錄。作者提出了一種DNS日志分析和事件關聯(lián)的方法,通過考慮低延遲間隔時間,他們假設受感染的主機每天會與C&C服務器通信幾次。通過識別受感染的主機,它們將與相同可疑域通信的其他主機連接起來。首先對DNS日志進行預處理,過濾不需要的數據,僅從DNS日志中獲取IPv4地址。然后以圖的方式表示元數據,圖的頂點表示主機IP地址和域名,而每條邊對應于從內部主機到外部機器的一個查詢。
在Cobalt Strike中的Beacon大概就是如下所示

它可以使用SMB協(xié)議創(chuàng)建一個beacon,當然也可以使用HTTP或DNS等協(xié)議。初始任務是啟動一個beacon偵聽器來使用惡意payload并指定用于傳輸流量的端口號,payload提供兩個通信通道。以上圖為例,當域列表被提供之后,惡意軟件會檢查任務并通過HTTP或DNS下載它們。之后每次都要通過這些域,必須使用beacon向C2發(fā)送信號。如果一個域失敗或被阻塞,惡意軟件將進入休眠狀態(tài),直到下一個域可用。
該作者提出的基于DNS A記錄進行迭代檢測的方案流程如下

[12]同樣通過DNS日志分析來檢測APT惡意軟件和C&C通信活動。他們使用移動設備的DNS日志,他們的方法簡單來說就是給C2域名和普通域名打分。為了區(qū)分正常和異常(C&C)域,他們根據內部設備發(fā)起的DNS請求的數量,選擇正常域,提取15個特征,分為4大類:基于DNS請求和應答的特征,基于域的特征,基于時間的特征,以及基于whois的特征,然后通過分數進行識別。流程如下所示

所選的基于域名的特征總結如下表

下圖是驗證時,繪制的C&C域與普通域之間的距離差。

上圖中𝑥-軸代表不同的測試示例,前60個是C&C域名,后170個是普通域名。我們注意到,幾乎所有C&C域的平均距離都大于0.2。
下圖則展示了不同閾值的惡意軟件C&C域的檢測性能。檢測性能表明,當參數設置為 0.2時,異常檢測算法的誤報率和誤報率最低。

而針對日志中冗余數據、臟數據過多的問題,[13]提出了從臟日志中提取信息和知識的方法。首先通過網絡配置對日志數據進行過濾和規(guī)范化,然后將這些標準化數據處理成不同的特征,最后對這些提取的特征進行聚類,以確定任何可疑活動。他們使用了web代理日志、DHCP服務器日志、VPN服務器遠程連接日志、認證嘗試日志、防病毒掃描日志等不同來源的日志,然后根據目標、主機、策略和流量提取特征,通過適應性k-means聚類算法對特征進行聚類,最后成功找出行為與正常主機有顯著差異的主機,這些主機就是被攻陷的機器。