俄罗斯一名独立IT安全研究员兼漏洞利用程序开发者公开披露了 VirtualBox(VB) 5.2.20 及之前版本虚拟机软件中的零日漏洞。VB是甲骨文(Oracle)公司开发的开源虚拟化软件,应用广泛。
名为 Sergey Zelenyuk 的安全分析师称,他的漏洞利用程序100%可靠,内存崩溃问题是该零日漏洞的根源。PRO / 1000 MT Desktop (82540EM) 网卡如果设为网络地址转换(NAT)模式就受该漏洞影响。该问题存在于VB共享代码库,而几乎所有操作系统都支持VB。
因为存在于共享代码库中,该漏洞并不特定于任何具体平台或操作系统。攻击者可以利用该漏洞逃逸出客户计算机虚拟环境,直接访问 Ring 3 权限层,也就是以最小权限执行大部分用户程序代码的地方。
Zelenyuk发现,只要将 PRO/1000 MT Desktop (82540EM) 网卡设为NAT模式就能利用这些虚拟机上的漏洞,而默认设置是允许客户系统访问外部网络的。11月7号,Zelenyuk在其官方博客上非常清楚地阐述了该漏洞:
英特尔 PRO/1000 MT Desktop (82540EM) 存在零日漏洞,客户机root/管理员权限用户可以逃逸到实体机 ring 3 层。然后就能用现有技术通过 /dev/vboxdrv 提权到 ring 0 。
Zelenyuk进一步声明:理解该漏洞的利用方法很重要,因为这是理解上下文描述符如何先于数据描述符被处理的关键。在视频中,Zelenyuk演示了如何触发缓冲区溢出以逃逸虚拟操作系统限制的方法。
他使用包描述符来生成整数溢出条件。这些能触发整数溢出的包描述符就是令网卡通过搜索系统内存来定位网络包数据的数据段。然后,Zelenyuk将数据从客户操作系统读入堆栈缓冲区,构造溢出条件,造成函数指针覆盖,也就是堆栈溢出的必要条件。
Zelenyuk在其技术文章中解释称,该漏洞利用程序依赖2个溢出条件,提供 Ring 3 层访问权限,进而控制实体机操作系统,实现提权。攻击者可以联合使用另一个漏洞以提升权限,虽然利用过程比较难,但不是全无可能。
不过,提权步骤显然不是每个人都能掌握的,需要高级技巧和技术知识才可以成功实现。Zelenyuk在 Ubuntu 16.04 和 18.04 的64位及32位默认配置版上做了测试,贴出的视频就是他在客户机操作系统成功运行漏洞利用程序并在实体机操作系统上开了个shell的明证。GitHub上放出了相关技术细节。
Zelenyuk还提到了为什么他选择公开披露该漏洞:
我喜欢VirtualBox,选择公开零日漏洞的原因与VirtualBox无关。我是因为对信息安全的当前状态不满,尤其是对安全研究与漏洞奖励不满,才决定公开披露。
Zelenyuk还公开表示,等到漏洞被补上半年才披露被认为是不利于网络技术发展的做法。对应的漏洞奖励领域出现以下做法也是很不正常:
虚幻的宏大感和浮夸的营销:命名漏洞并为之建立网站;每年召开上千次会议;夸大获得安全研究员职位的重要性;觉得自己是“救世主”。Zelenyuk公开表明自己对这些行为的不认同。
零日漏洞的滞缓处理与漏洞奖励项目的偏执,使得Zelenyuk烦不胜烦,所以他的举动就是完全披露。信息安全,该往前走了。
目前,补丁尚未释出,使用者可以把虚拟机的网卡换成 Paravirtualized Network 或 PCnet 来规避网络攻击威胁。
GitHub上的技术描述:
发表评论: