一个漏洞潜伏 54 年?谁才是“潜伏界”最强王者
2021 年,瑞典斯德哥尔摩 KTH 皇家理工学院的计算机科学教授 Pontus Johnson 在通用图灵机(UTM)中发现了可执行任意代码的相关漏洞。令人震惊的是,易受攻击的代码已经存在了将近 54 年——而且还没有可用的补丁,也不指望会出现补丁。
幸运的是,这种通用图灵机(UTM)是由已故的人工智能学家 Marvin Minsky 在 1967 年提出的一项概念模拟设计,尽管它对计算机科学领域具有重要的理论意义,但实际上从未真正构建到现实世界的计算机中。
但在 Minsky 提出这种概念模拟设计后十年间,早期版本的 Unix 和 DOS 系统出现,直至今日,这两大操作系统的“后裔”仍在伴随我们,其中一些系统中同样存在着潜伏数年甚至数十年的漏洞。
以下是近年来发现的 10 个最值得注意的古老漏洞:
日产(Nissan)远程信息处理控制模块基带漏洞
潜伏期:7 年;
引入时间:2010 年;
修复时间:2017 年;
早在 2011 年,安全研究员 Ralf-Philipp Weinmann 就在手机使用的基带处理器中发现了一个漏洞。这里为大家介绍一下基带攻击,它是一种针对移动设备的威胁类型。独立于移动操作处理器的基带处理器主要负责部署 GSM 或 3G 堆栈到设备上。所有电话和数据首先通过该基带,给与该操作系统处理器必要的处理信息。破坏该基带的攻击者能够获得巨大的优势,因为该层没有取证工具。
可以想象这种基带攻击的场景:黑客可以建立一个假的手机信号塔,诱使手机连接到它,然后劫持它的网络连接。手机制造商相对较快地纠正了该漏洞,然后很快它就被遗忘了。
但是还存在一个问题:手机并非使用这些芯片的唯一设备。安全公司 Eclypsium 的首席网络安全研究员 Jesse Michael 表示,本质上说,日产 Leaf 和各种其他车辆的远程信息处理单元中也使用了相同的蜂窝基带芯片组。几位研究人员通过试验他们从垃圾场得到的汽车发现了该漏洞的存在。
在汽车领域发现该漏洞之前,它已经在不同的细分市场中公开了将近 7 年。由于处于截然不同的细分市场,且拥有自己复杂的供应链,所以没人意识到汽车也容易受到与手机完全相同的攻击。这是一个关于行业孤岛的真实警示故事。
sudo 的 Baron Samedit 漏洞
潜伏期:9 年 6 个月;
引入时间:2011 年 7 月;
修复时间:2021 年 1 月;
sudo 命令是任何 Unix 管理员工具包中的一个重要工具,它为那些具有调用它的正确权限的人授予超级用户权限。但是,“能力越大,责任越大”,重要的是在命令周围设置对冲,以免用户在系统中肆无忌惮。例如,您可以使用 -c 标志在 shell 模式下调用 sudo,然后您可以执行一系列以超级用户权限执行的 shell 命令。这种模式可能容易受到缓冲区溢出攻击,其中插入到这些命令中的特殊字符会诱使系统在分配的内存缓冲区之外编写代码,从而可能导致攻击者获得 root 权限。
通常,sudo 会在执行前识别这些特殊字符来防止此类攻击。然而,在 2011 年,一个漏洞被意外插入到 sudo 中,使得缓冲区溢出攻击成为可能,并且它潜伏了近 10 年。缺陷不在 sudo 命令本身,而是在辅助 sudoedit 命令中,任何本地用户(普通用户和系统用户,sudoers 和非 sudoers)都可以利用此漏洞,而无需进行身份验证(即攻击者不需要知道用户的密码),利用此漏洞可以用于普通用户无差别提权,漏洞对数据机密性和完整性以及系统可用性带来严重威胁。
受影响的系统包括几乎所有 Unix 变体,包括 Linux、Solaris 和 macOS。如今,此漏洞已分配为 CVE-2021-3156,危险等级评分为 7 分,因此修复它至关重要。
Linux Grub2 BootHole 漏洞
潜伏期:10 年;
引入时间:2010 年;
修复时间:2020 年 7 月;
当 UEFI 作为 BIOS 的替代品被引入时,曾一度被认为是安全的最前沿,其功能旨在对抗在启动操作系统的引导加载软件级别上运行的攻击。其关键是一个互锁的签名加密证书链,用于验证每个引导加载程序是否合法,这种机制称为“安全引导”(Secure Boot)。UEFI 的根证书由 Microsoft 签署,Linux 发行版将自己的引导加载程序放在链的更下游,每个引导加载程序都有自己经过验证的证书。
近日,安全研究公司 Eclypsium 曝光了安全引导(Secure Boot)功能中的一个新漏洞,并将之命名为“BootHole”。其特别存在于 Secure Boot 的 GRUB2 文件中,攻击者可借此对受害者的系统实现“近乎完全的控制”。一旦遭成功利用,将允许黑客写入任意程序代码、置换成恶意 bootloader 程序,弱化 UEFI Secure Boo 的安全开机验证,而使得恶意程序得以入侵计算机。而且无论是 Linux、还是数量相当庞大的 Windows 操作系统,都会受到 UEFI 固件中的这个漏洞的影响。
LionWiki 本地文件包含漏洞
潜伏期:11 年 11 个月;
引入日期:2008 年 11 月;
修复日期:2020 年 10 月;
LionWiki 是一个极简的 wiki 引擎,用 PHP 编写;与许多流行的 wiki 引擎(如底层 Wikipedia 引擎)不同,LionWiki 不使用数据库,而是完全基于文件。由于其目标是简洁,完全基于文件是它的优势之一,但也造成了一个重大的安全漏洞。
本质上,特定 LionWiki 实例下的各种文件是通过相应页面 URL 中的文件和路径名访问的。这意味着,使用正确构建的 URL,您可以遍历托管 LionWiki 实例服务器的文件系统。有一些 URL 过滤规定可以阻止此类尝试,但是绕过 URL 过滤也十分简单。
Infosec Institute Cyber Range 工程师 June Werner 指出,尽管进行了一些修复尝试,但该漏洞仍持续存在了很久。2009 年 7 月就首次推出了一些缓解措施,然后 2012 年 1 月又进行了更广泛的缓解措施。不过,尽管实施了这些缓解措施,但代码还是无法抵御同类型的攻击。直到 2020 年 10 月随着绕过这些缓解措施的方法一起被重新发现,该漏洞在代码中又留存了八年。在此次正式上报之后,开发人员对漏洞进行了修复。
Domain Time II man-on-the-side(MOTS)攻击
潜伏期:14 年;
引入时间:2007;
修复时间:2021 年 4 月;
如果同一网络上的两台计算机无法就时间问题达成一致,结果可能会很烦人,也可能会很糟糕。时间同步是计算领域长期存在的问题,目前最成熟的企业解决方案是 Domain Time II,这是一款广泛部署在 Windows、Linux 和 Solaris 上的闭源应用程序。
Domain Time II 几乎从诞生起就隐藏着一个非常严重的漏洞。时不时地,或者在用户可以设置的条件下,这个软件会向其供应商 Greyware Automation Products 运行的更新服务器发送 UDP 查询请求。如果服务器回复 URL,Domain Time II 会以管理员权限运行程序,从该 URL 下载和安装更新。
问题出在哪儿?如果恶意行为者设法在 Greyware 的更新服务器之前回复查询请求,那该攻击者就能发送自己编造的回复,提示 Domain Time II 下载攻击者想要其安装的任何恶意软件。在真正的中间人(man-in-the-middle)攻击中,攻击者会双向拦截;相较之下,Domain Time II 攻击是所谓的 man-on-the-side 攻击:攻击者无法拦截发往其目标的回复,因此必须抢在合法回复之前发送自己编造的回复。在实践中,这意味着攻击者需要已经控制目标本地网络上的计算机才能实现这一目标,但这种攻击代表攻击者可以将其入侵升级到本地网络上其他更有价值、更安全的机器。发现该漏洞的安全公司 Grimm 指出,该漏洞至少可以追溯到 2007 年的软件版本中。
Linux SCSI 子系统漏洞
潜伏期:15 年;
引入时间:2006 年;
修复时间:2021 年 3 月;
如果你是怀旧派,那你可能会记得 SCSI,这是上世纪 80 年代的数据传输标准,可能是你第一块硬盘接入 IBM PC 或经典 Mac 机的方式。时至今日,SCSI 仍在某些环境中使用,而一贯追求灵活性和通用性的 Linux 仍在为有需求的系统提供一套扩展 SCSI 子系统。这些模块可通过所谓的自动模块加载功能获得,操作系统可以在需要时从中获取并安装所需系统代码——这在你想给 Linux 机器挂载 SCSI 硬盘,但又不想寻找必要的支持代码时非常有用,但同样也有助于攻击者利用代码中的漏洞。
2021 年 3 月,网络安全咨询公司 Grimm 发布了在 Linux SCSI 代码中发现的几个漏洞。其中一个缓冲区溢出漏洞,可允许普通用户获得 root 权限,其他漏洞则可能造成信息从内核泄漏到用户空间,而且全部漏洞都可用于获取机密信息或作为对受影响机器展开 DoS 攻击的一部分。Grimm 称这些漏洞可追溯到 2006 年,是编程实践缺乏安全考虑的表现,而这种编程实践在该代码开发时十分普遍。
Windows DNS SIGRed 漏洞
潜伏期:17 年;
引入时间:2003 年;
修复时间:2020 年;
DNS 是被低估的互联网骨干之一,计算机就是通过该系统从给定 URL 解析出关联 IP 地址。DNS 是分层的,域名解析请求在 DNS 金字塔各层间上下流转,找寻能回答“这台计算机在哪儿?”这个问题的 DNS 服务器。因此,几乎所有主流操作系统都内置了 DNS。
2020 年,微软在其自己的 DNS 版本中披露了一个严重漏洞,该漏洞已经在代码中潜伏了 17 年,尽管没有证据表明它曾被广泛利用。发现此漏洞的 Check Point 研究人员将其称为“SIGRed”,是 Windows DNS 服务器中的一个缓冲区溢出漏洞,可由隐藏在 DNS 数据包签名中的漏洞利用代码触发。恶意名称服务器可向域名解析请求响应此类数据包,绕过大多数安全防护措施,获取微软 DNS 服务器的远程访问权限。这种攻击还可以蠕虫化,这意味着它可以在没有用户干预的情况下自动化和传播。
PuTTY 堆溢出漏洞
潜伏期:20 年 9 个月;
引入时间:1999 年 1 月;
修复时间:2019 年 10 月;
PuTTY 是一款免费的开源工具套件,包含串行控制台、终端模拟器和各种网络文件传输应用程序,内置了 SSH 和各种其他加密方案。它最初发布是为了将 Unix 管理员惯用的系统自带工具集引入 Windows 和经典 Mac OS,但它的范围已经扩大,现在也广泛用于 Unix 系统。虽然 PuTTY 旨在保护网络连接,但事实证明,其核心代码存在一个堆溢出漏洞,即另一种形式的缓冲区溢出问题,并且可由过短 SSH 密钥触发,造成 PuTTY 运行崩溃,甚至远程代码执行。
作为欧盟 EU-FOSSA 项目发起的漏洞赏金计划一部分,该漏洞被提交给了 HackerOne;它为提交者赚取了 3,645 美元的奖励,以及来自 PuTTY 团队的感谢。PuTTT 团队指出,早在 1999 年,该漏洞就存在于他们拥有的 PuTTY 源代码早期版本中。
win32k.sys 漏洞
潜伏期:23 年;
引入时间:1996 年;
修复时间:2019 年;
2019 年在微软 Windows 的 Win32 API 中检测到两大重要漏洞。第一个是在 4 月份发现的 User-After-Free 漏洞,程序可利用操作系统编码错误访问本应受到保护的系统内存;安全研究人员在发现恶意黑客试图在野使用它来控制计算机时发现了该漏洞。另一个漏洞是在 12 月发现的,是潜伏在操作系统窗口切换功能中的提权漏洞;与前者类似,该漏洞也是在主动攻击过程中被发现的,当时这些攻击通过模拟击键以制造内存泄漏。
这两个漏洞都起源于 Windows 操作系统的早期阶段。卡巴斯基高级安全研究员 Boris Larin 解释称,
问题源于 WIN32K 在 Windows NT 4.0 中首次亮相时,当时 Win32 的大部分图形引擎都从用户级转移到内核以提高性能。
虽然这两个具体漏洞已被修复,但微软多年前做出的决策已经产生了更广泛的影响——而且影响可能还会持续下去。多年来,在 Windows 中发现的内核安全漏洞中有一半以上都是由 WIN32K 组件造成的。
PrintDemon 漏洞
潜伏期:24 年;
引入时间:1996 年;
修复时间:2020 年 5 月;
打印机是 IT 行业常见痛点,因为存在很多不同的种类,而且并非由制造计算机和操作系统的同一家供应商制造,用户却期望能够“即插即用”。尤其是微软,在其早期阶段就努力想让用户能够相对容易地安装打印机驱动。但近期发现的一个称为“PrintDemon”的漏洞表明,他们可能在上世纪 90 年代操之过急了,以至于直到今天还在为此付出代价。
漏洞的核心在于三个事实:非管理员用户可以向 Windows 机器添加打印机;底层机制使得打印到文件而非物理打印设备成为可能;Windows 上的关键打印服务以 SYSTEM 权限运行。这意味着,只要做对了,就可以构造“打印机”驱动程序,它可以在文件系统(甚至是特权目录)的任何位置创建文件(甚至是可执行文件)。多年来,黑客设计了大量漏洞利用程序利用这些设计缺陷——事实证明,震网(Stuxnet)就是其中之一——但 2020 年发现的 PrintDemon 却尤为糟糕,其存在原因是由于微软多年来的修复不过是补丁而非完全重构整个打印子系统。
正如 Winsider 所言,
通过对文件系统进行非常细微地改动,你就可以实现不属于任何进程的文件复制/写入行为,尤其是在重启后。借助一个精心设计的端口名称,你就可以让 Spooler 进程帮你在磁盘上任意位置放置(便携式可执行)文件。
研究漏洞年龄的意义
如果不是面对这样一份列表,也许你不会猛然意识到,原来自己的电脑可能会因为克林顿时期的打印机子系统漏洞而被黑。要知道了解这些漏洞的年龄是具有非常重要的现实意义的。Grimm 首席漏洞研究员 Adam Nichols 表示,“我们在独立研究工作中发现漏洞时,必须要做的一件事就是尝试确定该漏洞存在了多长时间。遗憾的是,这一点并没有成为行业标准,好在据我了解到,其他研究人员有时候也会这么做。付出加倍努力找出漏洞潜伏时长算是本职以外的工作,但我觉得这是研究工作的重要组成部分。”
Sandy Clark 的研究显示,广泛的代码重用造成了巨大的已知漏洞攻击面,并且长期使用的代码库中潜伏的漏洞可能最终会演变为漏洞利用程序。这与传统的软件工程教条背道而驰,传统的软件工程教条认为,大多数漏洞将在代码库使用早期遭遇现实问题和攻击时即得到修复。但事实证明,熟悉会滋生蔑视!
评论