热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iPhoneBootROM漏洞说明及威胁评估

  0x00 相关词汇AP:应用处理器。SEP:安全协处理器。SecureROM:又称 BootROM 是固化在 iPhone 只读区域中的一段代码,该区域中的代码是启动链及启动信任链的起点,主要负责

 

 

0x00 相关词汇

AP:应用处理器。

SEP:安全协处理器。

SecureROM:又称 BootROM 是固化在 iPhone 只读区域中的一段代码,该区域中的代码是启动链及启动信任链的起点,主要负责加载后续的启动链,该区域中的代码无法通过系统更新来更新,所以该区域中的代码一旦出现安全问题,影响是非常大,并且这种影响是持久的,只能通过召回设备修复问题。关于 SecureROM 的具体功能,可以参考笔者之前写的一篇文章 《SecureROM 分析笔记》。

GID:GID 是固化在 iPhone 加密引擎中的 AES 密钥,所有相同型号的设备具有相同的密钥,比如:所有 iPhone X 都具有相同的密钥。该密钥主要用来解密系统更新固件。SEP 有独立的 GID,与 AP 的不同。

UID:UID 也是固化在 iPhone 加密引擎中的 AES 密钥,但每台手机都有不同的 UID,UID 主要用来加解密用户相关的数据。SEP 有独立的 UID,与 AP 的不同。

 

0x01 事件起因

北京时间9月 28 日凌晨,国外安全人员 @axi0mX 通过 Twitter 公开了一个 iPhone BootROM 的漏洞[1],同时公开了相关的利用代码[2]。

就像 @axi0mX 在推文中所说[3],这是从 2010 开始,9 年间,第一个公开的针对 64 位苹果设备的可以利用的 BootROM 的漏洞。我们知道越狱社区一直在跟苹果设备的安全性做着“斗争”,随着苹果不断地提高 iPhone 的安全性,越狱变得越来越难,而 BootROM 漏洞不仅可以用来越狱当前最新的 iOS 版本,还可以用来越狱将来的 iOS 版本(因为硬件漏洞无法通过系统更新进行修补),所以该漏洞在越狱社区中引起了巨大的轰动。

 

0x02 受影响的设备

影响从 iPhone 4s 到 iPhone X 的所有设备,同时影响这段时间内生产的 iPad 设备。

 

0x03 漏洞成因说明

@axi0mX 是通过二进制对比发现的这个漏洞[4],同时 @littlelailo 独立的通过代码审计的方式也发现了这个漏洞[5]。@littlelailo 对这个漏洞的成因及利用思路做了说明[6][7]。

由于 @littlelailo 对漏洞的成因已经说得非常清楚了,这里就不再画蛇添足,下面是@littlelailo 说明的直接机器翻译结果。下文中的图像并不是指图片,而是指 img4 固件文件。

这个错误一开始也被称为Moonshine
基本上,我查看过的所有bootrom中都存在以下错误:
1.当usb开始通过dfu获取图像时,dfu注册一个接口来处理所有命令,并为输入和输出分配一个缓冲区
2.如果您将数据发送到dfu,则设置包由主代码处理,然后调出接口代码
3.接口代码验证wLength短于输入输出缓冲区的长度,如果是这种情况,它将使用指向输入输出缓冲区的指针更新作为参数传递的指针
4.然后返回wLength,这是它要接收到缓冲区的长度
5. USB主代码然后使用长度更新全局变量,并准备接收数据包
6.如果接收到数据包,则通过作为参数传递的指针将其写入输入输出缓冲区,并使用另一个全局变量来跟踪已经接收了多少字节
7.如果接收到所有数据,则再次调用dfu特定代码,然后继续将输入输出缓冲区的内容复制到以后从中引导映像的存储位置
8.之后,usb代码将重置所有变量并继续处理新软件包
9.如果dfu退出,则释放输入输出缓冲区,并且如果映像解析失败,则bootrom重新输入dfu

退出dfu可以通过发送dfu中止包或通过触发USB重置触发解析来完成

问题:
在第5步,将更新全局变量,并且Bootrom准备接收数据,但是使用便宜的控制器,您可以违反USB规范并且不发送任何信息(arduino主机控制器或类似的东西)。
然后,您可以触发USB重置以触发图像解析。如果解析失败,bootrom将再次输入dfu,但未执行步骤8,因此全局变量仍包含所有值。
但是,执行了步骤9,因此释放了输入输出缓冲区,而在步骤3中作为参数传递的指针仍然指向它。
因此,您可以通过将数据发送到设备来轻松触发对已释放缓冲区的写入。

对A8的利用:
1.将0x40的随机数据发送到dfu,必须发送此数据,否则您将无法使用USB重置ctrlReq(bmRequestType = 0x21,bRequest = 1,wLength = 0x40)退出dfu
2.通过发送ctrlReq(0x21,1,0)ctrlReq(0xa1,3,1)ctrlReq(0xa1,3,1)ctrlReq(0xa1,3,1)ctrlReq(0xa1,3,1)使dfu处于等待USB重置的状态ipwndfu dfu.py)
3.仅发送了带有bmRequestType 0x21和bRequest 1以及有效载荷大小的wLength的设置数据包(此数据包将更新全局变量)
4.发送一个状态包以标记控制传输的结束(即使将wLength设置为一个值,我们也会跳过数据阶段)
5.触发总线复位
6.等待设备重新输入dfu(现在将释放输入输出缓冲区,并且将在释放的缓冲区下分配usb任务)
7.发送设置的配置请求ctrlReq(bmREQ_SET,USB_REQUEST_SET_CONFIGURATION,wLength = Payloadsize),但将有效载荷与数据阶段一起发送(bootrom中的设置配置处理程序忽略wLength)

有效负载将覆盖usb任务结构,并且将成为usb堆栈之后的下一个分配。通过定位USB任务结构中的链接列表,您可以插入伪造的任务。
而且您可以将usb任务堆栈用作暂存空间,因为看起来它永远都不会写到那么高。
当dfu退出并且usb任务停止时,将生成该代码。因此,您可以在第7步之后发送dfu中止数据包,并在该代码执行exec的情况下控制所有较高的寄存器,因为您的虚假任务将添加到列表中并在以后的某个时刻运行。

〜31.05.19莱洛

 

0x04 能力及威胁评估

限制条件

漏洞利用的限制条件:需要将设备置入 DFU (Device Firmware Upgrade)模式。

漏洞及利用目前所具有的能力

1、BootROM 中的任意代码执行能力。

2、开启 CPU 的硬件调试能力(JTag)。

3、使用 AP 的 GID 进行加解密。

4、使用 AP 的 UID 进行加解密。

任意代码执行能力及 CPU 级调试能力

BootROM 是 iPhone 启动信任链的基础,在 BootROM 中具有了任意代码执行能力,意味着 iPhone 的整个启动信任链被打破了,最终可以用来加载修改过的 iOS 内核,从而破坏 iOS 的基础安全特性。这部分能力主要会被用来做越狱(这里的越狱是指越狱所带来的能力,而不仅仅指越狱行为)。

CPU 级调试能力,这个能力主要会被用来分析 iPhone 的安全启动链及调试相关的漏洞及利用。

使用AP 的 GID 进行加解密的能力

使用 AP 的 GID 进行加解密的能力主要会被用来解密 iPhone 的固件,破坏了苹果对相关组件的封闭性保护,进而可以用来评估相关模块的安全性,下面是利用该能力解密出来的固件密码:

; iOS-v13.1.1-17A854, iPhone X
; iBoot.d22.RELEASE.im4p
IV: 1ef67798a0c53116a47145dfff0aac60
KEY: 9a6ddfb9f432a971be8ae360c6ce0a8e3170f372d4e3158bb04e61d81798929f

使用 AP 的 UID 进行加解密的能力

根据笔者目前所掌握的知识,用户相关数据的密钥主要是使用 SEP 的 UID 进行的加解密,因此尚不清楚使用 AP 的 UID 进行加解密的能力是否会对用户数据造成直接的威胁。

对用户数据的威胁评估

对用户数据威胁的评估结论:笔者认为这个漏洞对用户数据仅构成间接威胁,没有构成直接威胁。

对用户数据威胁评估基于的前提:用户设置了锁屏密码。

一些离散的、iPhone 数据安全相关的知识:

1、  iPhone 的磁盘是加密的(SEP UID 相关)。

2、  设备中保存密码是加密的(SEP UID 相关,且与锁屏密码相关)。

3、  iPhone 中的用户文件是加密的(SEP UID 相关,且间接地与锁屏密码相关)。

4、  用户相关的数据,只有在设备重启后,第一次解锁屏幕后,才有可能被解密,即:绕过锁屏不会造成用户数据解密。

5、  破解锁屏密码主要在 SEP 上进行,根据苹果的文档[8],苹果做了相关的防暴力破解的防护。

通过上面的一些知识点,以及我们前面提到的漏洞限制条件:需要将设备置入 DFU 模式(DFU 模式意味着需要将设备重启)笔者可以得到如下 2 个结论:

1、  利用该漏洞,攻击者虽然无法直接解密用户数据,但是可以解密 iPhone 磁盘的数据分区,该分区中包含一些系统日志及程序行为的日志。

2、  利用该漏洞,从取证的角度,攻击者可以暴力破解锁屏密码,但仍会面临一些限制。

但事情没有绝对的,做过应用防护的应该清楚:如果端被攻破,那么端上产生的数据会变得不安全;端上使用的数据也会变得不安全。前面我们说过,利用这个漏洞攻击者可以破坏内核完整性,进而破坏内核的安全特性,获得内核空间的任意代码执行能力,获得用户空间的任意代码执行能力,因此:虽然攻击者无法利用该漏洞直接获取用户数据,但是配合一些其它的攻击手段,攻击者还是可以获取用户数据。

 

0x05 安全建议

1、不要将自己的受此漏洞影响的苹果设备交给他人。

2、将锁屏密码设置为 6 位数字,或者设置为更复杂的由字母+数字构成的密码。

3、定期重启设备。

 

0x06 参考资料

1、https://twitter.com/axi0mX/status/1177542201670168576

2、https://github.com/axi0mX/ipwndfu

3、https://twitter.com/axi0mX/status/1177542362853040129

4、https://twitter.com/axi0mX/status/1177544539046703104

5、https://twitter.com/littlelailo/status/1177554568626024448

6、https://twitter.com/littlelailo/status/1177555154549313537

7、https://gist.github.com/littlelailo/42c6a11d31877f98531f6d30444f59c4

8、《iOS Security Guide》,iOS 12.3

 

0x07 时间线

2019-09-28 安全人员 @axi0mX 通过 Twitter 公开漏洞

2019-09-30 360信息安全部 涅槃团队 完成本次报告

2019-09-30 360CERT发布本次报告

推荐阅读:

1、iPhone BootROM 漏洞说明及威胁评估

2、CVE-2019-16928:Exim远程堆溢出漏洞PoC预警分析

3、CVE-2019-1367: 微软 IE jscript.dll 组件远程代码执行漏洞预警

长按下方二维码关注360CERT!谢谢你的关注!


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
author-avatar
dmcm0001
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有