modules_disabled
和kexec_load_disabled
sysctls 以及锁定 and 之/dev/mem
类的东西的目的是什么/dev/kmem
?他们背后的想法似乎是防止root接管内核,但我不确定为什么这很有用。如果攻击者获得了 root 权限,即使没有内核访问权限,他们通过修改二进制文件之类的操作是否也几乎拥有了这台机器?
我知道结合安全启动,这可以使内核保持良好状态,但同样,如果整个用户空间都受到损害,为什么这很有用?
modules_disabled
和kexec_load_disabled
sysctls 以及锁定 and 之/dev/mem
类的东西的目的是什么/dev/kmem
?他们背后的想法似乎是防止root接管内核,但我不确定为什么这很有用。如果攻击者获得了 root 权限,即使没有内核访问权限,他们通过修改二进制文件之类的操作是否也几乎拥有了这台机器?
我知道结合安全启动,这可以使内核保持良好状态,但同样,如果整个用户空间都受到损害,为什么这很有用?
如果攻击者获得了 root 权限,即使没有内核访问权限,他们通过修改二进制文件之类的操作是否也几乎拥有了这台机器?
也许,也许不是。使用 SELinux,您可以限制对块设备的访问,即使是 root 用户。因此,如果您的根分区是只读的(并且系统使用 OverlayFS 运行以提供非持久性修改),那么保护内核免受 root 影响可以保证重新启动时的一致状态,即使机器在根级别。
然而,如果内核不受 root 用户的保护,您就无法获得这样的保证。
如果没有经过验证的引导以及经过验证的模块,kexec
您将为内核提供更好的机会来保护自己免受特权升级的攻击。默认情况下,这两个功能被禁用:
指示 kexec_load 系统调用是否已禁用的切换。该值默认为 0(false:启用 kexec_load),但可以设置为 1(true:禁用 kexec_load)。一旦为真,就不能再使用 kexec,并且不能将切换设置回假。这允许在禁用系统调用之前加载 kexec 映像,从而允许系统在不更改映像的情况下设置(并稍后使用)映像。一般与“modules_disabled”sysctl 一起使用。
modules_disabled:
一个切换值,指示是否允许将模块加载到其他模块化内核中。此切换默认为关闭 (0),但可以设置为 true (1)。一旦为 true,模块既不能加载也不能卸载,并且切换不能设置回 false。通常与“kexec_load_disabled”切换一起使用。
其中之一就是虚拟化。硬件并不总是只运行一个操作系统。在运行虚拟机时,虚拟机的内核在某种程度上仍然可以访问硬件,或者它与主机共享部分内存。
我记得最突出的例子是VENOM 漏洞。它使用软盘驱动程序退出来宾机器。现在,易受攻击的内核可以设置kernel.modules_disabled=1
而不加载软盘驱动程序。此外,通过访问内核内存,有人可能会在不经过的情况下注入驱动程序modprobe
(这将非常困难但并非不可能)。