技术贴:Evasi0n是怎么帮你越狱iPhone的?

2013-02-07 10:08:29来源:36kr作者:

苹果的iOS系统每升级一次,iPhone和iPad的越狱难度就会增加一些。Evasi0n也不例外,evad3rs四人越狱团队之一的David Wang表示,整个越狱过程至少利用了iOS系统里的5个不同的、新的漏洞才完成。

越狱就是一个猫鼠游戏,这回,老鼠又赢了。

昨天凌晨,越狱团队evad3rs发布了iOS 6, iOS 6.1的苹果iOS全系列设备越狱工具Evasi0n,允许用户一键越狱,不过几分钟就突破了苹果的安装限制。

Cydia appstore的管理员Jay Freeman表示,上线仅6个小时,Evasi0n就被使用了至少80万次——这还是保守估计,因为Evasi0n上线第一天带来的海啸般的访问多次把Cydia的服务器整垮了。到了第二天,访问量达到170万次。

苹果的iOS系统每升级一次,iPhone和iPad的越狱难度就会增加一些。Evasi0n也不例外,evad3rs四人越狱团队之一的David Wang表示,整个越狱过程至少利用了iOS系统里的5个不同的、新的漏洞才完成。

\

David Wang向Forbes讲解了Evasi0n的整个越狱过程,整理如下:

Evasi0n首先会运行libimobiledevice,该程序使用了和苹果iTunes相同的协议,能代替iTunes与iOS通信。Evasi0n利用了iOS移动备份系统里的一个漏洞,获得了几项原来无法被访问的设置的访问权限(设置设备时区的一个文件)。

Evasi0n会在该时区文件中插入一个文件软链接(Symbolic Link),可以将操作系统里的访问请求转移到其他指定位置。这样,那条链接就转到了某个特定socket——不同程序间的限制的通信渠道,David Wang把它比喻成"直达莫斯科的热线"。Evasi0n把各个程序与Launch Daemon通信的socket做了修改(Launch Daemon缩写成launchd,是iOS设备启动时首先加载的主程序,它可以启动需要"root"权限的其它应用。)这就是说,每当iPhone或iPad的移动备份系统启动,所有的程序都能获得该时区文件的访问权限,再加上Symbolic Link,这些程序就能通过launchd打开了。

为了防止程序访问launchd,iOS还有一道防线:代码签名(Code-signing)。这一限制要求所有在iOS设备上运行的代码都得被苹果审核通过,并且附有对应的签名。相应的,Evasi0n准备了一个貌似没有代码的新应用,当用户打开该应用的时候,它就会利用Unix的"shebang"把戏,调用另一个已签名的应用的代码。然后再调用前面提到的launchd,再用launchd运行一条"remount"命令,该命令会把原来只读的根文件系统(root file system, RFS)变成可写。

RFS可写以后,Evasi0n接着修改launchd.conf文件——修改了launchd的配置文件以后,Evasi0n前面做的工作就可以保留下来了,这时越狱才是"一劳永逸"的,之后,哪怕设备重启了,用户也不用重新再越狱了。

不过,尽管经过了这么复杂的步骤,设备的限制在"内核(kernel)"层被解除之前,越狱都是未完成的。苹果iOS系统的内核层里还有一个AMFID(Apple Mobile File Integrity Daemon,苹果移动文件完整性守护进程),AMFID会检验代码签名,防止未经允许的程序运行。每当有程序运行的时候,Evasi0n就会利用launchd为AMFID加载一个函数库,替换AMFID原来检查代码签名的函数,之后每回程序启动就会返回"approved"的结果了。David Wang在此不愿透露解决AMFID的更具体的信息,"苹果他们自己能整明白的。"

为了防止黑客在系统内核层面篡改内存,iOS还有一道防线:地址空间布局随机化(Address Space Layout Randomization, ASLR)。 当一个应用程序加载时,ASLR就会将其基址随机设定,防止黑客篡改该段代码。但是Evasi0n还是通过ARM异常向量(ARM exception vector)成功定位了基址。当出现程序崩溃时,ARM异常向量会报告崩溃究竟发生在内存的哪个位置,于是,Evasi0n就模拟了一次崩溃,检查ARM异常向量给出的崩溃报告和崩溃位置,拿到足够的信息就可以把设备内存里的内核的其它部分了找出来了。

摆平ASLR以后,Evasi0n就会利用iOS连接USB时的最后一个漏洞,把内核内存里的某个地址交给一个程序,"等着用户再把它返回"。Evasi0n接着就可以改写内核的任意部分了。首先改写的是对内核代码修改的限制,"进入内核以后就再无安全可言了。"David Wang表示,"我们就赢了。"

赞助商链接: