Skip to content

liukaiyi54/iOS-Security-Translate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 

Repository files navigation

iOS安全白皮书

介绍

苹果以安全为核心设计了iOS平台。当我们着手去打造一个尽可能最好的移动平台时,我们吸取了数十年的经验,建立一个了全新的架构。我们考虑了桌面环境的安全风险,并且在设计iOS的时候,建立了新的安全方法。我们开发并整合了创新的特性,这些特性更加牢固了移动安全性,并且会默认保护整个系统。因此,iOS是移动设备安全性的重大飞跃。

每一个iOS设备都将软件,硬件和服务集成在一起,以实现最大的安全性和透明的用户体验。iOS不仅可以保护设备及其数据,还可以保护整个生态系统,包括用户在本地,网络上,已经在一些关键的互联网服务中所做的一切。

iOS和iOS设备提供高级的安全特性,但是同时它们也易于使用。许多这些特性都是默认开启的,因此IT部门不需要执行大量的配置工作。并且像设备加密等关键安全功能是不可配置的,所以用户不会错误地禁掉它们。其他特性,像Touch ID,通过使设备使用更简单,更直观地增强了用户体验。

本文档提供了有关如何在iOS平台中实现安全技术和功能的详细信息。它还将帮助开发团队将iOS平台安全技术与功能结合自己的政策和程序来满足其特定的安全需求。

本文档分为以下主题:

  • **系统安全:**集成的安全的软件和硬件,即iPhone,iPad和iPod touch的平台。
  • **加密和数据保护:**在设备发生丢失或被盗,或者未经授权的人员尝试进行使用或修改时,这个架构体系和设计可以保护用户数据。
  • **App安全:**系统可以安全的运行app并且不会破坏平台的完整性。
  • **网络安全:**为传输数据提供安全认证和加密的行业标准网络协议。
  • **Apple Pay:**苹果的安全支付方法。
  • **网络服务:**苹果基于网络的用于消息传递,同步和备份的基础设施。
  • **设备控制:**一些允许管理iOS设备,防止未授权使用的方法,如果设备丢失或被盗,可启用远程擦除。
  • **隐私控制:**用于控制位置服务和用户数据访问的iOS功能。

系统安全

系统安全的设计使得软件和硬件在每个iOS设备的所有核心组件中都是安全的。这包括启动过程,软件更新和Secure Enclave(保存touch id信息的芯片模块)。这个架构是iOS安全的核心,并且永远不会妨碍设备的可用性。

iOS设备上硬件和软件的紧密集成,确保系统的每一个组件都是可信的,并会对整个系统进行验证。从最开始的启动到iOS的软件更新再到第三方app,每一步都经过分析和审查,以帮助确保硬件和软件以最理想的状态运行并且合理地使用资源。

安全启动链

启动过程的每一步都包含了由苹果加密签名以确保完整性的组件,并且只会在验证了信任链之后继续运行,这包括引导程序,内核,内核扩展和基带固件。这个安全启动链帮助确保了最底层的软件不会被篡改。

当一个iOS设备启动时,它的应用处理器会立即从被称为引导ROM(Boot ROM)的只读存储器执行代码。这个不可变的代码,被称作信任硬件根源(the hardware root of trust..实在不造怎么翻),在芯片制造的时候就被装入,并且被隐式地添加信任。这个引导ROM的代码包含了Apple Root CA公钥,被用来验证iBoot引导程序在加载之前是不是被苹果签名。这是信任链中的第一步,每一步都确保下一步由苹果签名。当iBoot完成它的任务后,它会审查并运行iOS内核。对于用S1,A9或者早期的A系列处理器的设备,会有一个额外的底层引导程序(LLB,Low-Level Bootloader)阶段由引导ROM加载和验证,再反过来加载和验证iBoot。

如果这个引导过程中有一步不能正确加载或者不能验证下一步,启动就会终止,并且设备会在屏幕上显示"Connect to iTunes"。这叫做恢复模式(recovery mode)。如果引导ROM不能加载或者验证LLB,设备就会进入设备固件升级(DFU,Device Firmware Upgrade)模式。在这两种情况下,设备都必须通过USB连接到iTunes,然后恢复到出厂默认设置。想知道更多的手动进入恢复模式的信息,点击https://support.apple.com/kb/HT1808。

在有蜂窝网络接入的设备上,基带子系统还会利用由基带处理器验证的带有签名的软件和密钥来自定义自己的类似的安全启动过程。

对于有Secure Enclave模块(就是带touch id)的设备,Secure Enclave协处理器也会利用一个安全启动步骤来保证它单独的软件也经过苹果的验证和签名。

系统软件授权

苹果定期发布软件更新,来解决新兴的安全问题,并且提供新的功能特性,这些更新会同时提供给所有支持的设备。用户在设备上通过iTunes收到iOS更新通知,并且更新是通过无线方式推送的,鼓励用户快速地更新最新安全修复。

上述的启动过程保证了只有苹果设计的代码才能被安装在设备上。为了防止设备被降级到缺乏最新安全更新的旧版本,iOS使用了一个流程叫做系统软件授权(System Software Authorization)。如果系统降级可行,持有设备的攻击者可以安装一个旧版本的iOS,开发出一些在已经在新版本中修复了的漏洞。

在带有Secure Enclave模块的设备上,Secure Enclave协处理器会利用系统软件授权来保证它软件的完整性,并且防止降级安装。详情请看接下来的"Secure Enclave"章节。

iOS软件更新可以使用iTunes进行安装,或者通过空中下载技术(OTA)。用iTunes的话,会有一个完整的iOS系统拷贝下载并安装。OTA方式的软件更新则是采用增量更新,而不是下载整个系统,这样可以改善网络效率。另外,软件更新可以被缓存在本地网络服务器上,以便iOS设备不需要访问苹果服务器来获得必要的更新数据。

在一个iOS系统的升级过程中,iTunes(或设备本身)连接到Apple安装授权服务器,并且向其发送安装包的每个部分的密码测量列表(例如,iBoot,内核,系统操作映像),一个随机的抗重放值,还有设备的ECID。

授权服务器会根据允许安装的版本检查显示的测量列表(list of measurements),如果发现了一个配对,便将此ECID加入到测量列表里并签署结果。服务器将一组完整的签名数据作为升级的一部分传送给设备。添加ECID"个性化"了请求设备的授权。通过仅对已知的测量进行授权和签名,服务器可保证更新完全为苹果提供的。

引导时间信任链评估验证了签名来自苹果,从磁盘加载的项目测量结合设备的ECID匹配了签名的覆盖范围。

这些步骤保证了授权是在一个特定的设备上,并且一个旧的iOS版本不能从一台设备拷贝到另外一台设备。这个随机数防止了攻击者保存服务器的响应并将其用于篡改设备或以其他方式更改系统软件。

Secure Enclave

Secure Enclave是一款在Apple S2,Apple A7以及之后的A系列处理器中集成的协处理器。它使用加密内存,并包括一个硬件随机数生成器。Secure Enclave提供数据保护密钥管理的所有加密操作,并保持数据的完整性,即使内核已经被破坏。Secure Enclave与应用处理器的通信被隔离到一个中断驱动的邮箱和共享的内存数据缓冲区中。

Secure Enclave运行了一个苹果定制版的L4微内核系列。Secure Enclave利用它自己的安全引导,并可以使用独立于应用处理器的个性化软件更新过程进行更新。在A9或者之后的A系列处理器上,芯片安全地生成了UID(Unique ID)。不过苹果和系统的其他部分仍然不知道这个UID。

设备启动时,会创建一个短暂的密钥,与UID混在一起,用于加密设备内存空间的Secure Enclave部分。不过A7处理器上情况却不同,Secure Enclave的内存也使用这个短暂的密钥进行身份验证。

另外,由Secure Enclave存在文件系统的数据是用与UID和反重放计数器混在一起的密钥加密的。

Secure Enclave负责处理来自Touch ID传感器的指纹数据,确定是否与注册指纹匹配,然后代表用户启用访问或购买权限。处理器和Touch ID传感器之间的通信通过串行外设接口总线进行。处理器讲数据转发到Secure Enclave,但是无法读取。它使用会议密钥进行加密和验证,会话密钥使用为Touch ID传感器和Secure Enclave配置的设备共享密钥协商。会话密钥交换使用AES密钥包装,双方提供简历会话密钥并使用AES-CCM传输加密的随机密钥。

Touch ID

Touch ID是指纹感测系统,可以更快更轻松地安全访问设备。该技术从任何角度读取指纹数据,并随着时间的推移更多地了解用户的指纹,随着每次使用的其他重叠节点被识别,传感器会继续扩展指纹图。

Touch ID使更长,更复杂的密码更加实用,因为用户不必频繁地输入密码。 Touch ID还克服了基于密码的锁的不便,但不是通过替换它,而是通过在周到的边界和时间限制内安全地提供对设备的访问。

Touch ID和密码

要使用Touch ID,用户必须给设备设置密码。当Touch ID扫描并识别已注册的指纹时,设备将在不要求密码的情况下解锁。密码随时都可以使用,Touch ID则不行,在以下情况下仍然需要输入密码:

  • 设备刚刚启动或重新启动
  • 设备超过48小时未解锁
  • 在过去的156小时(六天半)中,密码未被用于解锁设备,并且Touch ID在过去4小时内未解锁设备。
  • 设备收到远程锁定命令
  • 五次不成功的尝试指纹解锁
  • 使用Touch ID设置或注册新指纹时

当启用Touch ID时,按下睡眠/唤醒按钮时,设备立即锁定。仅使用密码的情况下,许多用户设置了解锁宽限期,以避免每次使用设备时都输入密码。使用Touch ID,设备会在每次进入睡眠状态时锁定,并在每次唤醒时都需要指纹或密码。

Touch ID可通过训练来识别多大五个不同的手指。对于一个注册过的手指来说,与一个随机的其他人的手指匹配成功的概率是1/50000。然而,Touch ID只允许五次错误地尝试,之后便只能通过输入密码来获取访问权限了。

Touch ID的其他用途

Touch ID也可以被用于Apple Pay。有关详情请参阅本文档Apple Pay部分。

另外,第三方应用程序可以使用系统提供的API来请求用户使用Touch ID或密码进行身份验证。该应用程序仅会被告知身份验证是否成功; 它无法访问Touch ID或与注册指纹相关联的数据。

钥匙串里的项目也可以被Touch ID保护, 通过Touch ID指纹匹配或输入设备密码就可以得到它里面的信息。应用程序开发人员还有API来验证用户是否设置了密码,因此可以使用Touch ID对钥匙串中存储的项目进行身份验证或解锁。

在iOS 9和之后的系统里,开发者可以:

  • 要求Touch ID API操作不会回退到应用程序密码或设备密码。以及检索注册状态的表示的能力,这允许Touch ID作为安全敏感应用程序的第二个因素。
  • 在Secure Enclave中生成并使用ECC密钥。这些密钥可以被Touch ID保护。这些密钥的操作始终在Secure Enclave中进行并且只在Secure Enclave授权使用之后完成。应用程序可以使用Keychain通过SecKey访问这些密钥。SecKeys只是对Secure Enclave密钥的引用,这些密钥永远不会离开Secure Enclave。

Touch ID也可以配置来批准从iTunes Store,App Store和iBooks Store的购买, 这样用户就不用输入Apple ID的密码。当他们授权一个购买时,认证令牌会在设备和商店之间交换。此令牌和加密随机数被存放在Secure Enclave中。这个随机数被一个Secure Enclave密钥签名,并被所有设备和iTunes Store共享。在iOS 10中,被Touch ID保护的Secure Enclave ECC密钥被用来通过登入请求来授权购买。

Touch ID安全

只有在Home键周围的电容圈检测到指头的时候,指纹传感器才会被激活,这将触发一个高级图像数组来扫描手指,并将扫描结果发送到Secure Enclave。

光栅扫描临时存储在Secure Enclave内的加密存储器里,同时被矢量化分析,然后被丢弃。该分析使用皮下脊流角度映射,丢弃重建用户实际指纹所需的细节数据的有损过程。生成的节点图无需任何身份信息存储在加密格式中,该格式只能由Secure Enclave读取,并且不会被发送到Apple或者备份到iCloud和iTunes上。

Touch ID如何解锁一台iOS设备

如果Touch ID是关闭的,那么当一个设备锁定时,保留在Secure Enclave中的数据保护类Complete的密钥将被丢弃。在用户通过输入密码解锁设备之前,在该类中的文件和钥匙串项目是无法访问的。

如果Touch ID是开启的,当设备锁定时这些密钥就不会被丢弃;相反,它们被包含在Secure Enclave内的Touch ID子系统的密钥中。当一个用户尝试着去解锁设备时,如果Touch ID识别出用户的指纹,它会提供一个密钥来开启这些数据保护密钥,然后设备就被打开了。这个过程通过请求数据保护和Touch ID子系统协作解锁设备这种方式,来提供额外的保护。

如果设备重启,这些密钥会在48小时后或五次Touch ID验证失败时被Secure Enclave丢弃。

加密和数据保护

安全引导链,代码签名和运行时进程安全性都有助于确保只有受信任的代码和应用程序才能在设备上运行。iOS具有额外的加密和数据保护功能来保护用户数据,即使安全基础设施的其他部分已经受到威胁(例如,在未经授权修改的设备上)。这为用户和IT管理人员提供了重要的好处,它可以随时保护个人和企业信息,并提供即使完整的远程擦除方法,以防设备失窃或丢失。

硬件安全特性

在移动设备上,速度和电量是至关重要的。加密操作复杂,如果设计和实现的时候不考虑这些操作的优先级,可能会引起性能或电池寿命问题。

每个iOS设备都有一个专门的AES 256加密引擎内置于闪存存储器和主系统内存之间的DMA路径中,使得文件加密非常有效。在A9或更高版本的A系列处理器上,闪存存储子系统位于隔离总线上,只能通过DMA加密引擎来访问包含用户数据的内存。

设备的唯一ID(UID)和设备组ID(GID, group ID)是AES 256位密钥,在制造过程中被被融合(UID)或编译(GID)到应用处理器和Secure Enclave中。没有软件或者固件可以直接读取它们;它们只能看见使用UID或GID作为密钥在硅中实现的专用AES引擎执行的加密或解密操作的结果。另外,Secure Enclave的UID和GID只能被Secure Enclave的AES引擎使用。UID对每个设备都是唯一的,而且不由Apple或者任何其他供应商记录。GID则对一类设备中的所有处理器都是相同的(例如,所有使用A8处理器的设备),并且用于执行非安全关键的任务,比如在安装和恢复过程中传送系统软件时。将这些密钥集成到硅中有助于防止它们被篡改或者绕过,或者在AES引擎之外访问。UID和GID也不能通过JTAG或者其他调试接口使用。

UID允许数据加密地绑定到特定的设备。例如,保护文件系统的关键层次结构包括UID,因此如果存储器芯片从一个设备物理移动到另一个设备,则文件是无法访问的。UID与设备上的任何其他标识符无关。

除了UID和GID之外,所有加密密钥都是由系统随机数生成器(RNG)使用基于CTR_DRBG算法创建。系统熵由引导期间的定时变化产生,也会由从设备启动后的中断定时产生。Secure Enclave内生成的密钥使用基于CTR_DRBG算法处理的多个环形振荡器的硬件随机数生成器。

安全地删除保存的密钥与生成密钥一样重要。在闪存中做这样的操作是尤其有挑战性的,这种情况下,磨损平衡可能意味着要擦除多个数据副本。为了解决这个问题,iOS设备包含了专门用于安全数据擦除功能的功能,称为可扩展存储(Effaceable Storage)。该功能访问底层存储技术(例如,NAND),在非常低的级别直接寻址并擦除少量块。

文件数据保护

除了iOS设备内置的硬件加密功能外,Apple还使用一种名为数据保护(Data Protection)的技术来进一步保护设备上存储的闪存中的数据。Data Protection允许设备响应常见的事件,例如来电,也可以为用户数据提供高级别的加密。默认情况下,主要系统应用程序(如邮件,邮件,日历,联系人,照片和健康)数据值都使用Data Protection,而在iOS 7或更高版本上安装的第三方应用程序会自动接收此保护。

Data Protection通过构建和管理密钥层次来实现,并建立在每个iOS设备内置的硬件加密技术的基础上。Data Protection通过将每个文件分配给一个类来基于每个文件进行控制; 可访问性由类密钥是否解锁来确定。

架构概述

每次创建数据分区上的文件时,Data Protection将创建一个新的256位密钥(the per-file key),并将其提供给硬件AES引擎,该引擎使用密钥对文件进行加密,并使用AES CBC模式写入闪存。(在A8处理器的设备上使用AES-XTS。)初始化向量(IV)用文件中的块偏移量计算,并以每个文件密钥的SHA-1散列加密。初始化向量(IV)用文件中的块偏移量计算,并以每个文件密钥的SHA-1散列加密。

注:下面出现的每个文件密钥指the per-file key。

根据文件应该可访问的情况,每个文件(the per-file key)密钥被包装在几个类密钥之一中。像所有其他包装一样,这是使用NIST AES密钥包装,根据RFC 3394执行。包装的每个文件密钥存储在文件的元数据中。

当文件打开时,其元数据将使用文件系统密钥进行解密,显示包装的『每个文件密钥』和一个保护该文件类的符号。『每个文件密钥』用类密钥解包,然后提供给硬件AES引擎,该引擎在从闪存读取文件时对其进行解密。所有包装的文件密钥处理操作发生在Secure Enclave中;文件密钥不会直接暴露给应用处理器。在启动时,Secure Enclave会与AES引擎协商一个短暂的密钥。当Secure Enclave打开文件的密钥时,它们将会被这个短暂的密钥重新包装并发送回应用处理器。

文件系统中所有文件的元数据都使用随机密钥进行加密,随机密钥是首次安装iOS或设备被用户擦除时创建的。 文件系统密钥存储在易损存储器(Effaceable Storage)中。由于它存储在设备上,所以该密钥不用于维护数据的机密性; 相反,它被设计为可以根据需要快速擦除(由用户使用“擦除所有内容和设置”选项,或由用户或管理员从移动设备管理服务器Exchange ActiveSync或iCloud发出远程擦除命令)。以这种方式擦除密钥会使所有文件加密无法访问。

文件的内容是用『每个文件密钥』进行加密的,该密钥用类密钥包装并存储在文件的元数据中,然后再反过来用文件系统密钥进行加密。类密钥由硬件UID保护,对于某些类,则由用户的密码保护。此层次结构提高了灵活性和性能。例如,更改文件的类只需要重新包装其『每个文件密钥』,而密码更改只会重新包装类密钥。

密码

设置了设备密码,用户便自动开启了Data Protection。iOS支持六位数字,四位数字和任意长度的包括字母数字的密码。除了解锁设备之外,密码还为某些加密密钥提供了熵(entropy,猜想是某种混乱吧)。这意味着拥有设备的攻击者无法在没有密码的情况下访问特定保护类中的数据。

因为密码是与UID混在一起的,所以必须使用暴力破解来攻击设备。使用了大的迭代计数来使每次尝试变慢,迭代计数被校准,使得一次尝试花费大约80毫秒。这意味着尝试使用小写字母和数字的六个字符的字母数字密码的所有组合都需要五年半的时间。

About

iOS安全白皮书翻译

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published