一个漏洞潜伏54年?谁才是“潜伏界”最强王者

405 阅读15分钟

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的研究显示,广泛的代码重用造成了巨大的已知漏洞攻击面,并且长期使用的代码库中潜伏的漏洞可能最终会演变为漏洞利用程序。这与传统的软件工程教条背道而驰,传统的软件工程教条认为,大多数漏洞将在代码库使用早期遭遇现实问题和攻击时即得到修复。但事实证明,熟悉会滋生蔑视!