2011-04-20 25 views
4

應該是這樣的情況:Linux內核,當它是一個主機內核時,不應該受客戶內核在虛擬機內執行的內容的不利影響。如何編寫針對Linux KVM的模糊測試?

我想通過模糊guest虛擬機內核與主機內核的接口來測試該屬性。在我看來,測試需要在內核模塊中運行(例如,在內核模塊中),生成任意代碼,然後執行該代碼。如果主機內核崩潰(或者做了一些「有趣的事情」),測試就會失敗。

所以,我的問題是:

  • 你已經知道了實現這一目標的任何考試嗎?
  • 是否有指示預計崩潰我需要避免的主機內核?
  • 在Linux內核中生成垃圾的最好方法是什麼?
  • 一旦我產生垃圾,我該如何執行它?

目前,我只想關注一般的模糊方法。稍後,在我進行此測試後,我會將其更改爲通過手動模糊內核中不同的虛擬化指令和驅動程序。

更新:想進一步,具有完整的垃圾模糊化後是不會工作,因爲我會崩潰我的客人機的方式往往比我預期要崩潰我的主人。所以,我認爲我需要從一開始就手術。有什麼建議?

+0

有點雄心勃勃,也許你應該通過黑客攻擊一個更簡單的項目來削減你的牙齒。 – rook 2011-04-20 16:24:12

回答

2

在很大程度上尋找漿液0天是關於寫作富有想象力的測試。在構建測試系統時,您需要確定其攻擊面。在Web應用程序中,這很簡單,GET/POST請求。對於像虛擬機這樣的東西,它更復雜。提供給您的實際硬件是由KVM創建的幻想。在某些時候,與該設備的數據交互將由主機處理。

其他重要資源正在尋找已經在您的目標中發現的漏洞。程序員經常犯類似的錯誤,而類似的錯誤則很常見。 These CVE's: CVE-2010-0297 CVE-2010-0298 CVE-2010-0306 CVE-2010-0309,是LInux的KVM漏洞的一個很好的例子。突出的兩個硬件設備是CPU和USB,這兩個設備都受到了損害。

一個非常強大的模糊平臺是Peach。許多測試可以單獨使用XML來創建,但如果你知道python,你可以擴展桃來做任何事情。

+0

「富有想象力」與「雄心勃勃」相似嗎? :) – 2011-04-20 16:59:55

+0

感謝指向這些CVE的指針;我還不熟悉虛擬化設備的工作,所以我會用這些作爲起點。 – 2011-04-20 17:01:34

+0

我想知道如何使用內核模塊來連接Peach(python),但是?還是你有其他想法? – 2011-04-20 17:03:49

0

儘管模糊設備驅動程序通常具有生產力,但其中大多數不是由KVM模擬,而是由用戶空間組件模擬。 USB驅動程序,正如前面的答案給出的例子,完全由QEMU模擬。雖然資助仿真的EHCI驅動程序中的漏洞會非常棒,但它不會是KVM漏洞,並且不允許您開發內核漏洞。在KVM中有一些模擬的驅動程序,例如某些PIC定時器(例如i8254和i8259),但大多數都保存在用戶空間中。

KVM模擬的另一件事是某些指令。您可以通過模糊這些特定指令來模擬KVM。閱讀KVM源,瞭解哪些是最複雜的,以及如何觸發最複雜或敏感的行爲。在CPU無法爲來賓提供實模式執行的舊CPU架構(unrestricted_guest = 1)上,仿真了更多指令。

特別是當涉及到利用指令仿真時,通常會涉及競爭條件。