指纹识别零日攻击的仿真器
Argos:指紋識別零日攻擊的仿真器
- 摘要
- 簡介
- 2.背景和相關工作
- 3.設計
- 4. 實現(xiàn)
- 4.1 擴展動態(tài)污點分析
- 4.1.1 標記
- 追蹤
- 4.1.3 防止污染數(shù)據(jù)的無效使用
- 生成簽名
- 4.2.1 提取數(shù)據(jù)
- 4.2.2 先進的取證
- 4.2.3 信息關聯(lián)
- 4.2.4 SweetBait
- 5 評估
- 5.1 性能
- 5.2 效果
- 5.3 簽名
- 6 結論
- 未來的工作
摘要
當現(xiàn)代操作系統(tǒng)和軟件變得越來越大也越來越復雜時,它們也更有可能包含bug,可能會允許攻擊者獲取非法途徑。對于成功的網絡或者系統(tǒng)保護來說,一種能夠識別攻擊并且快速產生策略的快速并且可靠的機制是至關重要的。在本文中我們提出了Argos,對于蠕蟲和人們精心設計的攻擊來說的一個封閉環(huán)境。Argos是建立在一個快速的x86模擬器上,它能夠在整個執(zhí)行過程中追蹤網絡數(shù)據(jù)來識別其無效用作跳轉目標,函數(shù)地址,指令等。此外,系統(tǒng)調用規(guī)則不允許網絡數(shù)據(jù)作為特定調用的參數(shù)來使用。當一個攻擊被發(fā)現(xiàn)時,我們對相應的模擬器狀態(tài)執(zhí)行“智能的”進程或者內核感知日志來進行更進一步的離線處理。此外,我們注入自己的取證溢出代碼來取代惡意的溢出代碼,來收集被攻擊進程的信息。通過將模擬器記錄的數(shù)據(jù)和從網絡上收集的數(shù)據(jù)相關聯(lián),我們能夠為免于負載編譯影響的漏洞利用生成精準的網絡入侵檢測簽名。整個過程能夠自動化的完成,并且?guī)缀鯖]有任何誤報,因此簽名的全球化規(guī)模的快速部署能夠實現(xiàn)。
隨著現(xiàn)代操作系統(tǒng)和軟件變得越來越大,越來越復雜,它們更可能包含漏洞,這可能使攻擊者獲得非法訪問權。快速,可靠的機制來識別和生成針對此類攻擊的疫苗,對于成功保護網絡和系統(tǒng)至關重要。在本文中,我們介紹了Argos,一種用于蠕蟲以及人類精心策劃的攻擊的遏制環(huán)境。 Argos建立在快速的x86仿真器上,該仿真器在整個執(zhí)行過程中跟蹤網絡數(shù)據(jù),以識別其無效用作跳轉目標,函數(shù)地址,指令等。此外,系統(tǒng)調用策略不允許將網絡數(shù)據(jù)用作某些調用的參數(shù)。當檢測到攻擊時,我們對相應的仿真器狀態(tài)執(zhí)行“智能”過程感知或內核感知日志記錄,以進行進一步的在線處理。此外,我們還插入了自己的取證shellcode,代替了惡意的shellcode,以收集有關被攻擊進程的信息。通過將仿真器記錄的數(shù)據(jù)與從網絡收集的數(shù)據(jù)相關聯(lián),我們能夠為不受有效載荷突變影響的漏洞利用產生準確的網絡入侵檢測簽名。整個過程可以自動化,并且?guī)缀鯖]有誤報,因此可以在全球范圍內快速部署簽名。
簡介
對自我傳播攻擊在網絡上傳播速度的評估,促使了對自動響應系統(tǒng)的大量研究。我們已經遇到過能夠在短短十分鐘內在網絡上傳播的蠕蟲,并且研究員宣稱更快的蠕蟲也是存在的。對于這種爆發(fā)速度來說,人類的干預太慢了,因此自動化的響應系統(tǒng)是必不可少的。在實踐中,這些系統(tǒng)的重要標準是:(a)能夠可靠的檢測各種零日漏洞,(b)能夠可靠的產生能夠被用于阻止攻擊的簽名,(c)方便部署
自傳播攻擊在Internet上的傳播速度促使人們對自動響應系統(tǒng)進行了大量研究。 我們已經遇到了僅在十分鐘之內傳播到Internet的蠕蟲,而且研究人員聲稱,甚至更快的蠕蟲也指日可待[40]。 對于此類爆發(fā),人為干預太慢,需要自動響應系統(tǒng)。 在實踐中,此類系統(tǒng)的重要標準是:(a)可靠地檢測各種各樣的零時差攻擊;(b)可靠地生成可用于停止攻擊的簽名;以及(c)具有成本效益的部署。
現(xiàn)有的自動化響應系統(tǒng)在攻擊檢測中傾向于導致相當大概率的誤報,并使用簽名[43,37,23,15,27]。大規(guī)模的誤報違反了一二條件。盡管這些系統(tǒng)可能在入侵檢測系統(tǒng)中扮演了一個重要角色,但他們并不適合全自動響應系統(tǒng)。
現(xiàn)有的自動響應系統(tǒng)在攻擊檢測和簽名使用中往往會產生相當大的誤報率[43、37、23、15、27]。 大量的誤報違反了前兩個標準。 盡管這些系統(tǒng)可能在入侵檢測系統(tǒng)(IDS)中發(fā)揮重要作用,但它們不適合用于全自動響應系統(tǒng)
眾所周知的一個能夠嘗試避免誤報的方法是動態(tài)污點分析。簡單來說,來自互聯(lián)網的不被信任的數(shù)據(jù)會被標記,當進行漏洞利用時(比如來自網絡的數(shù)據(jù)被執(zhí)行時),將會生成一個警報。這種技術被證明是可靠的,并且?guī)缀醪粫a生誤報。當前項目使用的能夠被分為(1)面向硬件的全系統(tǒng)保護,(2)特定于操作系統(tǒng)和進程的軟件解決方案。這里有兩個不同的方式,并且每一個方法都有重要的意義。對我們的目的來說,這些方法中最重要的就是Minos和Vigilante。
一種嘗試完全避免誤報的方法稱為動態(tài)污點分析。 標記來自網絡的賄賂,不受信任的數(shù)據(jù),并且僅在發(fā)生漏洞利用時(例如,當執(zhí)行來自網絡的數(shù)據(jù)時)才會生成警報(僅)。 事實證明,該技術是可靠的,幾乎不會產生誤報。 它在當前項目中使用,可以歸類為(i)面向硬件的完整系統(tǒng)保護,以及(ii)軟件中的OS和特定于過程的解決方案。 這是兩種不同的方法,每種方法都有重要的含義。 就我們的目的而言,這些方法的兩個最重要的代表分別是Minos [12]和Vigilante [28]。
Minos并不產生簽名,并且通過硬件來實現(xiàn)高效的調用。除此之外,它能夠僅僅通過查看物理地址檢測出漏洞利用攻擊,例如寄存器擴展攻擊,但是這還需要一個笨拙的黑客來攻擊。同樣,他也不能直接處理從物理地址到虛擬地址的轉換。
Minos根本不生成簽名,而有效部署依賴于硬件實現(xiàn)。 而且,僅通過查看物理地址,它可以檢測到某些漏洞利用,例如寄存器彈簧攻擊[39],但需要笨拙的黑客來確定攻擊的起源[13]。 而且,它根本無法直接處理物理地址到虛擬地址的轉換。
與之相反,Vigilante代表一個處理虛擬地址的每個進程的解決方案。同時,這也限制了它的靈活性,正如它無法處理DMA或者內存映射。同樣,由于Vigilante必須檢測單個服務并且根本不保護OS內核,因此出現(xiàn)了效率問題。不幸的是內核攻擊已經變成了現(xiàn)實,并且預計在未來會成為常態(tài)。對于簽名生成,它依賴于重播攻擊,由于與特定場景、隨機數(shù)等的挑戰(zhàn)/響應交互,這通常是不可能的。
相比之下,Vigilante代表一種使用虛擬地址的按進程解決方案。 同樣,這是一個設計由于它無法處理DMA或內存映射,因此限制了其靈活性的決定。 同樣,由于Vigilante必須檢測單個服務并且根本不保護OS內核,因此出現(xiàn)了成本有效的問題。 不幸的是,內核攻擊已成為現(xiàn)實,并有望在未來變得更加普遍[26]。 對于簽名生成,它依賴于重放攻擊,由于與隨機數(shù),隨機數(shù)等的質詢/響應交互,通常是不可能的
我們相信面向硬件的全系統(tǒng)解決方案和特定于操作系統(tǒng)和進程的軟件解決方案在這部分的開始時都受限于上述的三個條件。我們設計提出一個第三方案,結合了兩個世界的優(yōu)點并且滿足所有的要求。
我們認為,面向硬件的完整系統(tǒng)解決方案以及特定于操作系統(tǒng)和過程的軟件解決方案在本節(jié)開頭提到的所有三個方面都太受限制。 我們的設計提出了第三種方法,該方法結合了兩個方面的優(yōu)點并滿足所有標準
在本文中我們提到了Argos,它探索了自動化響應系統(tǒng)設計領域的另一個極端。首先,就像Minos,我們通過修改運行我們自己版本的動態(tài)污點分析的x86模擬器來在軟件中實現(xiàn)全系統(tǒng)的保護。換句話說,我們自動化的保護任何(未被修改的)操作系統(tǒng)和它所有的進程、驅動等。第二,Argos考慮到了復雜的內存操作,比如內存映射和DMA(通常被其他項目忽視),同時相當有能力處理復雜的exploit(比如寄存器爆發(fā))。這有很大概率是因為我們處理虛擬地址和物理地址的能力。第三,自動化產生簽名是基于漏洞利用中內存足跡的相關性以及網絡追蹤,作為結果:緩沖區(qū)溢出和格式化字符串或者代碼注入的漏洞利用將會觸發(fā)警報。第四,當系統(tǒng)是操作系統(tǒng)和應用時,如果檢測到攻擊,我們會注入特定于操作系統(tǒng)的取證shellcode。換句話說,在攻擊發(fā)生時,我們利用被攻擊的代碼來提取關于攻擊的額外信息,這些信息后來會被用于簽名的生成。第五,通過對比不同網站的簽名,我們優(yōu)化了Argos的自動生成的簽名。第六,簽名會自動分發(fā)到遠程入侵檢測和防御系統(tǒng)。(IDS和IPS)
我們專注于那些被遠程精心設計(就像蠕蟲)并且不需要使用者操作的攻擊。利用錯誤設置的安全策略的方法不能被解決。雖然那些攻擊構成了一個充足的安全問題,但是他們是在我們研究的另一邊,需要一個不同的方法。特別的,我們專注于exploit而不是攻擊的payload,也就是說,我們捕捉那些能夠觸發(fā)緩沖區(qū)溢出和注入代碼的代碼是為增加對機器的掌控,而不是捕獲攻擊行為。在我們看來,捕獲或者阻止exploit會更加的有用,因為離開了exploit實際的攻擊永遠不能執(zhí)行。更多的是,在實際中相同的exploit經常使用不同的payload,所以阻止exploit的收益可能是巨大的。此外,exploit相比于攻擊的payload更不易改變,并且即使是已經發(fā)生了改變,也更加容易捕獲。
Argos被設計作為‘廣告蜜罐’,也就是說,是一個運行真實服務的蜜罐,與普通蜜罐不同的是他并未被隱藏。而且,我們積極的鏈接它并且公布他的IP地址,讓利用命中訪問表的攻擊者(而不是隨機IP掃描來識別攻擊目標的攻擊者)能夠訪問。我們?yōu)榇烁冻龅拇鷥r不同于傳統(tǒng)的蜜罐,我們希望收到一定數(shù)量的合法流量(例如網絡爬蟲)。從另一個角度,既然Argos的目標是最為一個蜜罐,我們不需要表現(xiàn)得像是沒有被保護的系統(tǒng)。然而,他應該足夠的快來運行真實的服務,同時有合理的響應時間。
本文余下的內容如下:本文討論了相關工作,我們總結了各種方法在Section2,在Section3我們介紹了Argos的設計。實現(xiàn)的細節(jié)在Section4中討論。在Section5中評估這個系統(tǒng)。在Section6中總結。
2.背景和相關工作
攻擊者進攻主機時,最重要的是轉移主機控制流來來執(zhí)行他自己的指令,或者是用自己的控制流來替代主機的控制流。為了實現(xiàn)這個操作,攻擊者需要重寫數(shù)值,比如:跳轉目標,函數(shù)地址和函數(shù)返回地址。或者它也可以重寫函數(shù)的參數(shù)甚至是指令。這些攻擊在過去幾年尤為顯著并且能夠被劃分為以下幾類:
棧溢出攻擊:攻擊者利用漏洞使一個棧的緩沖區(qū)溢出來改寫函數(shù)的返回地址,當函數(shù)返回時,攻擊者可以執(zhí)行想執(zhí)行的任意代碼。
堆腐爛攻擊:利用堆溢出來允許攻擊者重寫任意的內存位置,最后可以執(zhí)行任意想執(zhí)行的代碼。
格式化字符串攻擊:這是最普遍的攻擊。他們利用printf()函數(shù)家族的特性:允許一定數(shù)目的字符被打印并被存儲在內存中。當用戶提供的字符串被當作一個格式化字符串使用時,攻擊者能夠操作字符串來用任意的代碼來改寫內存中的任意位置。這些攻擊為協(xié)調器提供了更多的選項,比如:execve()系統(tǒng)調用時要執(zhí)行的文件。
上述的這些攻擊方式已經被安全領域研究數(shù)年。Stackguard、Stackshield和gcc擴展已經被用于對抗棧溢出攻擊。后來的研究發(fā)現(xiàn):這些方法中很多都可以被輕易繞過。大多數(shù)操作系統(tǒng)通過補丁來讓棧不可執(zhí)行,但是這也帶來了其他的問題(比如:trampolines依賴于棧的可執(zhí)行,信號也同樣是),同樣有時也可以被繞過。緩沖區(qū)溢出的檢測和保護方法有很多。他們讓通過重寫特殊的地址來轉移控制流變得幾乎不可能,例如:通過修改代碼和數(shù)據(jù)存入內存的方式。相反,我們渴望一種能夠允許控制流但是在控制流嘗試轉移時能觸發(fā)警報的方法。除此之外,地址不應該被修改,因為我們致力于的是產生真實攻擊的可靠簽名。
一些現(xiàn)有的格式化字符串的保護方式是通過安裝補丁來實現(xiàn)對printf()的參數(shù)計數(shù)并且使用特定的形式來保證安全。這兩種方法都需要重新編譯代碼。代碼注入已經通過指令系統(tǒng)隨機化和非法地址執(zhí)行系統(tǒng)調用的檢測來解決。當我們想要產生簽名時,指令系統(tǒng)隨機化對我們的目的就沒有太大作用。Dome提供的系統(tǒng)調用保護可能很有趣,但是他的局限性(系統(tǒng)調用)和不方便(系統(tǒng)調用地址的合法性需要對每一個應用進行靜態(tài)分析)還是讓他被淘汰了。
一個不同的方法是通過硬件實現(xiàn)防御溢出和攻擊。例如:StackGhost在Sparc架構中保護棧。同樣的,可以使用動態(tài)信息流分析來防御溢出和一些格式化字符串的攻擊。對于最常使用的處理器或者操作系統(tǒng)來說,這些機理都不是普遍可用的,在我們看來并不如模擬。Dunlap和Garfinkel建議使用虛擬機。相同的工作在[42]中提出,它使用了Dynamo動態(tài)優(yōu)化器的修改版本。雖然Argos和這些項目在很多方面都不同,但我們使用了相同的方法,我們利用率基于x86架構的模擬器。
大多數(shù)與我們的工作相關的比如Minos和Vigilante,都像Argos一樣,利用了污點分析來發(fā)現(xiàn)外來數(shù)據(jù)的不合法使用。然而,和Argos的區(qū)別是多方面的。簡單來說,Minos是一個硬件項目,在現(xiàn)在,虛擬計算機的軟件實現(xiàn)會造成巨大的性能損耗(多達幾個數(shù)量級的變慢)。一旦發(fā)現(xiàn)異常,Minos也不會產生簽名。因為致力于硬件解決方案,Minos不得不犧牲在性能上的靈活性,同樣在硬件層面能夠獲得的信息也是非常有限的。例如:硬件只能獲得物理地址,然而復雜的攻擊往往都是虛擬地址,例如寄存器爆炸攻擊。除此之外,Minos幾乎不可能生成類似于Vigilante的那種的自我警報(SCAs)。相反,雖然Argos也是處理物理地址,但我們通過軟件模擬為我們提供訪問物理地址到虛擬地址的映射和寄存器等。
Vigilante和Argos至少有三個方面的不同:(1)它保護個人的進程(需要對每個進程的管理,并且把內核和沒有監(jiān)視的服務放入了危險的地位)(2)它特定于操作系統(tǒng)(3)它只處理虛擬地址。雖然方便,但是虛擬地址的缺點也是明顯的,比如內存映射的數(shù)據(jù)很難去核對。畢竟,那個地址空間應該被污染是一個復雜的問題。正是因為這個原因,Vigilante和大多數(shù)的其他項目不能夠處理內存映射區(qū)域。像Vigilante這類定位為應用級的方法也不能監(jiān)視DMA活動。相反,Argos使用物理地址并且處理內存映射和DMA一樣。
3.設計
Argos架構概括在圖1.完整的執(zhí)行路徑由六個主要步驟組成,由圖中的數(shù)字表示,這些數(shù)字對應于本節(jié)中圈起來的數(shù)字。傳入的流量既記錄在跟蹤數(shù)據(jù)庫中,又提供給運行在模擬器1上的未修改的應用程序/操作系統(tǒng)。在模擬器中,我們利用動態(tài)污點分析來檢測是否有利用漏洞來改變應用的控制流。這是通過識別是否使用了可能不安全的數(shù)據(jù)比如網絡數(shù)據(jù)。這里有三步來實現(xiàn):
RFID數(shù)據(jù)來源于被污染的數(shù)據(jù)源
再執(zhí)行過程中追蹤被污染的數(shù)據(jù)
識別并阻止污染數(shù)據(jù)的非法使用
換句話說,來自網絡的數(shù)據(jù)將被標記為污染數(shù)據(jù),無論什么時候他被復制到內存或寄存器中,那么相應的寄存器和內存也是被污染了的,當這些污染數(shù)據(jù)被使用時,比如說作為跳轉的目標,我們就會產生警報。到目前為止,這類似于[28]和[31]。像之前說的,Argos和據(jù)大部分現(xiàn)有的項目不同的是我們追蹤的的是物理地址而不是虛擬地址。結果,內存映射問題解決了,因為某個頁面的所有虛擬地址空間映射都指向相同的物理地址。
當一個違規(guī)操作被檢測到,會觸發(fā)警報,導致簽名的生成如階段3-6.為了幫助簽名的生成,Argos首先將所有的污染塊和一些額外的信息轉儲到文件中,標記出那些出發(fā)警報的特殊的地址,他們指向的內存區(qū)域等。因為我們有著計算機的全部權限、它的寄存器和它所有的映射所以我們能夠根據(jù)我們的需要將虛擬地址和物理地址轉換。轉儲的不僅僅是寄存器、物理內存塊和特殊的虛擬地址,事實上這些充足的信息并不只是用于簽名的生成,也是為了后面的手動分析。
此外,我們利用了一個新的技術來對于被攻擊的代碼進行自動取證。回想一下,Argos是與操作系統(tǒng)和應用程序無關的,也就是我們可以在IA32指令集架構上開箱即用任何操作系統(tǒng)和應用程序(要求是沒有修改或者是重編譯)。當檢測到攻擊時,我們甚至都不知道是哪個進程觸發(fā)了警報。為了發(fā)現(xiàn)關于應用的額外信息(例如:進程識別、可執(zhí)行文件的名字、打開文件和套接字等),我們注入我們自己的shellcode來執(zhí)行取證。換句話說,我們利用的是被攻擊的代碼和我們自己的shellcode。
我們強調的是即使沒有shellcode,Argos通過它成熟的特定于操作系統(tǒng)的特點仍然可以工作,盡管降低了準確度。在我們看來,一個包含了特定于操作系統(tǒng)擴展的與操作系統(tǒng)無關的框架能夠極大的提升性能,因為它是一個通用性的解決方案,而不需要降低性能或者準確度。據(jù)我們所知,我們是第一個使用攻擊手段(shellcode)來實現(xiàn)防御目的。
內存塊的轉儲(污染數(shù)據(jù),寄存器等)加上通過shellcode獲取的額外信息被用于與追蹤數(shù)據(jù)庫中的網絡數(shù)據(jù)產生相關性。對于TCP連接,我們在相關之前先重構流。相關階段的結果是一個真正的簽名,可以用于過濾。然而,我們不認為簽名是最優(yōu)的,所以我們嘗試提煉它。為了實現(xiàn)這個目的,Argos把提交給像SweetBait這樣的子系統(tǒng),子系統(tǒng)收集不同網站的簽名,并基于相似度來優(yōu)化簽名。例如:一個由exploit和被感染主機的IP地址組成的簽名在不同的網站會看起來有略微的不同。SweetBait發(fā)現(xiàn)兩個這樣的簽名之間的相似性,它會生成一個更短更加針對的簽名用于后面的篩選。
最后一步是自動化的使用簽名。連接SweetBait的是入侵檢測和防御系統(tǒng),SweetBait提供流量的簽名用于阻止或者追蹤。對于IDS我們使用的檢測器是基于著名的開源網絡IDS:snort,并且為了達到目的,SweetBait生成的是snort格式的規(guī)則。IPS是使用Aho-Corasick模式匹配算法來匹配網絡簽名的相對簡單的國產解決方案。盡管并不是非常復雜,我們還是把他作為Linux的內核組件以便于SweetBait的直接使用。在努力下,一個作者研究出了基于Intel IXP1200網絡處理器的高速IPS版本,能夠被用作一個選擇。從某種程度來說,SweetBait是智能的,它能夠區(qū)分惡意攻擊和稀有的事件并相應的傳播簽名。這類似于警方為危險罪犯而不是扒手(比方說)發(fā)放apb的方式。
本文的重點主要是步驟1-4,并且我們會限制我們總結SweetBait的實現(xiàn)。感興趣的讀者可以閱讀[32]中的細節(jié)。
4. 實現(xiàn)
在檢測到攻擊時,Argos通過給qemu提供污染和追蹤內存并產生內存足跡的方法來對qemu進行擴展。QEMU是一個快速且編寫的動態(tài)翻譯器,能夠模擬多種架構,比如:x86、x86-64、POWER-PC64等。不像其他的模擬器(比如Bochs),QEMU不是個解釋器。而是說,指令塊翻譯并緩存,因此如果相同的指令再次被執(zhí)行時,不用重復翻譯。此外,Qemu并沒有提供與硬件系統(tǒng)相當?shù)能浖?#xff0c;而是采用各種優(yōu)化來提高性能。因此,QEMU比大多數(shù)的模擬器都要快。
我們的實現(xiàn)通過擴展QEMU的奔騰架構。在本文的其他部分,它將被簡單的用作x86架構。為了清晰區(qū)分,我們以客戶機和主機來區(qū)分模擬出的系統(tǒng)和本地的系統(tǒng)。
我們把Argos的應用分為兩部分。第一部分包括我們擴展動態(tài)污點分析,可以用來保護QEMU,同時也可以在發(fā)現(xiàn)攻擊時發(fā)出警報。第二部分是提取模擬器和操作系統(tǒng)的關鍵信息來生成簽名。
4.1 擴展動態(tài)污點分析
Argos中的動態(tài)污點分析類似于其他項目中的。然而也有一些重要的不同。在這一節(jié)中,我們將會討論應用的細節(jié)。
4.1.1 標記
污點分析中的一個重點的實施決議就是標記的顆粒度。一般來說,一個標簽數(shù)據(jù)塊小的就1bit那么大,大的有4KB或者更大。我們選擇可變的顆粒度;物理內存中的每一個byte都標記,同時每一個CPU的寄存器都有一個標記。內存中的每一個字節(jié)標記不會產生任何額外的機算成本,也就是說:超過兩字的標記會產生更高的準確度。從另一個方面,寄存器中的每一個標記字節(jié)都會導致寄存器操作的復雜度提升,這是不能接受的。值得注意的是,修改Argos來使用不同的顆粒度是很容易的。因為性能的原因,為了方便后期的取證過程,內存和寄存器標記的本質也是不同的。
寄存器標記。這里有八個普通的x86架構的目的寄存器,給他們每個寄存器4B的標記。這個標記用于存儲產生寄存器內容的物理內存地址。部分寄存器和指令指針寄存器沒有被標記,它們通常被認為是不能被污染的。因為他們只能被暗中更改,因為他們的規(guī)則:他們是屬于系統(tǒng)保護的元素。標志寄存器也沒有被標記,認為它是不能被污染的,因為它經常受到操作的影響,包括不被信任的數(shù)據(jù),標記它會讓它不能區(qū)分惡意的資源和正常的資源。默認的,MMX和FPU寄存器也是被同樣處理的,盡管需要的話Argos也能夠標記它們。我們把標記這些寄存器僅僅作為一個選擇,因為它們涉及到很具體的操作,而這些操作通常于攻擊無關。考慮到性能,我們默認忽略它們。
內存標記。由于我們不為物理內存標記存儲任何額外的數(shù)據(jù),一個用于標記的二進制標記就足夠了。不過,也可以使用字節(jié)標志來增加內存消耗,以換取性能增強。這可能看似代價很大,但是注意的是我們標記的是物理內存而不是虛擬內存。盡管虛擬內存空間可能會很大(例如64位計算機上的2的64次方),但是物理內存卻不會那么大,通常只有512MB-1GB.此外,客戶的“物理”RAM不需要與主機上的物理內存對應,因此硬件資源的成本可以保持相當?shù)汀?梢栽诰幾g時配置要使用的方案。接下來我們將會探討這兩個標記方案的更多計劃。
位圖是一個大數(shù)組,每個字節(jié)對應內存中的8個字節(jié)。在位圖中,任何物理內存地址paddr的索引idx能夠通過首先移動地址右移3 (idx = paddr ? 3) 來定位包含標記位 (map[idx])的字節(jié)。單個的標記位能夠通過paddr (b = map[idx]L(0x01 ? (paddrL0x07)))的低三位找回。位圖的大小是客戶機可尋址物理內存RAMSZ (size = RAMSZ/ 8 ), 的八分之一,也就是說512MB的客戶系統(tǒng)的位圖會是64MB.
同樣的,一個字節(jié)圖也是一個大數(shù)組,每一個字節(jié)對應內存中的一個字節(jié)。每一個字節(jié)的物理地址paddr也是字節(jié)圖中的索引idx。它的實際大小等于客戶機實際可尋址物理內存RAMSZ (size = RAMSZ).
最后,傳入的網絡數(shù)據(jù)被標記為污點。因為這整個過程并不需要操作系統(tǒng)的參加,標記通過QEMU模擬的虛擬NE2000 NIC來執(zhí)行。操作系統(tǒng)通過兩個方法與外部設備交流:I/O端口和內存映射I/O。Qemu的虛擬網卡只支持I/O端口,而在x86架構中,這是通過輸入和輸出指令來執(zhí)行的。通過檢測并標記從NE2000中寄存器加載的指令和數(shù)據(jù)為污點,因為所有其他I/O端口的操作都會導致清除目的寄存器的標記。
追蹤
Qemu通過動態(tài)鏈接實現(xiàn)相應操作的函數(shù)塊,將所有來賓指令轉換為本機指令污點數(shù)據(jù)追蹤包括檢測這些操作標記的函數(shù),比如移動或者改變數(shù)據(jù)。除了寄存器和內存地址以外,我們認為可獲得的指令操作數(shù)包括直接的數(shù)值是沒有被污染的。我們將插裝函數(shù)分為以下幾類:
2或3個操作數(shù)操作;這是大多數(shù)常用的操作包括:ADD,SUB,AND,XOR等。如果目標操作數(shù)沒有被污染,則會導致將源操作數(shù)標記復制到目標操作數(shù)標記。
數(shù)據(jù)移動操作;這些操作將數(shù)據(jù)從一個寄存器移動到另一個寄存器,將源操作數(shù)標記復制到目標操作數(shù)標記。
單個寄存器操作;包括所有的LOAD,STRE,PUSH和POP操作。這些操作分別從內存中存取標記。
FPU,MMX或者SSE操作;由上所述,在這些通常被默認忽略,除非他們的結果被存儲在我們追蹤的寄存器或者內存中。在這些情況下,這些目的地會被清除。更多更加高級的指令比如SSE2和3DNow!不被QEMU支持。
沒有直接改變寄存器和內存的操作;這些操作包括NOP,JMP等。在追蹤數(shù)據(jù)時,他們大多數(shù)我們都不需要添加任何檢測代碼,但是為了識別他們的非法使用就需要,正如我們在接下來部分所講的。
清潔操作;某些相當復雜的指令常會清理他們目的操作數(shù)的標記。這是為了降低誤報的可能性。這樣的指令是旋轉左/右(ROR, ROL), BCD和SSE指令,以及雙精度移位。
幸運的是我們并不需要擔心特殊指令的使用,比如:xor eax、eax、sub eax 。這些在X86中被大量用于將寄存器設置為0,因為不像RISC,并沒有可獲得的零寄存器。QEMU確保將這些翻譯成一個能夠把零給目標寄存器的一個單獨的函數(shù)。當編譯這個函數(shù)時,它遵循本地架構歸零寄存器的習慣做法。
現(xiàn)在的系統(tǒng)提供了一個外設直接寫入內存而不需要消耗CPU循環(huán)的方法,也就是直接內存操作(DMA)。當操作系統(tǒng)使用的是DMA而不是從外設上獲取小塊的數(shù)據(jù)時,它將分配一大塊內存區(qū)域并把它的地址發(fā)給外設,外設可以直接寫入數(shù)據(jù)而不需要占據(jù)CPU。QEMU為像硬盤這類的組件模擬DMA。只要在Argos中執(zhí)行DMA內存寫入,就會被截獲,并清除相應的內存標記。
4.1.3 防止污染數(shù)據(jù)的無效使用
今天所觀察到的大多數(shù)攻擊都是通過將控制重定向到攻擊者提供的指令(例如,shellcode),或者通過小心地操作參數(shù)(返回到libc)來獲得對主機的控制。要使這些攻擊成功,必須用攻擊者提供的值加載主機的指令指針。在X86架構中,指令指針寄存器EIP通過下面的寄存器來加載:call,ret和jmp。通過檢測這些指令來確保被污染的數(shù)據(jù)是否加載到EIP中,我們利用這些方式來區(qū)分所有的攻擊。另外,我們還可以檢查是否在特定于模型的寄存器(MSR)或段寄存器上加載了受污染的值,但是到目前為止,我們還沒有遇到這種攻擊,我們也不知道它們的存在。
雖然這些方法捕獲了一個廣泛的漏洞類別,但僅憑它們是不夠的。例如,他們不能處理格式化字符串漏洞,這會允許攻擊者用任意的數(shù)據(jù)來重寫內存中的任意位置。這些攻擊不會直接用網絡數(shù)據(jù)重寫關鍵的值,并且可能不會被檢測到。因此,我們擴展了動態(tài)污染分析,以掃描代碼注入攻擊,否則無法捕獲這些攻擊。這可以簡單的通過檢查加載在EIP中的內存位置是否被污染來完成。
最后,為了解決僅僅基于更改關鍵函數(shù)參數(shù)的攻擊比如:系統(tǒng)調用,我們檢查了QEMU來檢查提供給系統(tǒng)調用比如execve()的參數(shù)是何時被污染。為了可靠地實現(xiàn)這個功能,我們需要一個關于操作系統(tǒng)在Argos上運行的提示,因為操作系統(tǒng)使用不同的系統(tǒng)調用。當前版本的Argos只支持Linux操作系統(tǒng)的這個特性,但我們計劃將其擴展到支持FreeBSD和MS Windows操作系統(tǒng)。
生成簽名
在本節(jié)中,我們將解釋如何在檢測到攻擊后提取有用的信息,如何生成簽名,以及如何通過關聯(lián)內存和網絡跟蹤來專門化簽名。此外,我們還展示了如何細化簽名,以獲得包含漏洞核心的小簽名。另外,與[28]等相關項目不同的是,我們有意研究了不需要重播攻擊的簽名生成方法。重播攻擊是困難的,例如,因為質詢/響應身份驗證可能會在交互中插入nonces。雖然我們知道有一個實例是在面對cookie和nonces[14]時實現(xiàn)重放,但是我們不相信當前的方法能夠處理最復雜的協(xié)議。
我們強調,本節(jié)描述的簽名生成方法只是第一個嘗試,主要用于演示如何使用合適的后端來利用Argos生成的豐富信息。我們目前正在探索更先進的方法。在我們看來,能夠插入不同的后端(簽名生成器)是非常有用的。
4.2.1 提取數(shù)據(jù)
一個確定的攻擊可以成為整個網絡安全社區(qū)資產,如果我們生成一個簽名成功在網絡層阻止它。為了達到這個目標,Argos導出有趣的客戶內存區(qū)域的內容進行離線處理。為了減少導出的數(shù)據(jù)量我們動態(tài)地判斷這次襲擊是發(fā)生在用戶空間還是內核空間。這是通過從Qemu的隱藏標志寄存器檢索處理器特權環(huán)位。內核總是運行在特權環(huán)0,所以我們可以通過觀察我們運行的環(huán)區(qū)分內核中的進程。
此外,每個進程都與內核共享其虛擬地址空間。操作系統(tǒng)通過分割地址空間來實現(xiàn)這一點。在Linux中使用3:1的分割,這意味著虛擬地址空間的四分之三被分配給進程,而四分之一被分配給內核。另一方面,Windows使用2:2分割。用戶/內核空間分割在大多數(shù)操作系統(tǒng)配置中都是預定義的,所以只要我們知道哪個操作系統(tǒng)正在運行,就可以使用靜態(tài)值。我們利用這些信息只轉儲相關數(shù)據(jù)。
為了確定哪些物理內存頁是需要記錄的,我們遍歷安裝在處理器上的頁目錄。在x86架構中,活動頁目錄的物理內存地址存儲在控制寄存器3 (CR3)中。注意,因為我們遍歷進程的虛擬地址空間,所以映射到多個虛擬地址的物理頁面將被記錄多次(每個映射一次)。
通過定位進程/內核可以訪問的所有物理頁面,并確保不會跨越用戶/內核空間分割,我們可以轉儲所有受污染的內存區(qū)域以及EIP指向的物理頁面,而不管其標記狀態(tài)如何。轉儲數(shù)據(jù)的結構如圖2所示。對于每個檢測到攻擊導出以下信息:日志格式(格式),客戶機架構(ARCH i386或x86 64),攻擊的類型(類型),時間戳(TS),登記內容和標簽(包括EIP及其起源),EFLAGS寄存器,最后記憶內容塊。每個內存塊前面都有以下標頭:塊的格式(format)、受污染的標記、塊的大小(以字節(jié)為單位)以及塊的物理(PADDR)和虛擬(VADDR)地址。接下來將寫入內存塊的實際內容。當所有的塊都被寫完時,轉儲的結束由一個只包含0的內存塊頭來表示。
所有這些都記錄在一個名為“ark .csi.RID”的文件中。其中RID是一個隨機ID,也將用于下面討論的高級取證。
從Argos提取的數(shù)據(jù)不僅僅用于簽名生成。通過記錄所有可能“有趣”的數(shù)據(jù),可以對攻擊進行徹底的分析。例如,考慮寄存器spring之類的技術,它們不會直接將控制流更改為注入代碼。通過記錄用于spring的合法代碼,并利用日志中存在的物理和虛擬地址,安全專家可以有效地對大多數(shù)(如果不是全部)攻擊進行逆向工程。
4.2.2 先進的取證
Argos的一個本質特征是它是過程不可知的。這給我們帶來了確定攻擊目標的問題。發(fā)現(xiàn)受害過程,提供有價值的信息,可以用來定位脆弱的主機,并協(xié)助簽名生成。為了克服這個障礙,我們提出了一個新穎的想法,使我們能夠在進程的地址空間中執(zhí)行代碼,從而允許我們收集有關它的信息。
目前,大多數(shù)攻擊通過注入匯編代碼(shell代碼)并將控制流轉移到進程的開頭來劫持進程。受上述啟發(fā),我們將自己的shell代碼注入到進程的虛擬地址空間中。在檢測到攻擊和日志記錄狀態(tài)后,我們將shell代碼直接放到進程的虛擬地址空間中。注入代碼的位置非常重要,經過各種實驗之后,我們選擇了地址空間開頭的最后一個文本段頁面。將代碼放在文本段中對于確保它不會被進程覆蓋很重要,因為它是只讀的。它還增加了我們不會覆蓋任何關鍵流程數(shù)據(jù)的可能性。有了適當?shù)膕hell代碼,然后我們將EIP指向它的開始執(zhí)行。
作為一個示例,我們實現(xiàn)了shellcode,它提取了受害進程的PID,并通過TCP連接將它與前面生成的RID一起傳輸。信息被傳輸?shù)皆诳蛻舳诉\行的進程,然后代碼進入一個循環(huán),迫使它永遠休眠,以確保它不會終止,但仍然處于休眠狀態(tài)。在另一端,客戶端的信息收集進程接收PID并使用它來提取操作系統(tǒng)給出的進程的信息。最后,將此信息傳輸?shù)街鳈C,并將其存儲在主機上。
取證過程通過運行顯示當前網絡連接狀態(tài)來檢索關于被攻擊進程的信息,或者如果顯示當前網絡連接狀態(tài)不可用,則打開端口[1]。上面的工具提供了進程的名稱,以及所有相關的端口。端口集可以用來限制我們在網絡跟蹤中的搜索(如4.2.3節(jié)所討論的),方法是丟棄發(fā)送到其他端口的流量。目前,取證可用于Linux和Win32系統(tǒng)。在未來,我們設想提取相同或更多的信息,而不需要在客戶端使用第三個過程。
4.2.3 信息關聯(lián)
從客戶端收集的內存指紋,以及使用高級取證技術提取的信息,隨后與客戶端和攻擊者之間交換的數(shù)據(jù)的網絡跟蹤相關聯(lián)。我們使用tcpdump捕獲流量,并將其直接存儲在定期垃圾收集的跟蹤數(shù)據(jù)庫中,以清除舊的流量流。在Argos的下一個版本中,我們使用自產的FFPF框架來捕獲流量,它允許我們在不同的跟蹤[6]中轉儲不同的流量。
收集到的網絡跟蹤首先通過重新組裝TCP流進行預處理,以形成發(fā)送給客戶機的數(shù)據(jù)的連續(xù)圖像。對于流重新組裝,我們構建在開源的ethereal library5上。這使我們能夠檢測被有意地拆分為多個包或作為TCP碎片的一部分的攻擊。
當前版本的Argos使用取證提供的攻擊端口號過濾掉無趣的網絡流。此外,轉儲的內存內容也減少了。EIP的標記值用于在網絡跟蹤中定位主要負責攻擊的受污染內存塊。此塊以及其余的網絡流將被處理,以識別可以用作簽名的模式。Argos使用兩種不同的方法來定位這些模式:(i)最長公共子串(LCS)和(ii)關鍵利用串檢測(CREST)。
(i) LCS是一種流行的快速算法,用于檢測多個字符串之間的模式,其他自動簽名生成項目[27]也使用LCS。該算法的名字不言自明:它查找內存和流量跟蹤中常見的最長的子字符串。然后,連同受攻擊的端口號和協(xié)議一起生成Snort簽名。雖然這個方法看起來很有前途,但是它在我們的設置中并沒有很好地工作,因為跟蹤和內存之間的公共子字符串(顯然)很大。雖然我們仍在改進LCS簽名生成,但我們已經取得了迄今為止最好的結果
(ii) CREST是一種新的算法。其開發(fā)背后的動機是Argos的輸出提供了關于攻擊內部工作的重要見解。轉儲信息允許我們生成針對觸發(fā)攻擊的字符串的簽名,因此這可能是非常準確的,并且不受多態(tài)性等技術的影響。利用物理內存源(OEIP)和虛擬內存值(VEIP),我們可以鎖定充當攻擊者立足點來控制賓操作系統(tǒng)的內存位置。CREST的優(yōu)勢在于它能夠捕捉到攻擊的第一部分,而這一部分是不易改變的。當前版本的CREST基于此攻擊字符串生成簽名。然而,我們現(xiàn)在正在開發(fā)CREST的一個更高級的實現(xiàn),在這個實現(xiàn)中,我們試圖準確地隔離導致該漏洞的網絡跟蹤的(最小)部分。
當前CREST的實現(xiàn)相當簡單。本質上,我們將VEIP定位在與應用程序s端口對應的網絡跟蹤中,然后將跟蹤擴展到左邊和右邊。換句話說,我們將內存轉儲中OEIP上下的各個字節(jié)與VEIP在網絡跟蹤中的位置之前和之后的字節(jié)進行匹配。當我們遇到不同的字節(jié)時,我們會停下來。Argos使用產生的字節(jié)序列,并將其與端口號和協(xié)議組合起來,以snort規(guī)則格式生成簽名。以這種方式生成的簽名通常大小合理,只有幾百字節(jié),因此可以立即使用。此外,正如我們在第4.2.4節(jié)中所示,稍后將改進簽名,使其更小。
請注意,盡管我們目前只使用了少量的操作,但是對于簽名生成,我們能夠處理大量的信息。實際上,Argos產生的信息比其他項目多得多[12,28],因為我們可以完全訪問物理和虛擬內存地址、寄存器、EIP等。因此,即使它被證明是非常有效的,即使在其目前的形式,CREST應該被認為是一個正在進行的工作,當前的實現(xiàn)是一個概念驗證。例如,CREST將無法為格式字符串攻擊或任何成功的攻擊生成簽名
在我們的系統(tǒng)的下一個版本中,我們計劃跟蹤每個受污染的內存單詞在網絡跟蹤中的確切起源。因此,我們將不再需要掃描特定字節(jié)模式的跟蹤。相反,我們將能夠直接查明網絡跟蹤中有問題的字節(jié),從而大大提高簽名生成方法的速度和準確性。
Argos簽名生成的最后一個特性是它能夠同時生成流簽名和包簽名。如前所述,流簽名完全由字節(jié)序列組成。另一方面,對于包簽名,Argos將字節(jié)序列映射回各個包。換句話說,如果一個簽名包含一個以上的數(shù)據(jù)包,Argos將把它分成幾個組成部分。當我們跟蹤組成完整流的各個包的貢獻時,我們甚至能夠處理相當復雜的情況,例如重疊的TCP段。包簽名對于不執(zhí)行流重新組裝的IDS和IPS實現(xiàn)非常有用。
4.2.4 SweetBait
SweetBait是一個自動簽名生成和部署系統(tǒng)[32]。它從多個來源(如蜜罐)收集類似于snort的簽名,并對其進行處理以檢測相似性。雖然Argos是這個項目的主要投入,我們也將SweetBait連接到基于honeyd[33]和蜂巢[27]的低交互的蜜罐。應該提到的是,為了處理不同性質的簽名,SweetBait會鍵入它們以避免混淆。誘餌子系統(tǒng)如圖3所示。
誘餌子系統(tǒng)的大腦由控制中心(CC)組成。CC維護一個不斷更新的攻擊簽名數(shù)據(jù)庫,并根據(jù)其簽名預算將最嚴重攻擊的簽名推送到一組IDS和IPS傳感器,本節(jié)稍后將對此進行解釋。除了IDS/IPS傳感器,我們還將一組Argos蜜罐與每個CC聯(lián)系起來。蜜罐通過ssl保護的通道將它們的簽名發(fā)送到它們的CC。簽名由CC收集并與已知簽名進行比較。本質上,它使用LCS來查找簽名之間的重疊量。如果兩個簽名足夠相似,它就得出結論:LCS代表了針對攻擊的更專門的簽名,并安裝了一個新的簽名版本,該版本不支持舊的簽名。通過這種方式,我們試圖定位簽名的不可變部分,并刪除可變部分,如目標ip、主機名、攻擊有效載荷等。這樣做可以減少收集到的簽名的數(shù)量到一個可管理的規(guī)模。例如,我們使用了低交互(蜂蜜/蜂窩)蜜罐的SweetBait(因為這些蜜罐的簽名比Argos的簽名大得多),并且能夠將三天內生成的數(shù)千個簽名減少到少于30個(圖4)。
專業(yè)化過程主要由三個參數(shù)控制。最小匹配參數(shù)m表示兩個簽名在CC確定它們是相同簽名的變體之前的最小重疊量。值m表示為已知簽名大小的百分比。例如,m = 90%意味著新簽名應該至少匹配數(shù)據(jù)庫中已經存在的簽名的90%,以便將其歸類為此簽名的變體。最小和最大長度參數(shù)L和M分別表示可接受簽名的最小和最大長度。例如,L = 10和M = 1500意味著要接受簽名并將其存儲在數(shù)據(jù)庫中,簽名的長度應該大于10字節(jié),小于1500。
這些參數(shù)的最優(yōu)值隨簽名的性質而變化。例如,如果簽名可能是不相關的,例如虛擬蜜罐/蜂巢生成的簽名,m應該很大,以確保簽名確實是相關的。雖然在這種情況下,參數(shù)的最佳選擇是一個仔細調優(yōu)的問題,但是我們在處理Argos簽名時處于一個更好的位置。畢竟,在這里我們可以強制子系統(tǒng)只比較已知相關的簽名。例如,通過在專門化期間只比較簽名與相同的VEIP,我們知道只考慮類似的利用。本質上,我們可以將m和M分別設置為任意低和任意高的值,并讓L完全控制這個過程。L的值是通過查看snort框架使用的實際簽名的大小來確定的。在snort中,大多數(shù)規(guī)則的內容字段都非常小,通常小于10個字節(jié)。通過選擇稍微大于這個值的值,簽名可能既準確又小。在實踐中,我們對Argos生成的簽名使用L = 12,并確保Argos在一個單獨的桶中生成相關的簽名(例如,具有相同的VEIP),然后由SweetBait作為一個單獨的組進行處理。
SweetBait將簽名的最終版本部署到網絡IDS和IPS。為了保證所連接的IDSs和IPSs的性能水平提高,并處理IDSs和IPSs的異構能力,可以指定字節(jié)數(shù)的簽名預算,以便推送到傳感器的簽名數(shù)不超過某個級別。
為了確定將被推送到傳感器的簽名,SweetBait使用網絡IDS傳感器來估計相應攻擊的毒性。由IDS生成的警報的密度被用作攻擊的一個指示器,這反過來又決定了一個簽名是應該推送到防御系統(tǒng),還是仍然處于監(jiān)視狀態(tài)。換句話說,由許多站點頻繁報告的簽名比由較少數(shù)量的蜜罐報告的簽名具有更高的毒力估計,因此更有可能被推送到IDS/IPS傳感器。此外,可以手動將簽名標記為有效或無效,以增加確定性。IPS傳感器是否根據(jù)未手動標記為有效的簽名自動阻塞流量是一個可配置的參數(shù)。關于IPS傳感器的詳細信息超出了本文的范圍,可以在[32]和[22]中找到。
SweetBait子系統(tǒng)的一個重要特性是它能夠在全球范圍內交換簽名。全球范圍的協(xié)作對于識別和防止“零日”攻擊是必要的,而SweetBait通過全球控制中心(GCC)使這在一定程度上成為可能。GCC收集簽名和統(tǒng)計數(shù)據(jù)的方式與CC類似,主要的區(qū)別是在將簽名推給CCs時缺少簽名預算。
CC定期與GCC交換信息。這包括新生成的簽名,以及已知簽名的活動統(tǒng)計信息。GCC接收到的統(tǒng)計數(shù)據(jù)與本地生成的統(tǒng)計數(shù)據(jù)一起累積,以確定蠕蟲的攻擊性。這種積累確保了即使CC本身尚未受到攻擊,它也能夠對全球暴發(fā)作出反應,從而實現(xiàn)受保護網絡的免疫。同樣,我們使用SSL保護了CC和GCC之間的所有通信。
5 評估
我們從兩個方面來評估Argos:性能和有效性。雖然性能對于蜜罐來說并不重要,但它需要足夠快才能及時生成簽名。
5.1 性能
對于實際的性能度量,我們將在Argos上運行的代碼的速度與在沒有仿真的情況下運行的代碼的速度進行比較。我們這樣做是為了各種現(xiàn)實的基準,即在現(xiàn)實生活中,基準也用于比較PC性能。請注意,雖然這是一種顯示Argos引起的減速的誠實的方法,但它不一定是最相關的度量方法。畢竟,我們不使用Argos作為桌面,而且在實踐中幾乎不關心結果是否比沒有模擬時顯示得快得多。只有當攻擊者決定避開運行緩慢的主機時,才會出現(xiàn)減速問題,因為主機可能是一個蜜罐。據(jù)我們所知,這種蠕蟲在實踐中并不存在。
通過對比觀察到在Argos和未修改的Qemu的各種配置以及原始主機上運行的客戶機的減速,進行了性能評價在這些實驗中使用的主機是一臺AMD AthlonTM XP 2800在2 GHz, 512 KB的L2緩存,1 GB的RAM和2個IDE UDMA-5硬盤,運行Gentoo Linux內核2.6.12.5。來賓操作系統(tǒng)在Qemu 0.7.2和Argos之上運行SlackWare Linux 10.1和內核2.4.29。為了改善客戶的磁盤I/O性能,我們沒有將文件用作硬盤映像,而是專用于其中一個硬盤。
量化觀測放緩我們使用bunzip2和apache。bunzip2是一個CPU密集型UNIX減壓效用。我們用它來把Linux內核v2.6.13解壓源代碼(約。38 MB),測量其執(zhí)行時間使用另一個UNIX實用程序。Apache,另一方面,是一個流行的web服務器,我們選擇,因為它使我們能夠測試網絡服務的性能。我們測量它的吞吐量最大的每秒處理請求使用httperf HTTP性能工具。httperf是能夠產生高的單一文件要求確定web服務器的最大容量。
除此之外,我們還使用了BYTE magazine的UNIX基準測試。這個基準測試(簡寫為nbench)執(zhí)行各種CPU密集型測試以生成三個索引。每個索引對應CPU的整數(shù)、浮點數(shù)和內存操作,并表示它與233mhz的AMD K6TM的比較情況。
圖5顯示了評估的結果。我們在主機上測試了基準測試應用程序,在運行原始Qemu的客戶機上測試了基準測試應用程序,并在不同的Argos配置下測試了基準測試應用程序:使用bytemap,使用啟用了codeinjection檢測的bytemap。如圖所示,分別為Vanilla QEMU、argoso - b和argoso - b - ci。y軸表示與沒有仿真的相同測試相比,測試慢了多少倍。xaxis顯示了測試的2個應用程序以及nbench報告的3個索引。圖中的每種顏色都是經過測試的配置,從上到下依次是:未修改的Qemu、使用bytemap進行內存標記的Argos,以及啟用了代碼注入檢測的Argos。表1還顯示了Apache的吞吐量(以每秒處理的請求數(shù)計算)。
即使在最快的配置中,Argos至少比主機慢16倍。然而,大部分開銷是由Qemu本身引起的。帶有所有附加儀器的Argos速度最多比vanilla Qemu慢2倍。特別是在apache和float操作的情況下,只有18%的開銷。這是由于缺乏一個真實的網絡接口和仿真器中的硬件FPU,這導致了大部分的開銷。此外,我們強調,我們沒有使用任何Qemu可用的優(yōu)化模塊。這些模塊將仿真器的性能提高到本機系統(tǒng)的一半左右。盡管我們很可能無法實現(xiàn)同樣大的提速,但我們有信心實現(xiàn)這么大的優(yōu)化
此外,盡管性能損失很大,但個人使用Argos的經驗告訴我們,這是可以忍受的。即使在執(zhí)行需要大量圖形的任務時,這臺機器也為把它當作桌面機器使用的操作人員提供了良好的可用性。此外,我們應該記住,Argos不是作為一個桌面系統(tǒng)設計的,而是作為一個托管宣傳的蜜罐的平臺。性能不是我們主要關心的問題。盡管如此,我們仍計劃推出一些新功能,以進一步提高Argos未來版本的性能。[4]中描述了一個相關的項目,它采用了類似的方法,但主要關注性能,同時考慮保護桌面。
5.2 效果
為了確定Argos在捕獲攻擊方面有多有效,我們針對運行在其上的Windows和Linux操作系統(tǒng)發(fā)起了多次攻擊。對于Windows 2000操作系統(tǒng),我們使用Metasploit framework7,它提供了隨時可用的漏洞,以及一種方便的方式來啟動它們。我們測試了我們能夠獲得軟件的所有漏洞。特別地,所有的攻擊都是針對操作系統(tǒng)的專業(yè)版本所提供的軟件中的漏洞進行的,除了第三方軟件War-FTPD ftp服務器。雖然我們也成功地在Argos上運行了其他操作系統(tǒng)(如Windows XP),但我們只是剛剛開始對它進行評估。對于Linux操作系統(tǒng),我們分別創(chuàng)建了兩個包含堆棧和堆緩沖區(qū)溢出的應用程序,還使用了nbSMTP,這是一個SMTP客戶端,它包含一個遠程格式字符串漏洞,我們使用一個公開可用的漏洞對其進行了攻擊。
表2列出了測試的漏洞以及底層操作系統(tǒng)及其相關蠕蟲。對于Windows,我們只列出了相當著名的漏洞。所有的攻擊都被Argos成功捕獲,因此被攻擊的進程被停止以防止從執(zhí)行中利用有效載荷。此外,我們的取證shell代碼執(zhí)行成功,在攻擊時為我們提供了進程名、id和開放端口號。
最后,在性能評估和攻擊準備過程中,Argos并沒有產生任何關于攻擊的錯誤警報。少量的誤報對自動響應系統(tǒng)至關重要。盡管這些結果并不能不可否認地證明Argos永遠不會產生假陽性結果,但是考慮到已經測試了大量的漏洞,這可能表明Argos是相當可靠的。出于這個原因,我們暫時決定按原樣使用簽名,而不是生成自認證警報(SCAs[28])。但是,如果將來出現(xiàn)誤報,Argos非常適合生成SCAs。
5.3 簽名
評估的最后一部分涉及簽名生成。為了說明這個過程,我們詳細解釋了Argos為表2中列出的Windows RPC DCOM漏洞生成的簽名。
我們使用Metasploit框架,針對3個不同的Argos實例,使用不同的ip,使用上面提到的相同漏洞,用不同的有效負載發(fā)起3次攻擊。這樣做的動機是為了迫使Argos為相同的漏洞生成不同的簽名。在本實驗中,我們使用CREST算法(第4.2.3節(jié))來生成簽名,并將其提交給SweetBait子系統(tǒng)。
在關聯(lián)過程中,CREST通過網絡跟蹤進行搜索,并重構相關TCP流的字節(jié)流。注意,簽名生成器考慮的日志通常相當短,因為我們可以使用自建的FFPF框架[6]將不同的流存儲在不同的文件中。因此,CREST可能會忽略很久以前完成的流,以及流向其他端口的流,而不是流向取證報告中報告的端口。簽名生成時間包括各種大小日志的TCP重新組裝如圖6所示。
如4.2.4節(jié)所述,SweetBait被配置為執(zhí)行積極的簽名專門化。在接收到所有簽名后,我們檢查了它的數(shù)據(jù)庫,發(fā)現(xiàn)它成功地將這些簽名歸類為同一攻擊的一部分,并根據(jù)它們的相似之處生成了一個專門的簽名。簽名的大小有效地從大約180字節(jié)減少到只有16字節(jié),如圖7所示。該圖顯示了原始簽名的有效載荷部分,由沒有誘餌子系統(tǒng)的Argos生成,以及誘餌的專業(yè)化。簽名以snort規(guī)則中表示內容字段的方式表示,即,可打印字符序列顯示為字符串,而不可打印字節(jié)序列由字符|在左右包圍,并由其十六進制值表示。注意,在每個原始簽名中都可以找到SweetBait生成的專用簽名,如圖7中的框所示。
此外,我們使用專門的簽名來掃描善意的網絡跟蹤,以確定是否可能產生誤報。除了自產的痕跡,我們使用了RootFu DEFCON8競爭網絡痕跡,這是公開的研究目的。我們首先通過使用開放源碼社區(qū)snort規(guī)則(使用從snort9獲取的規(guī)則)掃描跟蹤,從而驗證該漏洞不存在于跟蹤中。接下來,我們用Argos生成的簽名掃描它。同樣,沒有(錯誤的)警報。
盡管我們的簽名生成算法相當簡單,但是通過SweetBait子系統(tǒng)和在多個Argos網站的部署,我們能夠以非常小的誤報概率自動生成簽名。
6 結論
在本文中,我們討論了自動化入侵檢測和響應系統(tǒng)設計領域的一個極端:一個基于x86仿真器的純軟件全系統(tǒng)解決方案,它使用動態(tài)污染分析來檢測漏洞并保護未修改的操作系統(tǒng)、進程等。通過選擇一個有利的位置,結合來自硬件級別(例如,物理地址的感知、內存映射和DMA)和更高級別(虛擬地址、每進程取證)的有吸引力的屬性,我們相信我們的方法能夠滿足自動響應系統(tǒng)的需求
一旦檢測到攻擊,系統(tǒng)就會立即導出受污染的內存塊和附加信息,然后將取證外殼代碼注入到受攻擊的代碼中,以提取附加信息(例如,可執(zhí)行名稱和進程標識符)。接下來,它將內存塊與網絡跟蹤關聯(lián)起來以生成簽名。來自多個站點的類似簽名隨后被細化以生成更小、更專業(yè)的簽名,這些簽名隨后被傳輸?shù)饺肭址烙到y(tǒng)。不使用任何仿真器優(yōu)化模塊的性能比不使用仿真器運行的代碼要慢得多。即使如此,由于我們的預期應用領域是(廣告)蜜罐,我們相信開銷是可以接受的。更重要的是,該系統(tǒng)被證明是有效的,并被用于捕獲和指紋一系列真正的漏洞。
未來的工作
我們整個項目的重點是檢測真正的攻擊和生成可用的網絡簽名。由于我們還沒有遇到誤報,所以這些簽名應該直接使用,例如在我們自己的[22]這樣的IPSs和snort[35]這樣的IDSs中。在誤報的情況下,我們計劃生成自認證警報[28]的簽名。未來的研究還涉及更先進的簽名生成和攻擊的自動分析。
總結
以上是生活随笔為你收集整理的指纹识别零日攻击的仿真器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3D游戏编程与设计-游戏分类与热点探索
- 下一篇: scala case 常用简写