2011-04-20 26 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)上,仿真了更多指令。

特别是当涉及到利用指令仿真时,通常会涉及竞争条件。