4

当 Linux 内核是主机内核时,应该不会受到来宾内核在虚拟机中执行的内容的不利影响。

我想通过模糊从客户内核到主机内核的接口来测试该属性。我似乎很清楚,测试需要在来宾内核中运行(例如,在内核模块中),生成任意代码,然后执行该代码。如果主机内核崩溃(或做一些“有趣”的事情),测试就会失败。

所以,我的问题是:

  • 您是否知道已经完成此任务的任何测试?
  • 是否有预期会导致我需要避免的主机内核崩溃的指令?
  • 在 Linux 内核中生成垃圾的最佳方法是什么?
  • 一旦我生成了垃圾,我该如何执行它?

目前,我想只关注一般的模糊测试方法。稍后,在我让这个测试工作后,我将对其进行更改,以通过手术对内核中的不同虚拟化指令和驱动程序进行模糊测试。

更新:在进一步考虑之后,用完全垃圾进行模糊测试是行不通的,因为我的客户机器崩溃的频率比我预期的主机崩溃的频率要高。所以,我认为我需要从一开始就通过外科手术来解决这个问题。有什么建议吗?

4

2 回答 2

3

在很大程度上发现严重的 0 天是关于编写富有想象力的测试。当您构建测试系统时,您需要识别其攻击面。在 Web 应用程序中,这很简单,GET/POST 请求。对于像虚拟机这样的东西,它更复杂。提供给您的实际硬件,是由 KVM 创建的假象。在某些时候,与该设备的数据交互将由主机处理。

其他重要资源是寻找已在您的目标中发现的漏洞。程序员经常会犯非常相似的错误,而类似的错误也很常见。 这些 CVE 的:CVE-2010-0297 CVE-2010-0298 CVE-2010-0306 CVE-2010-0309是 LLinux 的 KVM 漏洞的一个很好的例子。突出的两个硬件设备是 CPU 和 USB,它们都受到了损害。

Peach是一个非常强大的模糊测试平台。许多测试可以单独使用 XML 创建,尽管如果你知道 python,你可以扩展 peach 来做任何事情。

于 2011-04-20T16:22:42.890 回答
0

虽然模糊设备驱动程序通常很有效率,但其中大多数不是由 KVM 模拟的,而是由用户空间组件模拟的。USB 驱动程序,如前面的答案作为示例,完全由 QEMU 模拟。虽然为模拟 EHCI 驱动程序中的漏洞提供资金非常棒,但它不会是 KVM 漏洞,也不允许您开发内核漏洞利用。在 KVM 中模拟了一些驱动程序,例如某些 PIC 计时器(例如 i8254 和 i8259),但大多数都保存在用户空间中。

KVM 模拟的另一件事是某些指令。您可以通过模糊这些特定指令来模糊 KVM。阅读 KVM 源代码,了解哪些是最复杂的,以及如何触发最复杂或最敏感的行为。在 CPU 无法为来宾提供实模式执行 (unrestricted_guest=1) 的旧 CPU 架构上,甚至会模拟更多指令。

尤其是在利用指令仿真时,通常会涉及竞争条件。

于 2017-02-28T02:21:05.017 回答