【问题标题】:How to write fuzzing tests against the Linux KVM?如何针对 Linux KVM 编写模糊测试?
【发布时间】:2011-04-20 14:24:38
【问题描述】:

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

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

所以,我的问题是:

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

目前,我想只关注一般的模糊测试方法。稍后,在我完成此测试后,我将对其进行更改,以对内核中的不同虚拟化指令和驱动程序进行模糊测试。

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

【问题讨论】:

  • 有点野心勃勃,也许你应该通过破解一个更简单的项目来切齿。

标签: security linux-kernel virtualization fuzzing


【解决方案1】:

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

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

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

【讨论】:

  • “富有想象力”与“雄心勃勃”相似吗? :)
  • 感谢您提供指向这些 CVE 的指针;我还不熟悉虚拟化设备的工作,所以我会以这些为起点。
  • 我想知道如何将 Peach (python) 与内核模块连接起来?还是你有别的想法?
  • @Jeremy Powell,在 linux 中一切都是文件。设备可以在 /dev/ 中找到。一种廉价的模糊测试方法可能是让 peach 打开其中一个文件并开始写入设备。虽然如果您了解如何编写设备驱动程序,您会更加成功。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多