电脑|网络黑客如何破解iOS 6

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

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所说,当你拿到了内核的权限时,整个系统就没有任何“安全机制” 能阻止我们了,我们赢了!


本文由 米花发表。转载请注明出处:https://www.mihua.net/list/0/3396.html

发表评论

您的昵称:

猜你喜欢

最近更新