安全架构
下图是IOS系统安全架构图,它分为两个部分,第一个部分是硬件和固件层上面提供的安全保障,第二个部分是软件上面提供的安全保障,可以看到的是在硬件层上面它有一个加密引擎对我们的设备密钥、组密钥以及Apple的根证书进行加密,除了加密引擎以外它还有一个Secure Enclave的一个模块,这个模块是用来加密和解密我们Touch ID保存用户的指纹密码,在软件层有一个用户分区,整个用户分区是完全加密的,而且这个加密功能是不能关闭的,苹果的加密引擎是硬件级别的,所有进出的存储数据都要通过苹果加密引擎进行加密,而且加密引擎进行加密的key是跟硬件相关的,所以说我不能把一个设备加密的数据拿到另外一个设备上面去解密,应用沙盒提供了一个数据保护类的一个安全机制,这个数据保护类可以保护我们应用类数据的安全性,比如我们在应用沙盒里面写入的数据,我们可以通过数据保护类限定只有在用户解锁了设备之后才能读取这个数据
安全启动
在启动过程中每一步所包含的组件都是通过苹果的签名,只有验证了签名之后才能继续往后面执行,在iOS设备里面集成了一段名为Boot ROM的代码片段,这段代码被烧制到处理器的一块存储上并且是只读的,在系统启动的时候它会通过苹果的证书对底层引导加载程序进行签名验证,如果通过验证的话那么底层加载引导程序就会对引导加载程序进行验证,如果引导加载程序也通过验证了才会去加载内核,在上面所谓的过程中都会有签名验证,如果某一部发现签名验证失败了就会进入到恢复和固件升级模式,下面我们通过的刷入固件到手机上面这么一个流程来讲解
软件授权
为避免设备降级并为缺少最新安全性更新的早期版本,IOS采用了为名为"系统软件授权"的过程,下面的流程是iTunes刷入固件到手机上面的流程:
我们的固件要通过CPU刷到手机上面去,CPU在写入我们的固件之前会让iTunes把我们的固件签名发送到服务器,如果服务器开启了验证的话它就会返回,验证许可或者是验证许可加一个随机串,拿到这个验证许可的时候我们才能通过验证,CPU才会真正的把我们的固件刷到手机上面去上面去,如果关闭"开启验证",在早期的版本只会返回一个验证许可,可以通过保存SHSH来欺骗CPU刷入我们的固件
在后面的版本中苹果除了返回验证许可之外还返回了一个随机串,这个随机串是和硬件相关的并且只能使用一次,也就保证了这个是不能模拟的,所以保存SHSH无效
参考连接
https://www.apple.com.cn/iphone/business/docs/iOS_Security_Guide.pdf
原文始发于微信公众号(七芒星实验室):苹果安全体系架构
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论