内核:禁用 /dev/kmem 和 /dev/mem

内核:禁用 /dev/kmem 和 /dev/mem

我了解这一点/dev/kmem/dev/mem提供对系统内存(即原始 RAM)的访问。我还知道,/dev/kmem可以在内核中完全禁用它,并且可以限制/dev/mem.

在我看来,对内存进行原始访问对于开发人员和黑客来说可能很有用,但为什么我需要通过/dev/mem. AFAIK 它不能在内核中禁用(与 不同/dev/kmem)。在我看来,访问可能被滥用/利用的原始内存只是自找麻烦。

它有一些实际用途吗?是否有任何用户程序需要它才能正常工作?

答案1

Scale 7x 2009 有一个幻灯片,标题为:破坏 Linux 内核:通过 /dev/mem 注入恶意代码里面有这两颗子弹。

谁需要这个?

  • X 服务器(视频内存和控制寄存器)
  • 剂量μ

从迄今为止我从搜索中发现的所有内容来看,这两种子弹似乎是合法用途的领先者。

参考

答案2

值得注意的是,即使您禁用了该内存/dev/mem/dev/kmem仍然可以转储;看看man proc就知道了/proc/kcore;它是系统物理内存。一个非常好的取证工具包rekall 有一个工具可以做到这一点;它转储内存(和/boot文件)以便可以分析它们。

事实上,Ubuntu 默认禁用/dev/kmem:

/dev/kmem除了攻击者使用它来加载内核 rootkit 之外,现代没有更多的用途。CONFIG_DEVKMEM设置为“n”。虽然/dev/kmem设备节点仍然存在于 Ubuntu 8.04 LTS 到 Ubuntu 9.04 中,但它实际上并未附加到内核中的任何内容。

Ubuntu 不禁用/dev/mem因为应用程序需要它

某些应用程序 (Xorg) 需要从用户空间直接访问物理内存。存在特殊文件/dev/mem来提供这种访问。过去,如果攻击者拥有 root 访问权限,就可以从此文件查看和更改内核内存。引入内核选项CONFIG_STRICT_DEVMEM是为了阻止非设备内存访问(最初名为CONFIG_NONPROMISC_DEVMEM)。

如何禁用/proc/kcore

CONFIG_PROC_KCORE构建内核时不要启用。

你如何禁用/dev/mem

好吧,回顾一下,man mem我们可以得到一些关于它是如何创建的细节:

mknod -m 660 /dev/mem c 1 1
chown root:kmem /dev/mem

您应该能够rm -rf /dev/mem;您可以在内核构建阶段通过不启用来禁用CONFIG_STRICT_DEVMEM

如何禁用/dev/kmem

确保CONFIG_DEVKMEM在内核构建时未启用。

如何防止冷启动攻击?

如果我能够禁用/proc/kcore/dev/mem/dev/kmem然后使用加密交换分区或根本不使用交换分区会怎样?出色地,你的记忆可能会被冻结并以这种方式访问​​。如何防止这种攻击?您加密您的 RAM;你如何加密你的 RAM?你不能。详情请参阅 TRESOR

答案3

如您所知,/dev/mem提供对正在运行的系统的物理内存的访问。/dev/kmem提供对内核虚拟内存的访问。这两个字符设备可以永久禁用通过内核配置选项(代码是最权威的信息来源,所以仅供参考)。取消设置下面的前两个选项将禁用相应的设备。

根据您的发行版,可以使用类似zless /proc/config.gz或 的内容查看当前的内核配置less /boot/config-$(uname -r)

思考最初的目的/dev/mem是支持与内存映射外围设备。拥有这些虚拟设备的明显负面安全影响(例如,攻击者能够即时修补另一个进程甚至内核的内存)至少在十年前就已为人所知。/dev/mem主线内核已支持限制访问自2008年初以来,/dev/kmem也是可选的从那时起也。

十年前,这似乎是X依赖的/dev/mem,我认为现在仍然如此。为了测试有关X需要的声明,/dev/mem我昨天从笔记本电脑中删除了虚拟设备,从那以后它一直运行得似乎很完美。 2017年有这些设备似乎没有实际用途研究和开发之外。

从安全角度来看,删除这些设备是个好主意。仍然值得注意的是,一个偏僻的具有提升权限的攻击者可以读取其地址空间之外的内存。可以使用以下方式访问其他用户空间应用程序的内存/proc/<pid>/mem。可以使用以下方式访问内核内存/proc/kcore

答案4

/dev/mem我从一开始就没有将其包含在我的系统中。我使用 Gentoo Linux,所以这可能并不奇怪,因为使用这个 Linux 发行版,您实际上可以自己构建每个软件包,包括 Linux 内核。

即使在使用 X.org X11 时,我也从未注意到由于缺少 而出现任何问题/dev/mem。就在今天,我注意到一个出现包的x11-drivers/xf86-video-vesa打印一条消息,指出它需要/dev/mem,如下所示:

* This driver requires /dev/mem support in your kernel
*   Device Drivers --->
*     Character devices  --->
*       [*] /dev/mem virtual device support

由于我没有安装 VESA 驱动程序X服务器故意的,或者即使只是作为后备,我实际上从来没有使用过,因此没有注意到它 - 直到现在。

但这证明了一点A)X11不再需要了/dev/mem,而且b)无论如何,某些 X11 视频驱动程序可能仍然会这样做。

适用于特定硬件的较新视频驱动程序很可能无需它即可工作。就像现代的 X.org-X11(在 Gentoo 上x11-base/xorg-server)一样,甚至不必是水根不再这样了,这就是进步的样子……

相关内容