Linux已被其多年来最严重的漏洞所困扰

发布时间:2022-03-08 15:32


Linux 还有另一个高严重性漏洞,它使不受信任的用户可以轻松执行能够执行大量恶意操作的代码,包括安装后门、创建未经授权的用户帐户以及修改特权服务或应用程序使用的脚本或二进制文件。

Dirty Pipe,正如该漏洞所命名的那样,是自 2016 年以来披露的最严重的 Linux 威胁之一,这一年,另一个高严重性且易于利用的 Linux 漏洞(名为 Dirty Cow)在被使用时曝光入侵研究人员的服务器。研究人员在 2016 年展示了如何利用 Dirty Cow 来根植任何 Android 手机,无论移动操作系统版本如何。11 个月后,研究人员在第三方市场发现了 1,200 个恶意利用该漏洞的 Android 应用程序。
当没有人变得强大时
Dirty Pipe 这个名字既是为了表明与 Dirty Cow 的相似之处,又是为了提供有关新漏洞起源的线索。“管道”是指管道,一种 Linux 机制,用于一个 OS 进程将数据发送到另一个进程。本质上,管道是两个或多个链接在一起的进程,因此一个进程的输出文本 (stdout) 直接作为输入 (stdin) 传递给下一个进程。

该漏洞被跟踪为 CVE-2022-0847,当网站建设者 CM4all 的研究人员对客户的 Linux 计算机上不断出现的一系列损坏文件进行故障排除时,该漏洞暴露无遗。经过数月的分析,研究人员最终发现,客户的损坏文件是由于 Linux 内核中的错误造成的。

CM4all 母公司 Ionos 的研究员 Max Kellermann 最终想出了如何利用该漏洞来武器化该漏洞,以允许拥有帐户的任何人(包括最低权限的“nobody”帐户)将 SSH 密钥添加到 root 用户的帐户中。这样,不受信任的用户可以使用具有完全 root 权限的 SSH 窗口远程访问服务器。

Dirty Pipe 启用的其他恶意操作包括创建作为后门运行的cron 作业、将新用户帐户添加到 /etc/passwd + /etc/shadow(赋予新帐户 root 权限),或修改由一项特权服务。

“它与本地内核漏洞一样严重,”开源安全总裁布拉德斯宾格勒在一封电子邮件中写道。“就像 Dirty Cow 一样,基本上没有办法缓解它,它涉及核心 Linux 内核功能。”

该漏洞最早出现在 2020 年 8 月发布的 Linux 内核版本 5.8中。该漏洞一直持续到上个月,随着版本 5.16.11、5.15.25 和 5.10.102 的发布而得到修复几乎所有 Linux 发行版都受到影响。

在Android中扔扳手

Dirty Pipe 还会影响任何基于易受攻击的 Linux 内核版本之一的 Android 版本。由于 Android 如此碎片化,因此无法统一跟踪受影响的设备型号。例如,Pixel 6 和三星 Galaxy S22 的最新版本 Android 运行 5.10.43,这意味着它们很容易受到攻击。与此同时,Android 12 上的 Pixel 4 运行 4.14,不受影响。Android 用户可以通过转到设置 > 关于手机 > Android 版本来检查他们的设备使用的内核版本。

移动安全提供商 Lookout 的安全研究负责人克里斯托夫·河北森在一篇文章中写道:“脏管道漏洞非常严重,因为它允许攻击者临时或永久覆盖系统上他们不应该更改的文件。”电子邮件。“攻击者可以使用它来改变特权进程的行为,有效地获得执行具有广泛系统特权的任意代码的能力。”

Lookout 研究人员表示,该漏洞可以通过提升其权限的恶意应用程序在 Android 手机上被利用,默认情况下,这些权限应该受到限制。他说,另一种攻击途径是使用不同的漏洞来获得有限的代码执行(例如,使用被黑客入侵的合法应用程序的系统权限)并将其与 Dirty Pipe 结合起来,使代码获得不受约束的 root。

虽然 Kellermann 表示 Google 在 2 月份将他的错误修复与 Android 内核合并,但没有迹象表明基于 Linux 内核的易受攻击版本的 Android 版本已得到修复。用户应该假设任何运行基于易受攻击版本的 Linux 内核的 Android 版本的设备都容易受到 Dirty Pipe 的影响。谷歌代表没有回复寻求评论的电子邮件。

创建管道。填充管道。排水管。

脏管道是由一个未初始化的变量引起的,该变量允许攻击者覆盖缓存在内存中的任何文件内容。即使不允许写入文件,脏管道也可以这样做。Kellermann 发现漏洞的关键是他使用 Linux 功能splice将数据从一个文件移动到另一个文件。

当用于splice将数据汇集到管道中时,“内核将首先将数据加载到页面缓存中,”Kellermann 解释说。“然后它将struct pipe_buffer在页面缓存内创建一个指向(零拷贝),但与匿名管道缓冲区不同,写入管道的附加数据不得附加到这样的页面,因为该页面由页面缓存拥有,而不是由管道。通过注入PIPE_BUF_FLAG_CAN_MERGE页面缓存引用,可以覆盖页面缓存中的数据,只需将新数据写入以特殊方式准备的管道。

研究人员说,所需的步骤是:

  • 创建管道。
  • 用任意数据填充管道(PIPE_BUF_FLAG_CAN_MERGE在所有环条目中设置标志)。
  • struct pipe_buffer排干管道(在环上的所有实例中设置标志pipe_inode_info)。
  • 将目标文件中的数据(使用 O_RDONLY 打开)从目标偏移之前的位置拼接到管道中。
  • 将任意数据写入管道;此数据将覆盖缓存的文件页面,而不是创建一个新的匿名struct pipe_buffer因为PIPE_BUF_FLAG_CAN_MERGE已设置。

尽管 Dirty Pipe 功能强大,但它的工作有一些关键要求,并且它的功能有限制。它们包括:

  • 攻击者必须具有读取权限
  • 偏移量不能在页面边界上,因为必须至少将页面的一个字节拼接到管道中
  • 写入不能跨越页面边界,因为将创建一个新的匿名缓冲区
  • 无法调整文件大小,因为管道有自己的页面填充管理,并且不会告诉页面缓存附加了多少数据

    出于性能原因,Linux(与其他操作系统一样)缓存在系统使用的内存文件中。当您想对某些缓存数据进行私有修改时,操作系统应该派生一份数据副本供您进行修改,否则您的修改将不是私有的,而是会影响其他任何人阅读或执行该文件。与 Dirty Cow 一样,Dirty Pipe 欺骗操作系统对缓存进行非法修改,从而影响系统上的所有用户。

    因此,漏洞利用可以做的是例如更改 suid 根二进制文件(他们具有读取权限)的代码以跳过其系统调用,这会将其权限更改回用户(这意味着二进制文件将在不知不觉中继续运行完全root权限),或者漏洞可以修改一个常用的库,使其执行一些额外的代码,一个简单的例子是改变攻击者复制到/tmp的shell的权限,使其成为suid root。

    一个缓解因素是引入漏洞的内核版本 5.8 相对较新。许多生产服务器没有运行 5.8。

     

    延伸阅读

    一个潜伏了 12 年的错误让攻击者在大多数主要的 Linux 发行版上都获得了 root 权限

    2022 年已经出现了另一个高严重性 Linux 漏洞。PwnKit 也是在 Linux 内核中潜伏 12 年后于 1 月发现的提权漏洞。利用它也是微不足道的,并为多种形式的恶意打开了大门。

    无论如何,请不要误会:利用 Dirty Pipe 的简易性加上黑客可以用它做的几乎无限的事情,使其成为自 2016 年 Dirty Cow 以来攻击 Linux 的最关键的特权升级漏洞。

    斯宾格勒说:“鉴于 Twitter 上已经出现了武器化的漏洞利用,对于那些在他们的系统上存在不受信任的用户的人来说已经太迟了。” “任何具有受影响内核版本(> = 5.8)的人都应该尽快应用修复程序。”

客户热线:037125966675