应用程序安全

Posted on Posted in 安全

iOS 平台的设计宗旨是以确保安全为核心的。它采用安全框架,有利于在加密的钥匙串中安全地存储应用程序和网络服务凭证。对于开发者,它提供公用加密框架对存储的应用程序数据进行加密。

iOS 为第三方应用程序提供安全的平台基础。所有应用程序都必须经过开发者签名,以确保他们未被篡改或修改。应用程序也进行“沙箱化”,以使它们无法访问其他应用程序存储的数据。应用程序使用的凭证也进行沙箱化,并存储在安全、加密的钥匙串中。此外,开发者可以将加密功能内置到其应用程序中,以进一步保护敏感信息。

iOS 上的下一个安全层用于保护应用程序数据和网络凭证。这一层包含多个整合的特性、方法和功能,旨在防止未经授权访问存储在设备上的数据,包括:

  • 运行时保护技术,可保护应用程序和系统文件
  • 强制代码签名机制,可防止篡改应用程序
  • 钥匙串服务,可安全地存储用户名和密码等凭证
  • 公用加密体系结构,开发者可用来加密设备上的数据,并具有硬件加速功能
  • 预置描述文件,可控制企业内部应用程序的开放程度
运行时保护

在 iOS 中,每个应用程序都置于沙箱中,使其只能使用自有文件和偏好设置,并限制其具有访问权限的系统资源。例如,一个应用程序可调用公共网络 API,从而通过网络进行通信,但是其不能直接访问通信或网络硬件。它还能防止 iOS 上的应用程序和进程在特定目录和数据存储之外写入任何文件。

在 iOS 中,每个应用程序在安装过程中都会被沙箱化。应用程序及其偏好设置和数据被限制在文件系统中的特定位置,并且一个应用程序不能访问其他应用程序的偏好设置或数据。运行于 iOS 中的应用程序只能访问其自身的钥匙串项。此外,系统文件、资源和内核会与用户的应用程序空间保持屏蔽。如果某个应用程序需要访问其他应用程序的数据,则只能使用 iOS 提供的特定 API 和服务。该安全功能还能保护代码生成。

iOS 沙箱通过防止其他应用程序读取或修改其应用程序数据和偏好设置来确保顾客应用程序的安全(即使它们受到攻击者的损坏)。如果应用程序受到损坏,攻击者将不能使用其来控制设备或攻击其他应用程序。

强制代码签名

当顾客向 iOS 设备分发应用程序时,其最终用户需要在一定程度上确信他们正在下载和安装的应用程序来自可靠和可信的来源,这一点很重要。

所有 iOS 应用程序都必须签名。设备附带的应用程序由 Apple 签名。第三方应用程序由开发者使用 Apple 颁发的证书进行签名。这可确保应用程序未被篡改或更改。此外还执行运行时检查,确保应用程序自上次使用后仍然可信。

代码签名可确保程序的完整性,并允许系统识别同一应用程序的更新版本。签名后,系统可以检测到对代码所做的任何计划外更改(无论是意外引入还是被黑客篡改)。

钥匙串服务

最终用户通常管理多个需要使用用户 ID 和密码进行登录的帐户。安全 FTP 服务器、文件服务器、数据库服务器、安全网站、即时通信帐户以及许多其他服务在使用之前都需要进行鉴定。许多最终用户应对这种状况的做法包括:建立非常简单、容易记住的密码;反复使用相同密码;或者将密码写在容易找到的地方。这些做法都会影响安全性。

所有 iOS 设备都包含一个称为钥匙串的安全位置,用于保存数码身份、用户名、密码和加密密钥。钥匙串是经过加密的安全容器,可以保存多个应用程序和安全服务的密码。当钥匙串锁定时,任何人都无法访问它保护的内容。

从用户的角度来看,钥匙串提供透明鉴定,也就是说,用户不需要单独登录其密码保存在钥匙串中的任何服务。在 iOS 中,从来不会要求用户输入钥匙串密码进行解锁。

iOS 提供称为 Keychain Services 的 API,可供应用程序安全地存放和检索少量数据,例如密码、加密密钥、证书或其他短文本字符串。

钥匙串的结构

iOS 拥有一个钥匙串,可供设备上的所有应用程序访问。它可以包含任意数目的钥匙串项,并且每个钥匙串项均包含数据和一组属性。钥匙串项中最常用的属性包括 Internet 密码和通用密码。Internet 密码包括诸如安全域、协议类型和路径等对象的属性。

一些钥匙串项需要保护,例如密码或私钥。钥匙串将对此数据进行加密和提供保护。另外一些钥匙串项不需要保护(例如证书),这类数据不加密。系统为钥匙串生成专有密码,并将密钥存储在设备上,而任何应用程序都无法访问该密码。

虽然钥匙串将所有应用程序的钥匙串项存储在系统上,但应用程序只能访问自己的钥匙串项,而无法访问任何其他应用程序的钥匙串项。钥匙串数据彼此隔离,以使第三方应用程序存储的凭证不会被具有不同身份的应用程序访问。这为组织内 iOS 设备上的一系列应用程序和服务的鉴定凭证提供了保护机制。系统从不会要求用户提供权限或密码。

iOS 钥匙串备份

当用户备份 iOS 设备数据时,对钥匙串数据进行备份,但钥匙串中的密钥保持加密形式。备份中不会包括钥匙串密码。因此,其他能够访问备份的人将无法使用存储在 iPhone 的钥匙串中的密码和其他密钥。出于此原因,在 iOS 设备上使用钥匙串存储用于登录到安全网站的密码和其他数据(例如 Cookie)很重要。

通用密码结构

一种加密哈希函数,对任意长度的数据应用算法,将其转换为固定长度的输出值。要让加密哈希函数发挥作用,必须让通过哈希值重构原始数据变得极其困难或不可能,并且使通过任何其他输入数据产生相同输出值的可能性降到接近零。

有时验证数据的完整性比保密更为重要。例如,如果某位用户 (Alice) 向另一位用户 (Bob) 发送包含指令列表的信息,Bob 可能希望在继续之前确认该列表是准确的。不需要对该信息进行加密,加密过程需要占用大量计算资源并且耗时。Alice 可以计算信息的哈希值(称为信息摘要),并使用她的私钥对摘要进行加密。当 Bob 收到信息时,他使用 Alice 的公钥对信息摘要解密(以验证该信息来自 Alice),并从信息文本计算出他自己的信息摘要。如果两个摘要匹配,则 Bob 知道该信息未被破坏或篡改。

iOS 设备支持通用哈希函数,例如来自 RSA Data Security 的 MD5,该函数将任何长度的输入数据转换为 128 位输出值;还支持 SHA-1,该函数从最长不超过 264 位的任何数据生成 160 位哈希值。为了最大限度地发挥应用程序性能,iPhone 4S、iPhone 4、iPhone 3GS、iPod touch(第三代或更新款)及所有 iPad 机型为 AES 和 SHA-1 加密提供硬件加速。此外,运行 iOS 4 或更高版本的设备具有“数据保护”功能,该功能使用用户的设备密码保护设备的唯一硬件加密密钥,从而增强内置硬件加密性能。这使提取数据进行设备外破解变得非常困难,并且它为电子邮件信息和附件提供了额外的一层保护。

应用程序数据保护

应用程序可利用 iPhone 和 iPad 内置的硬件加密来进一步保护敏感的应用程序数据。开发者可以指定要进行数据保护的具体文件,要求系统在设备锁定时将该文件的内容加密,应用程序和任何潜在入侵者都不得访问。

应用程序可以使用 iOS 证书、密钥和可信服务 API(用于加密和解密数据)对 iOS 设备上的数据块进行对称或非对称加密。可以使用经验证的方法(例如 AES、RC4 或 3DES)进行对称加密,或者使用证书进行非对称加密。

应用程序开发者还可以使用 iOS 加密 API 或利用数据保护来进一步保护其应用程序。

预置描述文件

iOS 用户可以通过 App Store 购买、下载和安装商业应用程序。但一些组织可能想要为其员工开发自定的企业内部应用程序,使其员工可以访问组织内部的专用数据源。组织必须使用 Apple 通过开发者企业计划颁发的证书对自定应用程序进行数字签名,然后才能进行分发。

该应用程序还必须具有相关联的企业分发预置描述文件,以允许设备运行该应用程序。如果没有有效的预置描述文件,该应用程序将无法打开。用户必须安装预置描述文件才能执行应用程序。这些预置描述文件为组织提供极为重要的安全功能,因为它们允许组织密切监视和控制哪些设备获准使用其应用程序,以及这些设备访问的数据。

注意:在 iOS 设备上,钥匙串权限取决于用来为应用程序签名的预置描述文件。提醒你的顾客在其应用程序的不同版本中一直使用相同的预置描述文件。

重要事项:从设备上删除自定应用程序时,同时会删除该应用程序包含的所有数据。

有关分发自定企业内部应用程序和预置描述文件的详细信息,请参见“应用程序开发和分发”课程。

托管应用程序

MDM 服务器可以管理来自 App Store 的第三方应用程序,也可以管理企业内部应用程序。将某个应用程序指定为托管应用程序可允许服务器指明 MDM 服务器是否可以将该应用程序及其数据从设备上删除。此外,服务器还可以防止托管应用程序数据备份到 iTunes 和 iCloud。相对于用户直接下载的应用程序,这可允许 IT 拥有更多的控制权来管理可能包含敏感业务信息的应用程序。

要安装托管应用程序,MDM 服务器会向用户的设备发送安装提示。托管应用程序在安装前需要获得用户的同意。有关托管应用程序的详细信息,请查看本系列中的“部署”课程的“MDM 应用程序部署”部分。

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注