你的iOS备New

上传人:公**** 文档编号:567859743 上传时间:2024-07-22 格式:PPT 页数:59 大小:702.52KB
返回 下载 相关 举报
你的iOS备New_第1页
第1页 / 共59页
你的iOS备New_第2页
第2页 / 共59页
你的iOS备New_第3页
第3页 / 共59页
你的iOS备New_第4页
第4页 / 共59页
你的iOS备New_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《你的iOS备New》由会员分享,可在线阅读,更多相关《你的iOS备New(59页珍藏版)》请在金锄头文库上搜索。

1、PWN你的iOS设备DarkMage & WindKnownCD-Team(http:/cd-team.org)大纲iOS 保护机制用户态利用技术内核的利用技术攻击BootromJBM 3.0结论iOS 保护机制iOS 保护机制沙盒(Seatbelt)iOS 的沙盒是基于TrustBSD策略框架的内核扩展模块针对每个进程都可以制定特殊的沙盒配置文件沙盒配置文件编译后以2进制的方式保存在KernelCache文件中(iOS下)需反汇编成可读的文本格式来查看内核中的沙盒规则iOS 保护机制沙盒规则的例子(针对MobileSafari)采用正则表达式的规则语句iokit-open(allow iok

2、it.math(“(IOSurfaceRootUserClient) |(IOMobileFramebufferUserClient) .”)iOS 保护机制更多关于Apple的沙盒机制请阅读“The Apple Sandbox” by Dionysus BlazakisiOS 保护机制代码签名所有的可执行文件、库文件都需要Apple签名后才可以运行在iOS中内核会在调用execve之前检测Mach-o文件中的LC_CODE_SIGNATURE段是否有效和可信任的无法分配RWX属性的内存页面iOS启动的时候同样也会检测KernelCache的签名是否有效iOS 保护机制页面执行保护XN (ex

3、ecute never) 标志位在ARMv6中被引入,从而在硬件上支持执行保护iOS中的栈和堆都是不可执行的内核不允许将页面保护标志设置为RWXiOS 保护机制ASLR(地址空间随机化)Antid0te project是第一个针对越狱iPhone提供ASLR保护的程序随后Apple正式的在iOS 4.3中加入了ASLR的支持加入ASLR的目的主要是防御用户态的ROP利用方法,例如JBM 2.0越狱程序同时ASLR也增加了越狱的难度iOS 保护机制ASLR细节所有的模块都已经被映射到dyld_shared_cache文件中dyld_shared_cache整个文件被加载到一个随机的地址dyld和

4、程序主文件的随机偏移是相同的MobileSafari的插件同样会被加载到随机地址用户态利用技术用户态利用技术ARM基础知识32位RISC指令集通用寄存器:R0 R10特殊寄存器:SP LR PCThumb指令集合16位代码用户态利用技术ARM调用规定R0R3用于传递前4个参数返回结果存储在R0和R1中系统函数调用设置R12为函数调用号,然后执行“svc 0x80”用户态利用技术ROP技术可用于绕过XN执行保护没有公开的方法来绕过ASLR至少需要一个信息泄露的漏洞配合获得任何一个模块的随机偏移可以允许攻击者在所有模块中利用ROP所有模块的随机偏移是一致的用户态利用技术ROP要求切换栈首先要求控制

5、SP寄存器控制R0R3来传递参数控制返回地址用户态利用技术选择ROP的模块许多模块都可以用来实现ROP针对iOS 4.3,可以选择dylddyld加载在固定地址- 0x2FE00000针对iOS 4.3,由于所有模块ASLR的偏移是一样的,任何模块都可以被利用JBM3选取了几个模块的指令来完成ROP用户态利用技术JBM3使用的ROP举例栈切换将sp 设置为之前栈中的某个值用户态利用技术JBM3使用的ROP举例控制R0R3传递参数函数调用保存函数返回值读取函数返回值内核的利用技术内核的利用技术iOS内核以及内核扩展均已加密的方式存储在KernelCache文件中可以在theiphonewiki上

6、查询各个版本的解密KeyiOS的内核没有ASLR保护需要用ROP的方式来编写内核的利用程序需要比windows下更加复杂和完善的ROP framework内核的利用技术iOCoreSurfaceRoot 内核整数溢出在处理IOSurface properties存在一个整数溢出漏洞(iOSurfaceWidth 等)该漏洞用于JBM2.0中越狱,针对iOS stack用于存储charstring指令的中间数和结果decoder-buildchar由字体文件中的/BuildCharArray指令来定义JailBreakMe 3.0JBM3是如何构造ROP的利用charstring命令将指令写到d

7、ecoder-buildchar 2 24 callothersubrdecoder-buildcharidx = top0;op_callsubr字体文件中还包含一些子过程JailBreakMe 3.0JBM3如何绕过ASLR这个漏洞允许攻击者读写栈decoder结构存储在栈中decoder-parse_callback存储了T1_Parse_Glyph函数指针获取parse_callback的值- 获取libCGFreetype模块的随机偏移JailBreakMe 3.0绕过ASLR细节设置arg_cnt = (0xfea50000 16)top = top + 0x15bop_setcu

8、rrentpointy = top1; / y = T1_Parse_Glyph函数地址设置top0 = 默认T1_Parse_Glyph函数地址(没有ASLR偏移的情况下) 2 21 callothersubr poptop0 -= top1; / 计算出ASLR偏移JailBreakMe 3.0最后触发漏洞构造完ROP覆盖decoder-parse_callback指针op_seact1_decoder_parse_glyphdecoder-parse_callback开始执行ROPJailBreakMe 3.0JBM3 ROP 代码首先溢出了一个内核漏洞mach_task_selfIOS

9、erviceMatchingIOKitWaitQuietIOServiceGetMatchingServicesIOServiceOpenIOConnectCallScalarMethodIOConnectCallStructMethodIOServiceCloseJailBreakMe 3.0JBM3 ROP 代码随后释放可执行文件并运行buffer = malloc(0x8670)uncompress(buffer, &size, subroutine 0 data, 0x2d49)zlib压缩的mach-o文件open(“/tmp/locutus”)write(file, buffer,

10、 0x8670)closeposix_spawn - 运行locutusJailBreakMe 3.0IOMobileFrameBuffer 内核提权利用IOMobileFrameBuffer kext 允许被MobileSafari通过IOMobileFramebufferUserClient接口调用IOConnectCallScalarMethodHotPluginNotify 0x15IOConnectCallStructMethodSwapEnd 0x05JailBreakMe 3.0IOMobileFrameBuffer 内核提权利用导致IOMobileFrameBuffer:swa

11、p_submit函数的transaction结构中一个指针被修改内核ROP!增加0号系统调用的代码,任何进程调用syscall(0)直接拥有r00t权限/tmp/locutusJailBreakMe 3.0关闭代码签名修改vm_map_enter(protect)函数允许创建RWX内存页修改“cs_enforcement_disable”变量为TRUE修改PE_i_can_has_debugger函数中的一个变量为TRUE修改AMFI模块里面某个函数强制返回为TRUEJailBreakMe 3.0替换sandbox在内核中hook sb_evaluate函数对除了User应用程序(/priva

12、te/var/mobile)以外的任何程序关闭沙盒JailBreakMe 3.0替换SandboxJailBreakMe 3.0修改JBM3JBM3同样能带来危害,攻击者可以修改JBM3的样本来传播iOS恶意软件替换locutus应该是最简单的方式Locutus大小是固定的0x2d49 (压缩后的大小)我们可以替换一个更小的mach-o文件JailBreakMe 3.0替换LocutusLocutus 文件存储在字体文件的subroutine 0解压获取字体文件- 替换subroutine 0 数据- 重新压缩字体文件(保证大小不变) - 替换PDF 中的字体文件此外还需要修改一个变量- 0x

13、2d49该值在uncompress时使用搜索“ff 10 00 2d 49”替换为新locutus压缩后的大小新locutus调用syscall(0)获取root权限JailBreakMe 3.0修改JBM3 Demo演示结论iOS 4.3.4(5)修补JBM 3.0的两个漏洞修补了ft_var_readpacketpoints()函数缓冲区溢出漏洞另外的一个字体格式的漏洞,Freetype已在一年前修补修补了ndrv_setspec() 完美越狱的内核漏洞在dyld中修补了Incomplete codesign的利用技术感谢!Xcon/0x557/CD-team疑问?CD-Team介绍CD-Team(CN Dev Team) 是一个由来自国内计算机安全行业的专业人士组成的iOS设备越狱研究小组。团队成员以前主要是从事windows/linux/unix/mac 等系统的漏洞挖掘/逆向分析研究, 由于大家都对iOS设备有深厚的兴趣,所以走到一起,一起研究和学习。CD-Team http:/cd-team.org加入CD-Team?如果您对iOS设备的安全研究有兴趣的话,可以加入我们.要求要求:熟悉ARM 逆向熟悉XNU 内核熟悉MAC/IOS下漏洞挖掘技术熟悉WCDMA/CDMA通信协议熟悉手机底层硬件模块、有高通芯片底层开发经验熟悉C/OBJ-C开发

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号