iOS 安全特性学习_1

0x00 前言

抽空看一下Apple的iOS11的安全文档,并做简单笔记

iOS安全架构

0x01 System security

  • Secure boot chain

这个特性就是由bootloader开始对每一步启动都验证签名,如果验证失败了就会去到recovery mode了

The Boot ROM code contains the Apple Root CA public key, which is used to verify that the iBoot bootloader is signed by Apple before allowing it to load

  • System Software Authorization server

这个好贱,防止你downgrade的一个远程服务器,还有一个叫nonce的机制防止服务器的应答被存储,从而绕过验证。。。

The nonce prevents an attacker from saving the server’s response and using it to tamper with a device or otherwise alter the system software.

  • Secure Enclave

Secure Enclave是一个协调处理器焊接在A11芯片中,主要用于加密数据,还内置了一个硬件随机数生成器。Secure Enclave的内部有一个4MB的闪存,储存椭圆曲线算法的私钥,操作系统不能直接访问这个私钥,只能把要加密或者解密的数据传给SE,然后SE返回结果。并且处理器和SE的通讯是独立隔离的。这里有个名词叫:interrupt-driven mailbox,不是太懂。

同时,第三方应用也是可以SE中创建和保存private key,但永远不能访问,只能把需要加解密的数据发送到SE,让SE进行处理得出结果

参考链接:

https://www.howtogeek.com/339705/what-is-apples-secure-enclave-and-how-does-it-protect-my-iphone-or-mac/

https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/storing_keys_in_the_secure_enclave

  • Touch ID, Face ID,

Touch ID, Face ID的解锁都是借助Secure Enclave来解密的,这个就不细看了,以后用到再查,下面是知乎(Kvenux Sun)的简单解释

  1. Touch ID的数据读进来,处理器转发给Secure Enclave,处理器读不到这部分数据
  2. SE(Secure Enclave)读取数据,通过密钥加解密,比对本地数据(SE自身密钥加密)
  3. SE将结果返回给处理器这个过程中的密钥只有Touch ID和SE能知道,它们通过预设的key来协商得到这个密钥。可以看到这个过程中,处理器只转发了数据,它一方面没有办法拿到数据,另一方面也没有处理这部分数据的密钥,从硬件层面杜绝了外界截获Touch ID的可能。

0x02 Encryption and Data Protection

这部分的硬件加密和文件系统加密略过

  • keychain

说到底keychain就是一个小型SQLite数据库,用于储存APP的password等敏感信息。在iOS中,手机unlock了,keychain也会跟着unlock的。所有APP公用一个keychain,但每个一个app只能访问自己的keychain item,这是由securityd daemon所管理的。os x 和 iCloud keychain就不深究了

参考链接:

https://medium.com/ios-os-x-development/securing-user-data-with-keychain-for-ios-e720e0f9a8e2

https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html#//apple_ref/doc/uid/TP30000897-CH204-TP9

0x03 App Security

  • App code signing

应用代码签名特性,由系统启动开始,内核就会验证运行的应用是否经过Apple的certificate签名,包括iOS的内置应用和第三方应用。所以如果开发者想开发苹果应用,就必须要参加苹果的开发者计划,目的就是要得到有Apple签发的证书,从而使用这个证书为自己的应用进行签名。所以能够上架App Store的应用都是有名有姓的,有效的防止了恶意应用。当然,应用被苹果审查是难免的了,规则由别人制定。

详解的苹果开发者计划参考下面的链接:

https://developer.apple.com/support/compare-memberships/