iOS 设备中的 Keychain 是一个安全的存储容器,可以用来为不同的应用保存敏感信息比如用户名、密码、网络密码、认证令牌。苹果用 Keychain 来保存 Wi-Fi 网络密码、VPN 凭证等等。它是一个 SQLite 数据库,位于 /private/var/Keychains/keychain-2.db,其保存的所有数据都是加密过的。Keychain 在沙盒之外 App 会将部分重要数据存放在 Keychain 中使用进行读取,但若写入后未清楚就卸载 App 而下一位用户安全 App 时未清除数据,则可能到导致下次安全的时候直接从 Keychain 中读取密码登陆或手势密码无法解除等问题。
安全加固实施建议
首次安装应用程序启动后,进行删除 Keychain 数据操作。
后台快照安全场景描叙
iOS 系统在程序退出的时候,会保存程序当前的快照到/Library/Caches/snapshots 中,如果退出的时候页面含有密码等关键信息未进行处理则会导致安全隐患。
安全加固实施建议
UIApplication 的委托方法 applicationDidEnterBackground: 可用于响应 App 进入后台并且修改敏感数据显示。例如,在进入后台的时候,把特殊字符用“hidder”属性隐藏。
Cookie 安全安全场景描叙
Cookie 是 App 或者网站为了辨别用户身份,进行 Session 跟踪而存储在用户本地终端上的数据。如果 Cookie 以明文的形式存储,那是非常危险的。iOS 上的 Cookie 数据会被保存在 /Library/Cookies/Cookies.binarycookies 中。在越狱设备或者iOS 8.4版本之前的设备上,这个数据是可以被导出并且通过工具 Dump 数据出来的。
安全加固实施建议
1. Cookie 存放前进行较复杂的加密运算。
2. 将一部分 Cookie 加密存放在 Keychain 中,增加逆向难度。
HTTPS 安全安全场景描叙
在 iOS 应用程序中,使用 HTTPS 进行通信是一种更为安全的做法,也是官方所推荐的做法。但是即使使用了 HTTPS,也有可能因为没有校验服务器证书的原因导致被中间人劫持。如果交互请求数据处理不当,攻击者可以解密得到明文通信数据;甚至进一步伪造 App 的请求,这是极大的安全隐患。
安全加固实施建议
1. App 内要对 HTTPS 证书做校验。
2. 避免使用有漏洞的第三网网络库(如 AFNetworking < 2.5.3 版本)。
3. 关键数据(如登录密码、卡号、交易密码等)单独加密。
WebView 安全安全场景描叙
在 iOS 应用程序中,WebView 是经常使用到的一个控件,用来加载网页显示在终端上,因跨平台、动态等特性被广泛使用。但是与此同时,很多桌面浏览器前端漏洞在 iOS 终端上仍然存在。同时因为 iOS 终端上, WebView 可以注册一些敏感信息数据,比如发短信、付款、定位信息等等,也带来了一些新的安全风险。
安全加固实施建议
1. 对输入进行过滤和编码;
2. 服务端对 App 发送的数据进行过滤和编码;
3. 尽量减少敏感接口的注册、尽量不要加载第三方内容;如果加载,则必须在 WebView 的 Delegate 方法中,通过白名单机制实现对调用者的检验。
加密算法安全场景描叙
在 iOS 应用程序中,经常存在敏感数据需要加密存储的场景。例如登陆密码、通讯录数据等,其加密算法被破解是相当危险的。一旦重要的算法被攻击者逆向,应用的一切数据就相当于毫无保留的展现在攻击者面前。
安全加固实施建议
1. 对称加密算法要使用 AES、DES 或 3DES,避免使用 RC4 等目前可能被爆破的算法;
2. 对于数据安全性要求较高的场景并且条件允许的情况下,使用非对称加密算法如 RSA 等;
3. 对称加密算法的 KEY 和 IV,应避免硬编码。若加密数据仅是本地存储,可基于设备相关的信息来生成 KEY 和 IV。
开发环境安全安全场景描叙
开发人员可能会从非官方渠道下载开发环境或者开发工具。被修改过的恶意开发工具可能会在打包 IPA 文件时,插入恶意代码。另外,由于配置不当,打包 IPA 文件时,可能会把源码或者开发文档打包进入 IPA。
安全加固实施建议
1. 从官方下载开发工具 Xcode;
2. 打包 IPA 文件时,管理好 Xcode 的 Build Phases、Copy Bundle Resources。
系统日志输出安全安全场景描叙