0%

macOS和iOS逆向环境搭建

最近也在慢慢开始接触一些macOS/iOS安全,首先一个难题就是环境搭建。现在的情况是我有一台mac pro 13 2020和一个iphone8,分别记录一下vmware安装macOS虚拟机和iOS越狱降级这两个在调试macOS/iOS内核之前必须做的准备工作。

vmware安装macOS虚拟机

目前主要有两种方式搭建macOS虚拟机:
1.在macOS物理机上能够使用vmware fusion/virtualbox或者vagrant搭建macOS虚拟机,说起来倒是很简单:用vmware fusion应该不会有什么坑,用virtualbox也有人把要踩的坑总结好了:Run macOS 10.15 Catalina (and other versions) in VirtualBox on macOS。用vagrant参考偏执的iOS逆向研究员:收集全版本的macOS iOS+越狱+内核调试这篇文章即可。比较麻烦的是如果用vmware fusion/virtualbox的话sb苹果是不提供完整系统镜像的,得自己找;用vagrant的话又因为大家都知道的原因你得有一个很稳的梯子下那十几个G的镜像文件。
2.在linux/windows物理机上因为版权的原因默认是没有合法的手段让你装macOS虚拟机的,最最最常见的方法就是用unlocker patch掉vmware workstation pro然后安装macOS,当然镜像还是得自己找。推荐使用这个branch的unlocker:https://github.com/BDisp/unlocker/releases,当前最新的版本是3.0.3。这个branch的unlocker据我测试应该是能直接用不会有什么坑。不过这里还是要注意一个问题,unlocker中的gettools.exe会去下载com.vmware.fusion.zip.tar并且下载速度很慢,我们可以先去把这个包下好,下载的地址是到http://softwareupdate.vmware.com/cds/vmw-desktop/fusion找你用的vmware workstation pro对应的版本即可。更改gettool.py的代码,把下载com.vmware.fusion.zip.tar的代码注释掉,用pyinstaller重新打包一个gettools.exe。以管理员权限运行win-install.cmd,在time.sleep(20)的时候把下载好的com.vmware.fusion.zip.tar拷贝进tools目录即可。

接下来就可以安装macOS了,这里我用的镜像是网上找的一个10.10.2的,如果提示你”没有足够的空间来进行安装”按照网上的方法抹掉vmware的硬盘即可:OS X Base System 上没有足够的空间来进行安装。除此之外我没有遇到任何问题。

最后就是安装VMware Tools了,gettools.exe已经下载好了darwin.iso和darwinPre15.iso,我的vmware workstation pro是15.5.1版的,应该用darwinPre15.iso。

关闭虚拟机,编辑虚拟机,设置CD/DVD,使用ISO映像为darwinPre15.iso。开启虚拟机之后会看到桌面的VMware Tools,直接安装就OK了。

很多时候如果你发现github上某个工具因为已经没有维护而不能使用的时候一个小技巧就是去看看issue或者pull request里面有没有人还在继续维护。本来最先搜到的是https://github.com/theJaxon/unlocker,因为没有维护了所以遇到一点问题,在pull request里面找到了另外有人维护的https://github.com/BDisp/unlocker。去年也是,升级了vmware workstation pro之后https://github.com/sysprogs/VirtualKD也没法用了,在issue里面找到了另外有人维护的https://github.com/4d61726b/VirtualKD-Redux。想学习MachO文件格式,https://github.com/gdbinit/MachOView早已无人维护,在issue里面找到了另外有人维护的https://github.com/mythkiven/MachOView……感谢这些编写维护开源软件的大神,不然这些问题真是让人够头疼的。

iOS越狱降级

首先肯定大家都明白越狱是个什么意思,就和你研究android安全肯定需要有一台root过的手机一样,我们也需要一台越狱的iPhone。不过越狱有四种。

完美越狱(Tethered Jailbreak)
不完美越狱(Untethered Jailbreak)
半完美越狱(Semi-tethered Jailbreak)
半不完美越狱(Semi-untethered Jailbreak)

我画了个图,你一看就明白了。tether是拴绳拴链的意思,tethered就是需要数据线连电脑,untethered就是不需要数据线连电脑。

如果你不知道你的iPhone能不能越狱,你可以到这个网站上查:https://canijailbreak.com/

一看之后你就会发现这几年出的越狱都是半不完美越狱,因为现在苹果的保护措施越来越完善,完美越狱有当然是有,但是能值很多钱,人家不会公开。这几年越狱界最大的新闻就是被称为史诗级漏洞的checkm8了,因为这个漏洞存在于BootROM中,无法通过软件更新的方式修复,所以理论上来讲只要你的iPhone在受影响的设备范围内,不管你怎么升级系统都能用这个漏洞越狱。我们直接去https://checkra.in/下载越狱程序按照上面的说明来就可以了。越狱之后该在Cydia里面装什么等等网上都有很多文章了,这里就不再说了。

接下来说说怎么降级。降级不是你想降就能降的,iOS设备上的固件恢复需要配合Apple服务器进行校验,Apple停止公开验证某个固件版本时,iOS设备就不能从高版本恢复到停止验证的版本。iOS在更新设备固件的过程中会将设备的ECID等信息以及一个一次使用的nonce发送给Apple服务器,服务器在校验通过后会返回校验结果,结果使用非对称算法加密,在没有私钥的情况下无法解密也无法伪造。但是我们可以将校验结果保存下来,之后Apple不再提供此版本校验的时候重放校验过程,实现iOS降级到不提供验证的版本。

说了一大堆可能有点晕了,我们来实际操作一下。现在Apple只会验证最新的iOS 14.0.1版本,我的iPhone8是iOS 13,因为我以前没有保存校验结果,所以理论上现在我没有任何办法将我的iPhone8降级到一个更低的版本。但是现在我可以保存14.0.1的校验结果,假设说以后我的iPhone8升级到了iOS 14.0.2,理论上我就可以通过这个保存的校验结果降级到14.0.1。

首先checkra1n越狱之后我们添加repo:halo-michale.github.io/repo/,安装插件Generator Auto Setter,默认会写入Generator值为一串0x1把nonce固定,这样也方便我们以后降级。然后我们打开爱思助手查ECID:

点击查看设备详情查硬件模型:

然后到https://tsssaver.1conan.com/把这些信息填进去点击submit,就可以下载shsh2文件了。在将来的某个时候如果想降级到这个版本我们可以使用futurerestore,在设备进入kDFU/pwnDFU模式之后用像这样的命令完成降级:

./futurerestore -t xxx.shsh2 –latest-sep –latest-baseband xxxx.ipsw

更新的iPhone和iOS操作似乎还有些不一样,以后如果需要的话再补充。

不过这还没完,苹果还有一个SEP机制(Secure Enclave Processor,安全区域处理器),如果降级的iOS系统与当前的SEP不兼容,那么降级会被禁止。iOS13范围内SEP都是兼容的,那么你只要备份过对应版本的shsh2文件,就可以在iOS13范围内降级。但是网上我看说如果你升级到iOS14,即使有iOS13的shsh2文件就会因为SEP不兼容无法降级。

所以iOS的越狱降级这些还真的挺头疼的……

最后再扯下如何入门macOS/iOS安全,经过一段时间的探索我有如下想法:

1.学http://www.newosxbook.com/index.php上的三本书,建议海淘。国内那些写macOS/iOS的书我翻了几本得出的结论是都不用买。当然就这么看肯定是非常枯燥的,所以我建议有时间就翻翻,一次也不用看太多。

2.学习各种出现的macOS/iOS漏洞,主要是project zero的。

目前我也是积极在整理这些历史漏洞:https://github.com/houjingyi233/macOS-iOS-exploit-writeup

3.从推特或者关注的大牛那里获取一些他们的研究成果然后学习。

如果遇到其它环境方面的问题我也会继续在这篇文章里面更新,2020年争取也写一些macOS/iOS漏洞研究方面的文章!