当在CodeAurora论坛等网站上发布与Android相关的漏洞时,会发生什么情况?你说对了!世界各地的安全爱好者和Android开发人员都试图利用新发现的问题来利用漏洞利用程序,该漏洞利用程序可以获取对设备的高级访问权限(例如,root用户访问权限或闪存自定义图像的存储能力)。
这恰好发生在CVE-2014-0973上,这是一个Android Bootloader中的漏洞,被称为“小内核(LK)”。稍后我们将讨论漏洞利用的细节,但现在让我们看一下开发人员的想法。
XDA论坛成员vortox设法实现了基于CVE-2014-0973的漏洞利用,并发布了适用于Amazon Kindle Fire HDX系列的工具,如果您使用的是旧版本的引导程序,该工具可以签名自定义引导映像。这里的关键点是,您不需要任何类型的解锁或其他欺骗手段就可以使它起作用-利用此漏洞,该工具可以对图像进行签名,使它们以生动的色彩通过引导加载程序中的验证阶段。
本文的下一部分将集中在如何利用工程,以及为什么它很悲伤地看到在一块的现代软件这个特殊的漏洞,所以如果你只是想获得你的手工具尽可能快地,头部到原来的职位并签收。
细节
800px-RSA_Security_logo.rect_好的,让我们检查一下CVE-2014-0973的详细信息。问题全在于RSA,这是一种加密标准,也用于签署Android启动映像。简而言之,RSA是一个公共密钥密码系统,其中有两个密钥,一个私有密钥和一个公共密钥。通常,公钥(可以与任何人共享)用于加密消息,然后只能使用私钥(保持私密,因此为名称)再次解密消息。这样,两方就可以进行通信而无需公开其解密所需的私钥。
但是,RSA也可以用于验证邮件的内容(或在我们的世界中,“签名”某些内容)。在这种情况下,消息将使用私钥进行加密,然后可以与接收者共享。然后,可以使用公共密钥对消息进行解密,并且如果解密正常进行,则接收方可以确保加密的内容源自原始作者,并且不会受到任何限制。
说到篡改,签名验证对于所有Android OEM来说都是非常重要的功能,因为验证某件软件确实来自OEM而非第三方(例如来自XDA开发人员)非常重要。因此,例如,当尝试在设备上刷新新的启动映像时,将发生以下情况:引导加载程序将查看该映像的数字RSA签名,并使用其公共密钥对其进行解密,因此请确保该映像已由该签名签名。预期的作者(OEM,这是唯一具有匹配私钥的作者)。
解密的签名包含启动映像数据的哈希值,然后可以将其用于与将要刷新的实际数据进行比较。因此,此时,引导程序会计算引导映像的哈希值,并将其与在RSA签名中找到的哈希值进行比较。如果这两个哈希值相互匹配,则可以肯定地保证内容(按今天的标准是安全的)不会被篡改,并且私钥的所有者会对图像进行签名。基本上,这意味着可以将原始设备制造商(OEM)的储备软件刷新。
该部分可能很难掌握,因此在继续之前,请确保您理解它。
漏洞
现在,关于该漏洞,为什么尽管缺少私钥(只有OEM拥有),但它为什么允许我们对启动映像进行签名?好吧,事实证明,Little Kernel引导加载程序中的RSA签名验证实现存在缺陷。这里的问题是解密算法无法验证其正在处理的数据的长度。尽管这听起来很无辜,但与安全相关的读者将立即看到问题。加密系统始终需要以最佳方式验证其输入数据,只需假设数据“正确”即可使整个过程对各种攻击敞开大门。
这就是这里发生的事情。通过缺少长度检查,开发人员可以通过向签名添加自定义数据来伪造有效的签名,从而使该数据对于引导加载程序中的验证检查而言是有效的。详细解释这一点将超出本文的范围,但最后提供了一些链接,供您进一步阅读该主题。
如果您查看发布该漏洞的网站,则该问题最早是在2014年6月13日才公开发布,但是经过进一步研究,您很快就会发现它已经存在一些年头。实际上更老了。原始版本的历史可以追溯到2006年,在国际密码学会议的舞台上,Daniel Bleichenbacher谈到了它 。显然,他不是在谈论Android引导加载程序,但他发现许多RSA签名实现都有潜在的灾难性缺陷。大约九年后的今天,我们仍然可以从这个非常古老的漏洞中受益,因为它使Amazon Fire HDX所有者可以签名自定义启动映像,该映像可用于将设备植根或刷新自定义恢复。