【evasi0n】最精心制作的iOS越狱

Screen-Shot-2013-02-05-at-7.35.23-PM-1024x547

在苹果和iOS黑客间多年的“你可以在iPhone上安什么不能安什么”的猫鼠大战中,老鼠再次赢得一分。

周一,一队叫做evad3rs的黑客团队,发布了叫做Evasi0n的越狱工具,它使得几乎所有运行iOS6/6.1的设备都可以被越狱,在几分钟内便可解除苹果在其设备上的各种安装限制。

在越狱上线的前六个小时,Jay Freeman,Cydia商店的管理员声称,这个越狱软件已经被使用800,000次。但是由于过量的服务器访问,导致他的服务器中断,所以他认为这个数字是比较保守的。在星期二,他统计到的访问量已经上升到一百七十万次。

苹果每一次发布新的产品和新的系统更新时,都会完善自己对系统的保护措施,但为了打败它的团队们则往往想出更加精巧的破解办法。Evasi0n并不例外:David Wang,evad3rs四人团队中的一位声称:这款越狱利用了系统内五个独立的漏洞(这要比stuxnet还要多一个,stuxnet是美国NSA国家安全局击垮伊朗核设施时利用的病毒软件。)

我问David Wang evasion如何工作,他是这么回答的:

  • evasion先通过运行一个叫做”libimobiledevice”的程序。这个程序利用与苹果相同的协议,代替了iTunes与设备进行通讯。用这个软件,evasion可以利用iOS移动备份系统中的一个漏洞来访问一些被禁止访问的设置,比如一个包含设备时区的文件。
  • 越狱程序在时区文件中插入一个“符号连接”,这是在系统内从一点到另一点的一个快捷方式。在这里,这个链接连通到一个“接口”——一个受限制的通讯通道。David Wang把它描述为“打往莫斯科的红色电话线”。evasion通过Launch Daemon来改变程序间通讯的接口,Launch Daemon缩写为launchd,是在系统启动的一瞬间,当软件需要根目录访问权限时就开启的主进程,这一步往往是系统下完成的。这就意味着,当iPhone或iPad的移动备份运行的时候,他都会被自动得转接到时区文件,从而访问launchd。
  • iOS还有一个防止不良程序访问launchd的安全措施:代码签名。也就是所有在iOS上运行的代码都需要拥有一个来自苹果并不可被仿造的数字签名。所以evasion打开一个全新的应用程序,这个程序看上去似乎没有任何签名。当用户点击这个程序的图标时,evasion使用一个叫做“shebang”的Unix功能,它可以从一个签了名的程序调用代码。在这里,因为有了更改过的接口,它可以召唤launchd,然后通过一个:“重新挂载”的命令把内存设置从只读根文件系统修改为可写。
  • 既然根文件系统可写了,evasion修改一个叫做launchd.conf的配置文件。通过修改这里的配置,可以让evasion对其进行的修改在每一次运新时都被重复。这是让越狱“永久”的办法:用户不需要每次都在运行越狱的时候把USB接入。
  • 但尽管到此,设备还不能说被越狱。因为还没有解除Apple Mobile File Integrity Daemon(AMFID:苹果移动文件完整性守护进程),这是苹果在内核中运行的一个限制,防止任何没有被签名的代码被运行。所以evasion在AMFID每一次运行的时候,都通过launchd向其加载一个资源库,让AMFID每一次的检测结果都返回:已被认证。David Wang不愿意透露他们是如何打败AMFID的,“这还是留给苹果自己解决吧。”
  • 苹果还有一个防止黑客修改系统内核中内存的安全措施:Address Space Layout Randomization (ASLR:地址空间布局随机化)。这个防护机制在每一次启动的时候,将闪存内的一些代码随机挪动位置,防止任何人去修改它。evasion通过ARM异常中断向量来找到以ARM芯片为基础的内存中的特殊位置。内核的这个部分负责处理崩溃,并在内存中找到崩溃位置。所以evasion模拟一次崩溃,然后通过ARM异常中断向量去寻找这个具体位置,通过这些信息去找出内核其他部分与设备内存间的对应。
  • 打败ASLR后,越狱程序利用iOS最后的一个USB bug,通过USB向内核的内存中传输一个地址,并“天真得指望着用户能够不受感干扰得给传回来”。这便允许evasion能够在内核的任何地方去写代码。最先要改写的地方就是内核中防止代码被更改的地方。“一旦我们进入内核,任何安全机制就都没有用了,然后我们就赢了。”

原文链接: Forbes

翻译:@米斯特苹果