6

我目前在一所大学攻读计算相关学位,我目前的项目专注于寻找 Linux 内核中的漏洞。我的目标是对内核(针对 3.0 版)进行静态审计和“模糊测试”,以试图找到漏洞。

我的第一个问题是“简单”是否可以对 Linux 内核进行模糊测试?我听说有人对大量协议等进行模糊测试,但对内核模块却很少。我也明白,在 Linux 系统上,所有东西都可以看作是一个文件,因此肯定可以通过该接口输入到内核模块,不是吗?

我的第二个问题是:您建议使用哪种模糊器?如前所述,存在许多模糊协议的模糊器,但是我认为其中很多在攻击内核模块时没有用。显然有诸如 Peach fuzzer 之类的框架,它允许您从头开始“创建”自己的 fuzzer,并且据说非常出色,但是我反复尝试安装 Peach 无济于事,我发现很难相信它是合适的考虑到我在安装它时已经遇到的困难(如果有人知道任何体面的安装教程,请告诉我:P)。

我会很感激你能为我提供这个问题的任何信息。鉴于我选择的主题的广度,任何关于方向的想法总是非常感谢。同样,我想请人们不要告诉我从其他地方开始。我确实了解手头任务的规模,但无论如何我仍会尝试(我是一个蓝天思想家:P AKA 固执如牛)

干杯

史密斯

4

3 回答 3

6

我认为一个很好的起点是扩展 Dave Jones 的 Linux 内核模糊器 Trinity:http ://codemonkey.org.uk/2010/12/15/system-call-fuzzing-continued/和http://codemonkey.org .uk/2010/11/09/system-call-abuse/

每当他扩展一点时,Dave 似乎会发现更多的错误。基本思想是查看您正在模糊测试的系统调用,而不是传入完全随机的垃圾,让您的模糊器选择至少会通过实际系统调用代码中的基本健全性检查的随机垃圾。换句话说,您使用内核源代码让您的 fuzzer 比通常完全随机输入的系统调用更深入。

于 2011-09-26T23:08:00.040 回答
4

“模糊化”内核是描述目标的一种相当广泛的方式。从内核的角度来看,您可以

  • 尝试模糊系统调用
  • /dev 中的字符设备和块设备

不确定你想达到什么目标。

模糊系统调用意味着检查每个 Linux 系统调用 (http://linux.die.net/man/2/syscalls) 并尝试是否可以通过奇怪的参数值干扰常规工作。

模糊字符或块驱动程序意味着尝试通过 /dev-interfaces 以一种最终会导致奇怪结果的方式发送数据。

此外,您还必须区分非特权用户和 root 的尝试。

我的建议是将您的尝试范围缩小到您的提议的一个子集。实在是太宽泛了。

祝你好运 - 亚历克斯。

于 2011-09-26T20:17:58.600 回答
1

模糊测试的一种方法是通过系统调用模糊测试。

本质上,这个想法是进行系统调用,在整个可能值范围内对输入进行模糊测试——它是否保持在为系统调用定义的规范内并不重要。

于 2011-10-31T16:12:17.717 回答