[转帖]走进Evasi0n,越狱黑客如何拿到iOS权限

标签:安全存储

访客:32184  发表于:2013-02-08 10:15:56

原文地址:http://www.csdn.net/article/2013-02-07/2814111-into-Evasi0n

苹果一直在控制着用户手中的iOS设备,你将一部iPhone购买回家,但是却发现很多事情你不能做主。你不能随便安装第三方应用,不能随意修改桌面设置。让人感觉,更像是从苹果租用硬件。

2013年2月4日,一个自称是evad3rs的黑客团队,在其网站evasi0n上,第一次提供了iOS6的完美越狱,它为iPhone5、iPad3、iPad mini和其他iOS设备提供了目前最先进的iOS6.1完美越狱程序,允许用户从他们的手机、平板电脑中解除掉苹果加持的各种限制机制。截止目前evasi0n完美越狱工具已有200万iOS用户下载,这足以看出全球用户对于越狱的热情。用户可以安装自定义主题,安装第三方输入法,安装Cydia商店中的MyWi热点工具。可以说,这次的完美越狱工具的开发几乎是个奇迹,因为这次的iOS系统破解远比以往任何时候都要困难。

难以置信的工作

在iOS6 GM发布之后,就有不少越狱团队第一时间尝试进行越狱。此后iOS6正式版放出,绿毒团队的领头人p0sixninja标示,iOS6的防护级别高的令人不可思议,其操作系统的严密性超过了以往任何一款OS。因此越狱的难度是前所未有的。但最后他还是放口:黑客不会被任何框架所束缚。

小插曲:去年12月,随着全球都在“欢度”世界末日的到来。越狱黑客Dream JB表示他会在12月22日放出iOS 6的完美越狱工具。但是到了22日那天,大家才发现他只是和我们开了一个末日玩笑。

越狱梦之队:evad3rs

为了达成iOS6完美越狱这个任务,1月25日(大洪水退去人们下船的日子),原Dev Team成员、越狱黑客pod2g在Twitter上宣布:与红雪团队的MuscleNerd(肌肉男)、Chronic-Dev(绿毒)团队的pimskeks、planetbeing组成了一个新团队——evad3rs。(@pimskeks @planetbeing @pod2g @MuscleNerd)

随即evasi0n.com官网上线。每一天,整个团队都会向外界公布越狱的最新进度:68%、85%、91%……整个iOS6完美越狱工具的开发过程仅用了10天时间。国外许多媒体都用了这样一句话来形容他们的工作:incredible work(难以置信的工作)

@planetbeing 真名是Yiduo David Wang,来自俄勒冈的波特兰,是Evad3rs四人团队的一员。他近日接受了福布斯的采访,为我们讲述了整个iOS6的破解历程。他指出这次破解iOS6至少了利用了5个不同的漏洞。据悉,这次他们使用的手法,比Stuxnet更黑!(Stuxnet蠕虫是摧毁伊朗和浓缩离心机设施的那个著名病毒)下面宁哥就给大家详细的分析Evad3rs如何一步步夺取内核权限。

如何破解iOS 6

最初,Evad3rs使用libimobiledevice来代替iTunes,连接到电脑上。它与iTunes一样使用了相同的设备连接协议。libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。由于苹果官方并不支持Linux系统,但是Linux上的高手绝对不能忍受因为要连接iOS设备就换用操作系统这个事儿。因此就有人逆向出iOS设备与Windows/Mac Host接口的通讯协议,最终成就了横跨三大桌面平台的非官方版本USB接口library。经常用Linux系统的人一定对libimobiledevice不陌生,但是许多Windows和Mac用户也许就不知道了。事实上,它同iTools一样,都是可以替代iTunes,进行iOS设备管理的工具。因为源码是开放的,可以自行编译,所以对很多开发者而言可以说更为实用。

话说回来Evasi0n利用了iOS系统的一个备份bug获得了几项原来无权访问的设置。如,设置设备时区的权限。正是拿到了这个时区设置文件的权限,Evasi0n在该文件中可以插入一条,Symbolic Link符号连接(又称软连接)。这样就将操作系统中的访问求情转移到了其他指定的位置,由此也就能将越狱程序通过Symbolic Link连接到时区设置文件上。

感谢Symbolic Link这个好东西

Symbolic Link相当于Win下的"快捷方式"。Unix文件系统提供了一种将不同文件链接至同一个文件的机制,我们称这种机制为链接。它可以使得单个程序对同一文件使用不同的名字。这样的好处是文件系统只存在一个文件的副本,系统简单地通过在目录中建立一个新的登记项来实现这种连接。软连接有自己的inode,并在磁盘上有一小片空间存放路径名。因此,软链接能够跨文件系统,也可以和目录链接。另外,软链接可以对一个不存在的文件名进行链接,但直到这个名字对应的文件被创建后,才能打开其链接。

David Wang 把它比喻成“莫斯科红色专线”。通过Symbolic Link,可以将连接转到某个特定的socket中,让不同程序之间可以互通信息。整个iOS系统中的Launch Daemon后台进程的启动程序都存放在"/System/Library/LaunchDaemon"目录下, 就是那些".plist"文件。这些程序会在设备启动时率先启动,所以他们具备root权限,可以启动其他应用。Evasi0n修改了Launch Daemon的socket,这就意味着,当iOS设备进行备份时,就会自动的让所有程序和文件都能访问时区设置文件,感谢Symbolic Link这个好东西,让所有程序可以连接Launch Daemon。

这里需要提一句为什么苹果的启动服务叫做“Launch Daemon”?从Mac OS 10.4开始,苹果就采用Launch来管理整个操作系统的services和processes了。传统的Unix会使用“/etc/rc.*”或者其他机制来管理要启动的startup services,而此后在Mac OS X则使用Launch来管理,其startup services被叫做Launch Daemon和Launch Agents。前者是开机时载入,而后者是用户登录时载入的。

如何绕过Code-signing

在iOS中,还有另一个安全保障——Code-signing。它能够阻止流氓应用访问Launch。在iOS设备上运行的代码都需要通过苹果的审核,并附带上有效的签名。一般开发者开发的程序,在正式发布到App Store之前是需要使用苹果颁发的证书进行签名的之后,再由苹果进行审核。审核成功之后,苹果也会对程序进行一次签名。当iPhone或者iPod Touch从AppStore下载安装程序的时候会调用系统进程INSTALLD(mobileinstalltion)对应用程序进行证书校验。所以一般需要安装破解软件时,都需要把此文件替换成破解版本。

如果你的MobileInstalltion没有破解的话,那么在安装或者运行程序的时候需要对你的数字证书进行检测,如果发现没有签名或者签名不对,就会自动kill掉程序。那么在这种情形下,我们可以伪造签名(当然无法通过AppStore的审核), 骗过MobileInstalltion ,使得可以正常使用。

Evasi0n构建了一枚没有代码的应用,当用户点击这个应用的时候,它就会利用Unix的“Shebang”命令,调用一个已经签名的应用代码,通过Code-signing的审查。此后,它就可以再调用上文提到的Launch执行root级的命令了。Evad3rs要通过这种方式,来对RFS(root文件系统)的只读权限使用“remount”命令变为可写。这就是为什么,我们在越狱时,要运行一次下面这个LOGO的应用。

图:在越狱时要点一下这个应用

什么是Shebang

在计算机科学中,Shebang(也称为Hashbang)是一个由井号和叹号构成的字符串行(#!),其出现在文本文件的第一行的前两个字符。 在文件中存在Shebang的情况下,类Unix操作系统的程序载入器会分析Shebang后的内容,将这些内容作为解释器指令,并调用该指令,并将载有Shebang的文件路径作为该解释器的参数。Shebang这一语法特性由#!开头,即井号和叹号。 在开头字符之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于调用解释器。 在直接调用脚本时,调用者会利用Shebang提供的信息调用相应的解释器,从而使得脚本文件的调用方式与普通的可执行文件类似。

修改launchd.conf文件

现在RFS已经可写了,Evasi0n接下来就是先修改launchd.conf文件,当修改了launch配置文件之后,前面的工作就可以保存下来了。这样每次iOS设备重启的时候,就不必再连上USB进行越狱操作了。之前,很多iOS系统不完美越狱就是因为没有拿到修改launchd.conf的权限。造成每次重新开机都要再越狱一次,很麻烦。

破解AMFID防护机制

对于黑客来说,没有夺取到kernel(内核)权限,都不算作真正把系统征服。在iOS的系统内核中,还有一层叫做AMFID(Apple Mobile File Integrity Daemon)的防护机制,它是用来监测移动文件完整性的守护进程。AMFID会校验代码签名,防止流氓程序运行。Evasi0n利用launchd.conf文件,为AMFID加载一个library,让每次AMFID在做校验的时候,都会返回一个“approved”的肯定回答。David Wang在福布斯记者的采访中,并没有给出具体的破解方法,只是留下一句话:苹果自己应该明白这一点。

异常向量,萃取内核地址

除了内核级的应用签名之外,苹果为了防止黑客在内核级的内存中随意修改,iOS还有最后一道那就是ASLR(Address Space Layout Randomization)随机地址空间布局。当系统加载时,ASLR都会将他们随机分配到内存的不同位置,防止某些内容总是存储在内存的特定部分,让黑客有规律可寻。

聪明的Evad3rs团队,使用了ARM exception vector(异常处理向量)。exception vector其实经常会用到,处理器异常、出错时(其实不完全是出错),它就会抓来这个vector找相应的处理函数。例如,遇到看不懂的指令,它就会抓0x4地址指令。也就是“ldr pc, _undefined_instruction”,接着就会跳到undefined instruction的函数去处理。当程序出现异常时,ARM异常向量就会给出崩溃的内存地址,黑客拿到足够多的信息,就可以找到内核在内存的分布范围,这样整个内核的内容也就被抓到了。

夺取内核控制权

搞定ASLR之后,Evad3rs利用iOS连接USB的一个漏洞,把内核内存的某个地址传给一个应用,而应用返回来的内容就可以用来改写这部分内存地址。由此Evad3rs就可以修改内核任何部分的内容了。据Wang所说,当你拿到了内核的权限时,整个系统就没有任何“安全机制”能阻止我们了,我们赢了!

最后给他家看看twitter上面这个神人的子舞介绍:


评论(2)

您可以在评论框内@您的好友一起参与讨论!

    1. 张卡尔 嗯,很精彩的文章,引入入胜。留着好好看。不过,我有点担心越狱。上次一个iPhone,越狱的,后来不担心又被抓会监狱去,至今不能再次越狱了。

      回复[0] 2013/02/08 11:11

    1. 马剑 这篇文章也许可以从另外一个侧面去印证一下 @张卡尔 的 http://www.cio.com.cn/eyan/view/22315 这篇文章真的“没有搞错”。

      回复[0] 2013/02/08 10:18

<--script type="text/javascript">BAIDU_CLB_fillSlot("927898");