还没升级 iOS11?这个高危漏洞威胁近9成 iPhone 用户!

2023-11-22 06:59

本文主要是介绍还没升级 iOS11?这个高危漏洞威胁近9成 iPhone 用户!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 摘要

随着iOS 11的发布,多个BroadCom WiFi 芯片的高危漏洞被公开[1]。这些漏洞对上亿台未来得及更新的iOS设备造成了严重的安全威胁。黑客可对同一WiFi网络下的设备发起攻击,远程控制受害设备的 WiFi 芯片,甚至进一步攻破 iOS 内核。本文对 iOS 设备 WiFI 芯片相关漏洞进行简要技术分析,然后根据 iOS设备的系统版本统计出受影响的规模。

截至9月27日,国内92.3%的iOS用户都受到相关高危漏洞的威胁。我们呼吁用户尽快升级iOS系统到最新版本,并号召手机厂商采用更有效的防护技术,避免用户受到已知高危漏洞的威胁。

2. BroadCom WiFi芯片漏洞技术分析

本文着重分析两个BroadCom WiFi芯片漏洞:CVE-2017-11120和CVE-2017-11121。这两个漏洞都是WiFi 芯片固件代码在处理数据帧时缺乏对特定字段的严格校验。攻击者可以利用它们制造内存破坏,实现任意代码执行,获得对设备的远程控制。

2.1 漏洞CVE-2017-11120

iOS设备搭载的BroadCom WiFi芯片采用了快速基本服务设置转换(Fast BSS Transition)和无线资源管理(Radio Resource Management)标准。在接入无线接入点(Access Point,简称AP)后,iOS设备会发送相邻接入点请求(Neighbor Report Request),AP则返回相邻接入点应答(Neighbor Report Response),包含当前无线局域网内的相邻AP以及各自的BSSID,Operating Class和Channel Number等信息。在处理Neighbor Report Response数据帧时,BroadCom WiFi芯片将每一种Operating Class和Neighbor Report信息保存在一个456字节的内存块中(如图1所示),并且将这些块通过指针串接起来。其中,Neighbor Count Array记录了各个Channel Number的Neighbor数量。Array长度为450字节,每2个字节记录一个Channel Number,所以最大可记录的Channel Number为224(0xE0)。

 还没升级 iOS11?这个高危漏洞威胁近9成 iPhone 用户!

▲图1:BroadCom WiFi芯片记录Neighbor Report Response信息的内存块结构 [2]

 还没升级 iOS11?这个高危漏洞威胁近9成 iPhone 用户!

▲图2:BroadCom WiFi芯片处理Neighbor Report Response信息的函数 [2]

如图 2 所示,WiFi 芯片固件里位于地址 0xAC0A8 的函数(简称function_AC0A8,下同)首先在串联的内存块中查找Operating Class对应的条目,如果没有找到,则会动态创建一个条目 ,然后从数据帧中读出Channel Number作为数组索引,定位到 Neighbor Count Array 中元素,将其值加一。此过程并没有对Channel Number做出校验,当伪造的数据帧中 Channel Number大于0xE0(如0xFF)时,上述过程将会造成内存越界写。攻击者可以通过内存越界写改变关键指针数据或者控制流元素,一步步接管代码执行。值得一提的是,BroadCom WiFi 芯片里没有 ASLR、DEP 等防护,攻击者可以很容易做代码改写,注入任意代码执行。

此漏洞影响 iOS 11.0 以前的设备。目前此漏洞的利用代码已公开[2],攻击者能直接复用这一利用代码攻击漏洞设备,在WiFi芯片中插入后门,并在用户无感知的情况下实现对设备的远程控制。

2.2 漏洞CVE-2017-11121

根据 Fast BSS Transition 标准,当设备在无线网络环境下进行快速漫游(fast roaming)时,会触发校验和重关联(reassociation)操作。Reassociation操作会对组临时秘钥(Group Temporal Key,简称GTK)进行解密和安装。这两个过程中存在多处 memcpy 调用,调用前都缺少对 copy 长度的校验,可能导致内存破坏。

还没升级 iOS11?这个高危漏洞威胁近9成 iPhone 用户!

▲图3:BroadCom WiFi芯片重关联操作时GTK解密和安装的相关函数 [3]

如图3所示,reassociation 由 function_8462C 函数负责,它调用 function_6D8对GTK 解密,然后会继续调用 function_C9C14对GTK 进行安装。相关代码片段如下: 

上述处理过程中,有两处 memcpy 调用存在问题:

1)GTK解密函数 function_6D8 中,当构造的畸形数据帧中 gtk_subelem[1]为11时,函数参数input_length为0。在第二处调用 memcpy 时,input_length-8为0xfffffff8,这将导致大量数据被 copy,破坏 stack上的数据;

2)GTK安装函数 function_C9C14,参数 gtk_len 取值为 gtk_subelem[4]。攻击者可以构造畸形数据帧,使 gtk_subelem[4]大于164,函数中 memcpy 调用前没有检查 gtk_len 取值,可能导致堆溢出。

攻击者同样可以攻击此漏洞造成内存破坏,实现远程任意代码执行。此漏洞影响系统版本在11.0以前的iOS设备。

3. 通过WiFi芯片漏洞可进一步攻击iOS内核

攻击者可将WiFi芯片漏洞作为跳板,进一步攻击 iOS 内核。iOS 设备进行 WiFi 通信时,内核的 WiFi 驱动会向 WiFi 芯片发送 ioctl 请求。如果WiFi芯片被攻击者控制,攻击者能够篡改 ioctl 返回的结果数据,触发内核WiFi驱动中结果处理函数的漏洞,从而实现对 iOS 内核的攻击。

 还没升级 iOS11?这个高危漏洞威胁近9成 iPhone 用户!

▲表1: 当攻击者控制WiFi芯片后,可用于攻击iOS内核驱动的漏洞

表1中列举了可由WiFi芯片作为跳板攻击内核的漏洞。漏洞原理简要说明如下:

● CVE-2017-7103:驱动AppleBCMWLANBusInterfacePCIe中的函数completeFirmwareTimestampMsg,在Firmware Timestamp消息完成后会被回调。函数内部将Timestamp消息封装为mbuf,交由processFirmwareTimeSyncMessage处理,mbuf pkthdr_len设置为消息中timestamp_length字段的值。processFirmwareTimeSyncMessage函数内部存在一处memmove调用,长度参数为pkthdr_len。程序没有对pkthdr_len进行检查,构造过大的pkthdr_len会使memmove调用产生内存溢出。

● CVE-2017-7105:驱动AppleBCMWLANCore中的函数assembleBGScanResults,在处理WLC_GET_VAR ioctl返回的结果时,会调用IOMalloc分配一块堆内存,内存分配长度根据返回结果中的字段计算得出。代码中缺少对分配长度的溢出校验,在WiFi芯片被控制情况下,攻击者可通过篡改ioctl返回数据,使IOMalloc分配长度在计算时产生整型溢出,进而导致过小的内存分配,后续对分配内存的copy操作可能引起堆溢出。

● CVE-2017-7108:驱动AppleBCMWLANCore中的updateRateSetAsyncCallback函数,在处理WLC_GET_CURR_RATESET ioctl请求结果时,首先将0x14字节的结果数据中读到栈中buffer。rate数目由buffer中前4字节获得,接着函数从buffer+4处循环读出rate数据。由于在循环操作前缺少对rate数目的校验,攻击者可以篡改ioctl返回的rate结果,将rate数目字段改为过大的值,实现对buffer数据的越界读,造成栈上数据信息泄露。

● CVE-2017-7110:设备向WiFi芯片发送获得所有Vendor IE列表信息的ioctl请求,返回结果交由驱动AppleBCMWLANCore中setVendorIE函数处理。setVendorIE内部调用obvcopy时,length参数根据ioctl返回结果中字段的计算得出。然而程序中缺乏对length值的校验,在WiFi芯片受控下,攻击者可以构造畸形请求结果,使得obvcopy的length过大,导致堆溢出。

● CVE-2017-7112:驱动AppleBCMWLANCore中handleTraceEvent函数,在处理WLC_E_TRACE消息时,缺少对消息头中len字段的检查。而后根据len计算得到的数组索引,进而改写数组内容时,可能对数组以外的内存写入NULL byte。

4. 绝大多数iOS用户受到WiFi高危漏洞威胁

截至2017年9月27日,通过对国内上亿台iOS设备的系统版本进行的统计,排除虚假设备干扰结果后,详细系统版本比例分布如图4所示。从左半部分开始,逆时针方向按新旧版本次序依次为最新的iOS 11.x到iOS 7.x。其中,最新的iOS 11.x设备占比为7.7%,iOS 10.3.3系统占比50.8%,此版本之外的iOS 10.x版本(10.0.0至10.3.2)占比23.8%。早期的iOS 9.x设备占比11.2%,iOS 8.x 占比 5.8%,更早期的iOS 7占比 0.7%。

从图中可以看到,目前国内升级到最新的iOS 11.x系统的设备仅占7.7%,有近半的iOS设备系统版本为10.3.3。其余设备停留在10.3.2到更早的7.x等不同的版本。这些旧版iOS系统的设备(高达92.3%)面临着文中列举的WiFi芯片高危漏洞带来的安全威胁。 

还没升级 iOS11?这个高危漏洞威胁近9成 iPhone 用户!

▲图4:国内iOS设备系统版本分布(2017年9月27日)

此外,我们统计了从2017年9月11日到2017年9月27日(iOS 11的升级推出于9月19日)iOS各个系统版本的升级情况。结果如图5所示。可以看到,从9月19日开始推送iOS 11.0升级至9月27日期间,iOS 11.x用户占比缓慢递增至7.7%,升级主要来源于iOS 10.3.3。整个统计期间iOS 7.x至10.x的用户占比基本不变,也就是说,仍然有近41.5%的用户选择停留在iOS 10.3.2及以下系统不升级。

还没升级 iOS11?这个高危漏洞威胁近9成 iPhone 用户! 

▲图5:国内iOS设备系统升级趋势(2017年9月11日-2017年9月27日) 

5. 结语

本文分析了近期曝出的iOS设备WiFi芯片高危漏洞以及影响范围。文中提及的漏洞虽然已在iOS 11得到修复,但通过实际统计发现,绝大多数用户由于各种原因没有升级上来,仍面临严重的安全威胁。雷锋网(公众号:雷锋网)建议用户及时升级系统到最新版本,避免受到高危漏洞影响。同时,我们也呼吁手机以及硬件厂商采取更积极的防护技术,避免用户受到已知的高危漏洞威胁。



本文作者:郭佳
本文转自雷锋网禁止二次转载, 原文链接

这篇关于还没升级 iOS11?这个高危漏洞威胁近9成 iPhone 用户!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/408342

相关文章

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

升级至三频BE12000! 华硕ROG魔盒Pro路由器首发拆解评测

《升级至三频BE12000!华硕ROG魔盒Pro路由器首发拆解评测》华硕前两天推出新一代电竞无线路由器——ROG魔盒Pro(StrixGR7Pro),该产品在无线规格、硬件配置及功能设计上实现全... 作为路由器行业的T1梯队厂商,华硕近期发布了新旗舰华硕ROG魔盒Pro,除了保留DIY属性以外,高达120

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核