iOS 的系统安全性比Android 系统要高,其中有几个主要的原因。
一是对应用安装源的限制,iOS 设备必须从App Store 上下载应用或者使用企业证书做分发,而Android 系统的设备可以安装任何安装包(Android Package,APK),这样会导致恶意应用可以很轻易地被安装到手机上。
二是iOS 上的应用有着严格的“沙盒”机制,每个应用都只能访问自己沙盒目录下的数据,没有公共的读写区域,而Android 系统存在公共读写区域,容易造成信息泄露。
三是iOS 应用被限制只能在前台运行,只要点击Home 键,应用的所有线程都会被挂起,只有一些必须运行在后台的服务才能被执行(如实时位置、播放音乐等),而Android 应用可以创建后台服务,即使应用被切换到后台,代码还是可以执行的,用户很难觉察到。
下面我们来详细了解一下iOS 的安全机制。
应用的安装源
App Store 是苹果的应用市场,苹果手机上使用的微信、QQ和支付宝等应用都是从App Store 上下载的。同样,如果你想开发一款应用并上架App Store,必须提交苹果公司进行审核,审核通过之后,应用才能在App Store 上被搜索、下载。除了从App Store 上下载应用外,还有其他安装应用的方法,其中一种方法是使用企业证书做分发,价格为每年299 美元。这种方法不限制安装设备的数量,但是安装完成后想要打开软件时,会出现“未受信任的企业级开发者”提示,如图1-1 所示。
这时我们就需要点击“设置”→“通用”→“设备管理①”,信任安装的应用。还有一种方法是使用个人/公司证书进行开发及测试,价格为每年99 美元。这种方法首先需要将设备的UDID(Unique Device Identifier,设备唯一标识符,在8.1 节有更详细的介绍)添加到开发者账号中,最多可以添加100 台设备,然后下载配置文件,在Xcode 上添加配置文件并编译相应的程序,最后就能安装在这台设备上了。Xcode 9 有自动注册设备的功能,当我们使用Xcode 进行真机调试,连接一个新设备的时候会进行自动注册,如图1-2 所示。
正是App Store 严格的审核以及应用安装源的限制,比较有效地控制了恶意程序的传播。
沙盒
沙盒(sandbox)是iOS 的一个防御机制,每个应用都会有一个自己的沙盒。应用只能在自己的沙盒目录下读写数据,应用A 不能访问应用B 的沙盒,它们之间是互相隔离的。正因如此,攻击者上传恶意程序后,即使侥幸通过了App Store 的审核,被安装到用户的手机之后也不能获取其他应用的数据。获取沙盒目录的方法如下:
-(void)getPath{//获取沙盒根目录路径NSString*homeDir = NSHomeDirectory();NSLog(@"homedir: %@