iOS的安全模型概述
保持智能手机设备上的信息安全对每个人而言都是至关重要的,不管是公司信息、客户信息,还是个人照片、银行信息、地址本或邮件。所有的用户个人资料都是非常重要的,智能手机必须在操作系统层面和硬件设备层面部署高层次的安全机制。苹果的iOS平台在其核心层面实施安全,确保智能手机设备足够安全并做到不影响用户体验。
iOS设备提供了最严格的安全机制和功能,并易于使用。iOS设备提供的安全接近于透明。许多的安全功能是预设的,对于一些关键的安全功能如设备加密,不是可配置的,所有也不会被用户不小心取消掉。
iPhone、iPad、iPod touch设置了多个安全层。低层次的硬件和固件安全抵御恶意软件和病毒,高层次的系统级安全保护个人信息和企业数据,防止未授权访问和挫败攻击。iOS的安全架构透视图如下:
图中上部为软件,整个文件系统都被加密,文件系统又分系统分区和用户分区,应用运行运行在用户分区并限制在一个安全沙盒中,应用的数据基于不同的数据保护类型,文件系统通过系统内核与硬件通信。下部分为硬件和固件,系统内核直接调用固化加密引擎加解密文件数据,固化加密引擎密钥依赖烧制在设备上的设备key,组key以及苹果根认证证书。
iOS的安全模型可从四方面剖析:
系统架构:iPhone、iPad、iPod touch的安全的平台和硬件。
加密和数据保护:阻止未经授权的人试图去使用或修改数据,就算设备丢失或被偷也能保护数据。
网络安全:工业级的网络安全协议提供了数据传输中的安全认证和加密。
设备访问:阻止未授权访问设备,当设备丢失或被偷时能远程察除数据。
1. 系统架构:
iOS设备紧密整合了硬件和软件允许验证设备上所有层次的运行活动。从系统被引导启动到iOS软件安装到第三方应用,每一步都会分析和审查以确保每个运行活动是可信赖的、使用的资源是适当的。
一旦系统启动,集成的安全框架依赖于完整和可信赖的XNU[1],它是iOS内核。XNU会强迫安全机制在运行时确保高级别的方法调用和应用是可信任的。
1.1安全的启动链:
系统启动过程中每一步包含的所有组件都已经过苹果签名,并且只有在验证了信任链后才会被执行。这包括引导加载程序、内核、内核扩展、基带固件。
当iOS设备启动后,应用处理器立刻执行引导只读存储器(Boot ROM)中的代码。引导ROM中的不可变代码是在集成电路制作过程中放置进去的,绝对可信。引导ROM代码包含了苹果的根认证中心公共密钥(Root CA public key),该密钥用来验证引导加载程序[Low-Level Bootloader (LLB)]是否被苹果签名,验证通过才允许它加载。这是信任链中的第一步,每一步都需要确保下一步执行的代码是经过苹果签名的。当LLB完成工作时,会执行下一步引导加载程序,iBoot,会依次证实并运行iOS内核。
这个安全引导链确保最低层次的软件不会被篡改,允许iOS只运行在通过验证的苹果设备上。
如果在引导过程中的某一步不能载入或不能验证下一步,启动就会终止并在设备上显示“Connection iTunes”。这叫做恢复模式。如果Boot ROM不能载入或不能验证LLB,会进入设备固件更新[DFU (Device Firmware Upgrade)]模式。两种情况下,设备必须通过USB连接到iTunes并恢复到出厂设置。
因此iOS启动有三种方式
正常模式:
Boot ROM
Low Level boot loader(LLB)
iBoot(2 stageboot loader)
OS(kernel/Application)
恢复启动:
Boot ROM
Low Level boot loader(LLB)
iBoot(2 stageboot loader)
Kernel(Ramdisk,can be restored)
DFU:设备固件更新[也可长按Home和Sleep/Wake按钮8秒进入该模式,该启动模式存在安全漏洞被利用进行越狱。]
Boot ROM
iBSS
iBEC
Kernel(Ramdisk,can be restored)
1.2 系统软件个性化
苹果定期发布软件更新以解决新兴的安全问题。用户收到更新提示后可通过iTunes或over-the-air (OTA)来更新设备解决最近的安全问题。苹果提供了一个叫做SystemSoftware Personalization的进程阻止iOS系统降级到旧版本。iOS更新可通过iTunes或over-the-air(OTA)来完成安装。iOS安装或升级的过程中,会连接到苹果的安装认证中心(gs.apple.com)并发送安装包每个组件的一个加密值列表(如LLB,iBoot,Kernel或OS镜像)、一个防重放攻击的随机数Nonce[2](Nonce=Number Once)、设备唯一ID(ECID)。服务端检查加密值的允许安装的所有版本,如匹配到允许安装的版本,添加ECID到加密值并签名结果。一个完整的签名数据发送到设备用于安装或升级处理。请求设备验证签名确实来自苹果后,利用载入组件的加密值,并结合ECID去匹配签名过的数据。利用ECID可确保授权仅仅针对特定设备,一台设备上旧版本的iOS不能拷贝到另一台设备上使用。Nonce可以防止黑客通过保存服务器的响应用来在今后降级用户设备的重放攻击。
1.3 应用签名
iOS内核一旦启动,它将控制哪个用户进程和app能够运行。为了确保所有的app都来自可知并信任的源并且没被篡改,iOS要求所有执行的代码拥有苹果发布证书的签名。苹果自己提供的Mail、Safari等一样被签名。第三方应用也必须经过苹果审核并签名。iOS不会执行未经苹果签名的代码。
1.4 运行时安全
所有的第三方应用都在沙盒中运行。每个应用是隔离的,都有一个唯一的home路径用来存放自己的文件,这个路径是在安装时随机分配的。如果要访问另一个应用的数据,只能通过iOS提供的API或services。
系统文件和资源也是跟用户应用隔离开来。各个应用之间无法共享文件,如要互相通信,只能通过URLSchema或shared key chain。对应用需要的特别操作可以授权,授权是键值对的形式,签名后打包进应用程序。
采用ASLR技术。地址空间布局随机化[Address space layoutrandomization (ASLR)], )是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,以及增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。
XN (execute never) 标志位在ARMv6中被引入,不可以在此区执行指令,从而在硬件上支持执行保护。
2. 加密和数据保护
安全启动链、代码签名、运行时安全等确保受信任的代码和应用才能在设备上运行。iOS还提供额外的安全功能来保护用户的数据,即使是在其他的安全机制遭到破坏时(如设备被未经授权修改)。就像系统架构一样,加密和数据保护整合了硬件和软件技术提供保护能力。
2.1 硬件安全特征
对于移动设备,速度和电池效能是非常重要的。加密解密操作复杂,实现不当有可能影响性能或影响电池使用寿命。
每款iOS设备都有一个专用的AES 256位的加减密引擎固化在直接存储器(DMA)上,该DMA在闪存(flash storage)和系统内存之间,使得文件加密效率极高。除了拥有AES固化引擎,在硬件上还实现了SHA-1,更多的减少了加密操作的消耗。
设备UID和设备组(型号)ID(GID)是AES256的密钥。UID和GID在出厂前烧入,没有软件和固化件能直接读取它们,它们只会得到加密和解密操作的结果。UID对每个设备唯一,苹果和任何供应商都不保存它。GID指示不同类设备的处理器类型,在分发系统软件时会根据GID发送对应该设备类型的系统软件。烧制UID和GID在电路板上可防止篡改或绕过,并且保证只能被AES引擎访问。
UID允许数据加密被绑定到特定设备。如文件系统的密钥链中包括了UID,所以存储器从一台设备移到另一台设备,存储器中的文件就不能访问(其实是没法解密)了,因为每台设备的UID不同。
除了UID和GID,其他的加密key都是系统使用Yarrow算法随机生成的。
安全的擦除保存的key跟产生它们一样重要。这在闪存上是一个挑战。闪存上的Wear-Leveling技术保证各个存储单元抹除的次数尽可能平均[3]。为解决这个问题,iOS设备增加了Effaceable Storage,所有能抹除的key存储在这里,从而实现直接寻址并快速抹除几小块的数据。
2.2 文件数据保护
除了在iOS设备上的硬件加密功能,苹果还使用了一种数据保护的技术保护存储在设备闪存上的数据。这种技术的设计专注于手机设备,经常连接网络、随时接听电话、收发短信和Email等。
2.2.1 概述
每当一个文件在数据分区创建时,数据保护就创建一个新的256位的key。该key被交给硬件AES引擎,AES引擎使用该key加密要写入闪存的文件。
如下图:文件的内容用File key加密,File key被class key加密存储在文件的元数据Metadata中。文件的元数据被file system key加密。file system key是一个随机数,在iOS第一次安装时创建或在设备被抹除时重建。该key存在Effaceable Storage中,删除该key会导致所有文件无法访问,这就是苹果实现快速抹除设备数据的根源。Class key受UID保护,有些class key还受开机密码保护。Key的等级层次提供灵活性和高性能。如,改变文件的保护类型,只需要对File key用对应的class key重新加密;改变了开机密码,只需重新加密class key。
当一个文件打开时,它的元数据首先被解密(使用file system key)。元数据包括加密了的file key和文件的保护类型class,根据文件保护类型找到对应的加密的class key,利用开机密码和UID可解密class key,再利用class key解密file key,最后把file key提供给AES引擎,当从闪存读取文件时由它来解密文件类容。
2.2.2开机密码
iOS支持四个数字的简单密码和不限长度的包括数字字符的复杂密码。开机密码不仅能锁定设备,还能为加密提供额外的安全(如前述保护class key)。这意味着攻击者在没有开机密码的情况下不能访问由特定类型保护的数据。蛮力破解9位数字开机密码需要两年半,破解6为字符数字密码需要5年半。为防止暴力破解,用户还可设置输错10次开机密码可自动抹除设备数据。
2.2.3 数据保护类型
在iOS设备上,当一个文件创建时,它被应用(app)分配了一个类型(class)。不同的类型在数据被访问时会应用不同的策略。基本的类型和策略如下:
2.2.3.1 完全保护(NSFileProtectionComplete):
该class key受开机密码和设备UID保护。当用户锁定设备不久(10秒,如果Require Password设置为Immediately),解密的class key明文就会从内存丢弃,数据不能访问直到重新输入开机密码。邮件应用使用完全保护策略来保护邮件和附件。应用程序的启动镜像和位置数据等也都采用这种策略。
2.2.3.2 非打开时保护Protected Unless Open(NSFileProtectionCompleteUnlessOpen):
有些文件在设备锁定的情况下任然需要写入。如邮件附件在后台下载。除了普通的file key,数据保护还产生该文件的公钥/私钥对。另外还有一个密钥对Protected Unless Open class public key/Protected Unless Open class private key(该私钥受开机密码和UID保护),使用文件私钥和公钥Protected Unless Open classpublic key生一个共享秘密串,用该共享秘密串去加密file key,file key与文件公钥一同存储在文件元数据中。对应的私钥被抹除。文件关闭后file key也很快从内存抹除。重新打开文件时,使用文件公钥与私钥ProtectedUnless Open class private key重新生成共享秘密串,利用该共享秘密串去解密file key,再用file key去解密文件内容。
2.2.3.3 Pretected Until First User Authentication(NSFileProtectionUntilFirstUserAuthentication):
这种类型跟完全保护一样,只是解密的class key不会在设备锁定后从内存中抹除,直到重新启动设备。
2.2.3.4 No Protection(NSFileProtectionNone):
该Class key只被UID保护,不受开机密码保护,该class key存在Effaceable Storage中,主要是方便快速远程抹除数据。这是所有文件的默认保护类型。如果一个文件没有被指定数据保护类型,它依然是以加密的形式存储在iOS设备上的。
iOS的SDK提供了一整套API使得第三方伙伴和开发者能轻易的采纳数据保护机制来保护它们的应用。数据保护有文件和数据库的API,包括NSFileManager,CoreData,NSData和SQLite。
2.2.4 密钥链的数据保护
许多应用需要处理密码和一些少量但很机密的数据,像key、登录凭证等。iOS密钥链(keychain)提供了一个安全的方法来保存这些数据。Keychain是以No Protection保护类型存储在文件系统中的SQLite数据库实现的。它提供了与文件保护key层次对应的key等级。只有一个数据库,一个叫securityd的安全守护进程决定哪一个keychain的项可以被哪个进程或应用访问。Keychain访问API要求调用securityd框架,securityd框架会查询应用的“keychain-access-groups”和 “application-identifier”授权。access groups允许Keychain的项在不同的应用之间共享数据。
Keychain的项只能在同一开发者不同的应用之间共享数据。Keychain中的数据使用一种类似文件保护类class体系的结构来保护。这些类型的行为跟文件保护类型类似,但是有不同的key和API。
有效访问 | 文件数据保护 | Keychain数据保护 |
仅解锁时 | NSFileProtectionComplete | kSecAttrAccessibleWhenUnlocked |
锁定时也能 | NSFileProtectionCompleteUnlessOpen | N/A |
从第一次解锁后都能 | NSFileProtectionCompleteUntilFirstUserAuthentication | kSecAttrAccessibleAfterFirstUnloc |
始终 | NSFileProtectionNone | kSecAttrAccessibleAlways |
每个Keychain类型都有一个设备相关的对应物,它始终被UID保护,Keychain数据被备份出去时,无法用不同设备恢复备份去得到它们。
iOS内置的一些Keychain项:
项 | 可用 |
Wi-Fi passwords | 从第一次解锁后都能 |
Mail accounts | 从第一次解锁后都能 |
Exchange accounts | 从第一次解锁后都能 |
VPN certificates | 始终,不能移植到另一台设备(non-migratory) |
VPN passwords | 从第一次解锁后都能 |
LDAP, CalDAV, CardDAV | 从第一次解锁后都能 |
iTunes backup | 始终,不能移植到另一台设备 |
Voicemail | 始终 |
Safari passwords | 仅解锁时 |
Bluetooth keys | 始终,不能移植到另一台设备 |
Apple Push Notification Service Token | 始终,不能移植到另一台设备 |
iCloud certificates and private key | 始终,不能移植到另一台设备 |
iMessage keys | 始终,不能移植到另一台设备 |
Certificates and private keys installed by Configuration Profile | 始终,不能移植到另一台设备 |
SIM PIN | 始终,不能移植到另一台设备 |
2.2.5 keybags 密钥包
文件和keychain的两种数据保护类型的key都通过密钥包存储和管理。iOS有四个密钥包:System、Backup、Escrow、iCLoud Backup。
System密钥包,设备常用操作的加密后的class key存储在这里。如开机密码输入时,完全保护类型NSFileProtectionComplete的key从System密钥包中拿出并解密。System密钥包是一个二进制的plist(属性\值列表)的存储文件,该文件保护类型为No Protection,但是文件内容被存储在Effaceable Storage中的一个 key加密。为了提供更高的安全,该key在每次用户修改开机密码是被抹除并重新生成。System密钥包是唯一一个存储在设备上的密钥包。AppleKeyStore核心扩展了System密钥包,不管设备是否锁定均能查询。只有所有的class key能够访问并解密成功设备才能解锁成功。
Backup密钥包,当iTunes执行一个加密备份时被创建并被存储在执行设备备份的计算机上。一个新的密钥包创建时总是创建一组新的key,备份数据可以用这组新的key恢复备份。像前文解释,Backup密钥包的non-migratory的项通过一个UID驱动的key加密,因此允许设备恢复原先的备份中重新得到它们,但其他设备恢复该备份时无法解密这些项。
该密钥包受iTunes上设置的密码保护。密码强度决定保护力度。
如果用户选择不加密的iTunes备份,则备份文件不会被加密不管是什么数据保护类型,但是密钥包任然受一个UID驱动的key的保护。
Escrow密钥包用于iTunes同步和移动设备管理(MDM)。该密钥包允许iTunes在不输入开机密码时备份和同步数据,它允许MDM服务远程清除用户开机密码。该密钥包保存在对设备执行iTunes同步或MDM服务的计算机上。
iCloud Backup密钥包类似于Backup密钥包,iCloud备份能在后台执行。
3. 网络安全
iOS提供了大量的标准网络安全协议。iOS不像其他平台,它不需要防火墙,因为iOS限制了监听端口的数量,移除了一些不需要的网络应用,如telnet、shells、web server。通过使用iMessge、FaceTime和苹果推送提醒服务来通信,有完整的加密和认证。
3.1 SSL,TLS
iOS支持SSL v3和TLS v1.1、TLSv1.2。Safari、日程管理、邮件以及其他的因特网应用都自动使用这些机制以确保通信通道的安全。也提供API使得开发者很容易使用这些网络安全机制。
3.2 VPN
支持Cisco等多种协议和认证方法。很方便的在iOS设备上使用VPN。
3.3 Wi-Fi
支持工业级的Wi-Fi协议,包括企业级WAP2。
3.4 蓝牙
iOS 设备支持EncryptionMode 3、 Security Mode 4和Service Level 1 的连接。
4. 设备访问
iOS提供灵活的安全策略,配置方式容易实施和管理。这些使得企业能有效保护集团信息并确保员工适应企业需求,就算他们使用自己的设备。
4.1 开机密码保护
4.2 配置实施
4.3 移动设备管理(MobileDevice Management MDM)
4.4 设备限制
4.5 远程抹除
参考:
[0].原作《iOS Security》
[1]. http://blog.xanahopper.com/tag/xnu/