剥开ios 系统sandbox神秘面纱
现在用ios系统的人越来越多了,但是发现很多人从非正规渠道购买的ios设备里的操作系统已经被越狱过了,什么是越狱呢,越狱是指ios系统不在像原生系统那样有很多限制。比如说可以安装不是通过itunes分发的应用程序,可以安装iap creaker,模拟购买流程,不用花钱就可以购买游戏里的道具,金币。还可以向系统文件夹下拷贝文件。其实说了这么多,意思就是说越狱的机器用户可以获取最高的root权限,干任意自己想干的事情。任何事情都是有利有弊的,既然你可以拥有最高的root权限,那别人同样可以拥有同样的root权限,这样你的ios设备完全暴露在危险之中。说到这里大家可能就迷惑了,为什么说我自己还不能拥有系统的最高权限了呢?这就和ios操作系统有关了,ios是从苹果的next操作系统发展过来的,next是一款类unix操作系统,unix系统对于文件权限的限制非常严格,普通用户常用的操作更本用不到root权限,用户的操作请求假如是已分配权限,自然可以执行,反之需要root权限的话就不被允许,说了这么多,那sandox又是什么东西呢?let‘s
go,揭开它神秘的面纱。
图一
1、每个应用程序都有自己的存储空间
2、应用程序不能翻过自己的围墙去访问别的存储空间的内容
3、应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。
通过这张图只能从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是:sandbox对应用程序执行各种操作的权限限制。通过查看资料,发现苹果sandbox被封装在libsandbox.dylib的静态库里。下面主要介绍下sandbox的运行流程:
1、为每个进程分配空间和权限配置
2、TrustedBSD API 托管 和通信
3、暗盒负责关闭代码控件,明盒负责打开代码控件
开始以sandbox_init 通过libsandbox.dylib转换为2进制传递给kernel mac syscall TrustedBSD 将sandbox_init 的请求发sandbox.kext 的扩展,扩展为当前进程安装证书,然后返回安装结果,如果安装成功,每次进程的请求,都会被trusted bsd 发送给sandbox.kext 去匹配之前安装的证书规则。如果证书不匹配的话,则安装失败。目前苹果的证书都是rsa加密的证书,证书有三种类型,一种是developer类型,真机调试的时候要用到这个证书,还有另外两种分别是ad
hoc,和distribution证书,它们的区别以及使用方式,我将通过另一篇博客向大家介绍。还是回到正题上,每种证书里都写有设备id,应用程序的权限。现在来看看,应用程序都有哪些权限,通过运行man sandbox_init, 得到一下权限:
图二
看到这里,开发ios的同学肯定恍然大悟了,ios下可写文件和可读文件不是放在同一个文件下的,从这里可以看到,应用程序的可写文件都放在/var/tmp下,具体是什么文件格式没有深究,但是和android估计差不了多少吧,android是通过apk包名来命名文件夹名字。这样才应用程序卸载时会将可写文件下的文件一同卸载掉,同样程序升级的时候,只将可读文件下的文件覆盖掉,做到同步到最新文件。这里直到权限部分,后面的如何解析证书权限就不深说了,有兴趣的同学自己看文档,文章后面我会附上文档的地址。
解析文件权限是通过苹果自己定义的一种解析语言,通过读证书里定义的权限,得出结果,来判断是否执行应用程序的请求。如果解析拥有请求的权限,则通过TrustBsd将请求传递给操作系统进程,由操作系统来执行,反之则返回失败。