内核本身的漏洞虽然严重,但对于日常用户来说只是故事的一部分。
“正常”、“开箱即用”安装的问题实际上是以 root 身份运行的进程中的漏洞。由于这些是受信任的,它们可以要求内核做任何他们喜欢的事情——包括插入内核模块或访问/dev/kmem
.
重要的是要了解,就 CPU 而言,根进程作为非特权进程运行,就 CPU 而言。在 x86 上,我们将此环称为 3;在 ARM 处理器上,CPU 模式是 User、FIQ、IRQ、Supervisor、Abort 和 Undef,其中User
是用于进程的非特权级别(所有其他模式实际上都是特权模式)。模式下执行进程User
不能直接修改其他进程或内核;他们必须先询问内核。但是,由于它们是受信任的,内核不会“说不”。因此,对于普通设置,破坏以 root 身份运行的进程就足够了。
现在,在您的设置中,情况有些不同 - 您已禁用模块加载和访问/dev/kmem
. 要造成任何严重损害,您需要让您的 rootkit 在管理员模式下执行(环 0/任何不是的模式User
)或能够操作/dev/kmem
. 由于您也无法修改引导条目,因此这会将硬件级别作为主要威胁向量(或 ksplice。您在 SO 上提到了这一点;这绝对是一个风险,因为您允许使用代码修补正在运行的内核!kexec
这是另一个潜在问题,因为您将内核替换到位)。
所以从理论上讲,你所拥有的东西要安全得多。
这是否意味着该表中的其他漏洞(例如,DoS、内存损坏、溢出)不能被用于执行内核级 rootkit?
好吧,首先处理最后一点 - 你不需要能够利用“正常”系统上的漏洞,因为你可以插入一个内核模块。但是,就您而言,这实际上是您唯一的途径;您需要在系统中的某个地方找到一个错误,该错误可以让您加载代码或者可以被利用来控制内核。
现在,根据您的零错误观察 - 正如您所说,该时间范围内的已知错误为零。这并不意味着没有错误。此外,我们应该警告这一点:
- 这是您发行版的内核吗?它是否有香草内核中不存在的补丁?这些补丁也增加了风险。
- 您的内核是否需要额外的第三方代码(显卡驱动程序、虚拟化驱动程序)?如果是这样,这些也会增加风险。
现在,关于那些 CVE - 是的,当他们说不“代码执行”时,这就是它的意思。存在的漏洞可能会破坏内存并执行 DoS,但实际上无法运行恶意代码。看看其中一个代码执行漏洞:
...允许远程攻击者导致拒绝服务(恐慌)或可能执行任意代码...
所以是的,就目前而言,在编写更新时,内核中没有已知的代码执行漏洞,鉴于这个答案,我正在跨越这一点 - 从网站上不清楚哪个条目代表香草内核,哪个代表供应商提供的内核,或者实际上有什么区别。让我提醒一下,无论对内核的定义如何,漏洞都是零,这就是我之前在谈论供应商提供的补丁/第三方代码时试图得到的。