当前位置: 首页 > 科技观察

隐藏在深度代码中的十大“长寿”漏洞

时间:2023-03-20 23:47:33 科技观察

2021年,现代计算底层系统被曝出一个漏洞。攻击者可以强制系统执行任意代码。令人惊讶的是,易受攻击的代码已有54年历史,并且没有可用的补丁,而且将来可能不会有任何补丁。不过,该系统是图灵奖获得者马文·明斯基(MarvinMinsky)于1967年实现的通用图灵机,尽管它对计算机科学领域具有重要的理论意义,但从未真正构建到实用计算机中。没有补丁似乎是无害的。但在明斯基设计出这台图灵机后的十几年里,诞生了早期版本的Unix和DOS系统,直到21世纪的今天,这两种操作系统的后代还在我们身边。其中一些系统中的漏洞已深藏在代码中数年甚至数十年。下面我们列出了近年来发现的十大漏洞。漏洞列表NissanTelematics控制模块基带漏洞Sudo堆溢出漏洞BaronSameditLinuxGRUB2安全启动漏洞LioWiki本地文件包含漏洞DomainTimeII旁观者(man-on-the-side)攻击LinuxSCSI子系统漏洞WindowsDNS服务器远程代码执行漏洞SIGRedPuTTY堆溢出漏洞win32k.sys漏洞PrintDemon本地权限提升漏洞日产汽车远程信息处理控制模块基带漏洞年龄:7岁引入日期:2010修复日期:2017建立一个假的手机信号塔,诱使手机连接到它,然后劫持它的网络连接。手机制造商修复问题的速度与它们本来的样子一样快,但修复它们并忘记它们的速度也同样快。这就留下了一个问题:手机并不是唯一一种使用这种芯片的设备。安全公司Eclypsium的首席网络安全研究员JesseMichael说:“本质上,相同的蜂窝基带芯片组用于NissanLeaf和许多其他车型。”也发现了同样的错误。“这个漏洞在许多不同的细分市场中早已为人所知,比我们在汽车市场上发现它早了将近七年,”迈克尔说。由于汽车在多个细分市场和复杂的供应链中无处不在,之前没有人意识到汽车可能会受到与手机相同的攻击。“行业孤岛确实值得关注。sudo堆溢出漏洞BaronSamedit年龄:9岁6个月引入日期:2011年7月固定日期:2021年1月sudo命令是Unix管理员工具箱中的一个重要工具,可以赋予调用者超级用户权限。但是“能力越大责任越大”,有必要为这个命令设置一个阈值,防止用户在系统中横冲直撞。比如可以在shell模式下调用带-c参数的sudo命令,一系列shell命令后跟这个参数可以以超级用户权限执行,但是这种模式容易受到缓冲区溢出攻击,这些命令中插入的特殊字符可以诱使系统将代码写入分配的内存缓冲区,从而可能允许攻击者获得root权限,正常情况下,sudo会在执行前识别此类特殊字符,从而抵御此类攻击,但2011年意外出现漏洞ally中插入sudo,使得bufferOverflow攻击成为可能,这个漏洞在大家眼皮底下潜伏了十年。该漏洞并不存在于sudo命令本身,而是隐藏在辅助命令sudoedit中。sudoedit命令允许用户访问和编辑文件,而无需向编辑器程序本身授予完全的超级用户权限。正如2021年1月在Qualys博客中指出的那样,该漏洞可能导致严重的提权攻击,修复迫在眉睫。几乎所有基于Unix的操作系统都受到影响,包括Linux、Solaris和macOS。LinuxGRUB2安全启动漏洞存在时间:10年引入日期:2010年修复日期:2020年7月作为BIOS的替代品引入时,UEFI被认为具有相当先进的功能安全功能可抵御操作系统Bootloading软件级攻击。关键是UEFI使用一种称为安全引导的机制,该机制通过签名加密证书的互锁链来验证每个引导加载程序的合法性。UEFI的根证书由微软签署,Linux发行版会将经过验证的证书的Bootloader放在链的下游。然而,广泛使用的Linux引导加载程序GRUB2不仅具有UEFI-ready证书,而且还包含缓冲区溢出漏洞,可被插入其配置文件的恶意代码利用。(尽管GRUB2本身已签名,但其可由本地管理员编辑的配置文件并未签名。)安全公司Eclypsium发现了该漏洞。虽然攻击者需要对目标机器进行某种程度的本地控制才能执行攻击,但一旦成功,他们将确保每次启动时都能继续控制计算机,从而很难将他们从系统中驱逐出去。LioWiki本地文件包含漏洞年龄:11岁11个月引入日期:2008年11月固定日期:2020年10月LionWiki是一个用PHP编写的最小维基引擎。与许多流行的wiki引擎(例如底层的Wikipedia引擎)不同,LionWiki不使用数据库,而是完全基于文件。因为它的目标是简单,完全基于文件是LionWiki的强项,但它也导致引入重大错误。本质上,用户通过相应页面的URL中的文件和路径名访问特定LionWiki实例下的各种文件。这意味着,在正确构造的URL的帮助下,攻击者可以遍历托管此LionWiki实例的服务器上的文件系统。可以通过配置URL过滤来阻止文件系统遍历尝试,但信息安全研究所的网络靶场工程师JuneWerner发现,绕过URL过滤太容易了。Werner指出,尽管多次尝试修复该漏洞,但该漏洞仍然存在很长时间。“一些缓解措施于2009年7月首次推出,然后在2012年1月推出了更广泛的缓解措施。但尽管采取了缓解措施,代码仍然容易受到相同类型的攻击。直到2020年10月,有了绕过的方法通过这些缓解措施,该漏洞在代码中又保留了八年。”官方报告后,该漏洞已被开发者修复。DomainTimeII旁观者(man-on-the-side)攻击年龄:14引入日期:2007固定日期:2021年4月如果同一网络上的两台计算机不能就时间问题达成一致,后果可能从单纯的烦恼到无法控制的灾难。时间同步问题在计算中很常见,最成熟的企业解决方案是DomainTimeII,这是一个广泛部署在Windows、Linux和Solaris上的闭源应用程序。DomainTimeII从一开始就有一个非常严重的漏洞。有时,或在用户可以设置的条件下,软件会向其供应商GreywareAutomationProducts运营的更新服务器发送UDP查询请求。如果服务器回复一个URL,DomainTimeII将以管理员权限运行该程序,以从该URL下载和安装更新。问题?如果恶意黑客在Greyware的更新服务器之前成功回复查询,他或她可以发送一个自制的回复,提示DomainTimeII下载攻击者想要安装的任何恶意软件。在真正的中间人攻击中,攻击者在两个方向进行拦截;相比之下,DomainTimeII攻击是一种所谓的侧面攻击:攻击者不会拦截对其目标的回复,而是在合法回复之前发送他/她的自建回复。实际上,这意味着攻击者需要控制目标本地网络上的计算机;但是这种类型的攻击意味着攻击者可以将入侵升级到目标主机本地网络上其他更有价值和更安全的机器。发现该漏洞的安全公司Grimm指出,该漏洞至少从2007年开始就存在于软件版本中。LinuxSCSI子系统漏洞存在时间:15引入日期:2006年修复日期:2021年3月如果您怀旧,您可能还记得SCSI:1980年代的数据传输标准。也许您的第一个硬盘驱动器已插入您的IBMPC或经典Mac。SCSI今天仍在某些环境中使用。而一向追求灵活性和通用性的Linux,依然保留了一套扩展的SCSI子系统,以备有需要的系统使用。这些模块可通过自动模块加载获得,其中操作系统在需要时获取并安装所需的系统代码。当您想将SCSI硬盘驱动器挂载到Linux机器上,但又不想费心去寻找所有必要的支持代码时,这确实很有用,而且它还可以帮助攻击者利用代码中的漏洞。2021年3月,网络安全咨询公司Grimm发布了在LinuxSCSI代码中发现的一系列漏洞。其中一个缓冲区溢出漏洞可以让普通用户获得root权限,其他漏洞可以将信息从内核泄漏到用户空间,所有这些漏洞都可以用来获取机密信息或对受影响的机器发起DoS攻击。Grimm说这些缺陷可以追溯到2006年,并冷冷地指出,“这些缺陷是编程实践中缺乏安全考虑的症状,而这种编程实践在开发这段代码时很普遍。”WindowsDNS服务器远程代码执行漏洞SIGRed年龄:17岁出现日期:2003修复日期:2020DNS是一个被低估的互联网骨干系统。由计算机通过给定的URL解析关联的IP地址。DNS是分层的,域名解析请求在DNS金字塔的各层之间上下流动,寻找能够回答“这台电脑在哪里?”这个问题的DNS服务器。为此,所有主流操作系统都内置了DNS。2020年,微软披露了其DNS中潜伏了17年的严重漏洞,尽管没有证据表明该漏洞曾被非法利用。发现该漏洞的CheckPoint研究人员将其命名为SIGRed。这是一个WindowsDNS服务器缓冲区溢出漏洞,可以由隐藏在DNS数据包签名中的利用代码触发。恶意名称服务器可以响应此类数据包对域名解析请求,绕过大部分安全保护措施,远程访问微软DNS服务器。攻击也可以是可蠕虫的,即可以在没有用户干预的情况下自动传播。PuTTY堆溢出漏洞存在时间:20年9个月引入日期:1999年1月修复日期:2019年10月PuTTY是一个开源免费工具套件,包括串行控制台、终端仿真器和各种网络文件传输应用程序,还具有内置SSH和其他各种加密方案。PuTTY最初是为了将Unix管理员熟悉的本机工具集引入Windows和经典MacOS而开发的,但后来扩展到包括Unix系统。尽管PuTTY旨在保护网络连接,但其核心代码中已经暴露出隐藏的漏洞。该漏洞是另一种形式的缓冲区溢出问题(本例中为堆溢出),SSH密钥太短会触发该漏洞,导致PuTTY崩溃甚至远程代码执行。在欧盟的EU-FOSSA项目发起的漏洞赏金计划中,该漏洞被提交给HackerOne,提交者获得了3645美元的奖金,同时也得到了PuTTY团队的感谢。PuTTT团队注意到,该漏洞早在1999年就存在于早期版本的PuTTY源代码中。win32k.sys漏洞存在时间:23引入日期:1996修复日期:20192019年,MicrosoftWindowsWin32API暴露了两个重大漏洞。4月份发现的第一个漏洞是释放后使用(User-After-Free)漏洞,其中程序可以利用操作系统编码错误访问应受保护的系统内存。安全研究人员在发现恶意黑客试图利用它来控制计算机时发现了该漏洞。另一个漏洞是隐藏在操作系统窗口切换功能中的提权漏洞,于12月被发现。与前者类似,此漏洞也在模拟击键以造成内存泄漏的主动攻击中检测到。这两个漏洞都可以追溯到早期的Windows操作系统。“问题源于WIN32K在WindowsNT4.0中首次亮相,当时大多数Win32图形引擎从用户级转移到内核以提高性能,”卡巴斯基高级安全研究员BorisLarin解释道。修复,但微软多年前将图形引擎向内移动的决定产生了广泛的影响,而且影响可能会持续下去。多年来,在Windows中发现的超过一半的内核安全漏洞可能归因于WIN32K组件。PrintDemon本地提权漏洞年龄:24出现时间:1996年修复时间:2020年5月打印机可谓是IT行业的共同痛点,因为种类太多,又不是电脑和操作系统制造的供应商,但用户希望能够插入电源并开始打印。尤其是微软,在其早期阶段努力使用户能够相对容易地安装打印机驱动程序。但最近发现的PrintDemon漏洞表明,微软可能在1990年代走得太远了,今天仍在付出代价。该漏洞的核心在于三个事实:非管理员用户可以为Windows机器添加打印机;底层实现机制允许打印到文件而不是物理打印设备;Windows上的关键打印服务以SYSTEM权限运行。这意味着,只要做得好,就可以构造“打印机”驱动程序,在文件系统(甚至是特权目录)的任何地方创建文件(甚至是可执行文件)。多年来,黑客们设计了大量的漏洞利用程序来利用这些设计缺陷,大名鼎鼎的Stuxnet就是其中之一。但2020年发现的PrintDemon尤为特别,微软这些年来塑造的修复也不过是打补丁,而不是对整个打印子系统进行彻底重构。正如Winsider所描述的那样,“只需对文件系统进行一些更改,您就可以实现不属于任何进程的文件复制/写入行为,尤其是在重新启动之后。使用精心设计的端口名称,您可以制作后台处理程序process可帮助您将[可移植可执行文件]文件放置在磁盘上的任何位置。”听起来一点都不像是好消息……像这个“长寿”漏洞列表这样的漏洞日期总让人恍然大悟,原来我的电脑可能因为克林顿时代的一个漏洞被黑了打印机子系统。但了解这些不再需要立即修复的“旧”漏洞是相关的。Grimm首席漏洞研究员AdamNichols表示:“在独立研究工作中,当我们发现漏洞时,我们所做的其中一件事就是试图确定漏洞存在了多长时间。不幸的是,这不是行业标准。但是,其他研究人员有时确实如此。加倍努力找出人们被黑客攻击的风险有多长时间并不是工作的一部分,但我认为这是研究的重要部分。”SandyClark的研究表明,通用代码的重用现象造成了一个巨大的已知攻击面,潜伏在长期存在的代码库中的漏洞最终可能会演变成漏洞利用。这与传统的软件工程教条背道而驰,后者认为大多数错误在早期就已修复代码库在遇到现实世界的问题和攻击时的生活。但实际上,用克拉克论文标题的话来说,“熟悉会滋生蔑视”。