双按键入侵
Logan Lembke //
步骤一:开机。步骤二:按住Enter。步骤三:???? 步骤四:获利。
在安全行业,我们热爱加密技术。然而,有时加密引入的复杂性可能会在未来反咬我们一口。上周五(11月11日)在维也纳的DeepSec 2016上宣布了一个严重案例。
CVE-2016-4484:在启动大多数启用硬盘加密(LUKS)的Linux计算机后,只需按住Enter键即可进入root shell。
听起来很糟糕,确实如此。然而,您获得的shell功能严重受限,加密磁盘仍然加密。幸运的是,这意味着潜在攻击者无法访问系统上的大部分数据。
但该发现的作者Hector Marco和Ismael Ripoll迅速指出,该漏洞仍可用于恶意活动,例如:
- 权限提升:由于启动分区通常未加密:
- 可用于存储设置了SetUID位的可执行文件,之后可由本地用户用于提升权限。
- 如果启动未受保护,则可以替换内核和initrd映像。
- 信息泄露:可以访问所有磁盘。尽管系统分区已加密,但可以复制到外部设备,之后进行暴力破解。显然,可以访问其他设备中的未加密信息。
- 拒绝服务:攻击者可以删除所有磁盘上的信息。
(引自 http://hmarco.org/bugs/CVE-2016-4484/CVE-2016-4484_cryptsetup_initrd_shell.html)
如何修复此问题?
遗憾的是,此错误出现在多个不同的代码库中,使其更难修复。在基于Debian的系统上,此问题存在于cryptsetup包中;在基于RHEL的系统上,问题在于dracut包。在撰写本文时,我尚未听说基于mkinitcpio的系统是否受影响。
在基于Debian的系统上,错误是由cryptsetup附带的cryptroot shell脚本中的off-by-one错误引起的。Marco和Ripoll在此处解释了错误。(链接至 http://hmarco.org/bugs/CVE-2016-4484/CVE-2016-4484_cryptsetup_initrd_shell.html)官方补丁已推送到Debian的不稳定和测试存储库,但尚未推送到稳定分支。此外,Ubuntu尚未向任何存储库推送补丁。
在等待官方补丁的同时,您可以运行以下基于Marco和Ripoll建议修复的脚本来保护系统。
CVE-2016-4484-Debian-Fix
|
|
不幸的是,我无法为基于RHEL的系统上的dracut提供修复。Dracut是一个基于事件的工具,用于生成启动Linux系统时使用的初始ram磁盘,我不太熟悉其代码库。然而,修复可能很简单,但在查看代码后,我并未快速注意到如何修复。
同时,请在此处查看官方补丁的进展:
- Debian: https://packages.qa.debian.org/c/cryptsetup.html
- Ubuntu: https://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-4484.html
- RHEL: https://access.redhat.com/security/cve/cve-2016-4484
- Dracut: http://git.kernel.org/cgit/boot/dracut/dracut.git/
是时候开始工作了!
谁关心需要物理访问的漏洞?
虽然利用此漏洞需要物理访问,但在虚拟环境中仍然致命。想象一下攻击者正在窥探您的hypervisor。利用此漏洞,攻击者可以轻松提升其在加密虚拟机上的权限。
攻击者等待虚拟机关闭,跳入root shell,挂载未加密的启动分区,将一些程序加载到其中,设置程序的sticky bit,关闭虚拟机,并等待某人重新登录。现在,攻击者只需运行他们加载到启动分区中的程序即可获得root访问权限。
用于执行此攻击的命令大致如下:
|
|
注意:这是在Ubuntu Server 16.04上测试的。Fedora 24似乎不易受此攻击影响,因为默认情况下dracut shell中不包含chmod。然而,dracut默认包含vi,它应该容易受到sticky bit攻击。
如何防止这些类型的漏洞?
与此漏洞相关的代码都是开源的。只是没有足够的关键读者审查代码。作为这些非常流行项目的用户,我们有责任偶尔参与代码审查过程。不仅是这些项目的贡献者失败了。我们也失败了。下次您使用对业务或日常习惯至关重要的技术时,检查其源代码是否可用。浏览一下。看看您是否能捕捉到创建它时的一些巧妙之处。如果您不懂代码,请查看项目的wiki和错误跟踪器。我们常常对软件视而不见,当这样的漏洞出现时,我们才会惊呼。
在官方披露中了解更多关于CVE-2016-4484的信息。