保护iOS应用程序
我们喜欢开发使用户满意并花费大量时间来计划UI / UX,功能,提高性能的iOS应用程序。 但是在大多数情况下,安全性和隐私是一个经常被忽视的方面。
通过本文,我想强调一些要点,这些要点可以解决应用程序中最常见的漏洞。
免责声明 :这里提到的这些点绝不是详尽的。 还有许多其他方法可以保护应用程序安全。 在给定的时间和资源的情况下,可能会忽略上述要点。
保存数据:
收集所有保存在应用程序中的数据的详细信息。 重新考虑保存数据的需求。 在某些情况下,我们需要处理数据并仅存储结果,而不存储实际信息。
关键审查领域:
- 使用钥匙串 :这是Apple提供的用于保存敏感数据的安全容器。 但是,如果设备遭到破坏(越狱),则可以将项目转储到钥匙串中,从而使存储的数据可见。 因此,存储在钥匙串中的数据也必须进行加密。 此外,请继续阅读。
- 数据存储 :如果在应用程序中使用SQL Lite或Core Data来存储数据,请考虑使用诸如SQL Cipher或Encrypted Core Data之类的解决方案对其进行加密。 必须对加密和解密所需的密钥进行管理,例如,可以将其保存在钥匙串中,也可以对其进行混淆。 使用可靠加密技术的应用程序有义务遵守App Store中的发行规定。
- 代码中的机密字符串 :避免在代码库中为机密密钥,用于Web服务的Eg API密钥,社交平台令牌等使用纯文本字符串。使用混淆处理可以隐藏这些文本,以免对应用程序二进制文件进行逆向工程显示。 此外,请继续阅读。
- 在应用程序中创建的文件 :使用NSFileManager API的NSFileProtectionComplete键。 在Xcode中启用数据保护功能。 此外,请继续阅读。
无论如何,都不应该使用NSUserDefaults来存储任何机密信息。
保护传输中的数据:
几乎每个移动应用程序都通过网络进行通信以提供丰富的用户体验。 Apple通过设置默认值来强制通过HTTPS通过网络进行所有通信,从而推动了通过网络安全传输数据的要求。 强烈建议不要在info.plist中禁用此功能。
- 安全API :所有API均应使用HTTPS和基于标准AES 256的加密。 让我们加密是一个免费的证书颁发机构,可以帮助您免费切换到HTTPS。 此外,每个API都需要在需要时进行标识,认证和授权。
- 证书固定 :我们使用SSL固定的目的是确保应用仅与指定的服务器通信,并防止基于MITM的攻击。 可以通过在应用程序包中保存目标服务器的SSL证书来完成。 在会话配置中定义固定证书时使用此证书。 诸如AFNetworking,Alamofire之类的第三方框架使此操作变得容易。 此外,请继续阅读。
- 用户身份验证/登录 :评估如何对用户进行身份验证才能与服务器对话。 避免直接处理用户密码,而改用OAuth /两因素身份验证之类的标准。
用户级别保护:
任何黑客都可以使用受感染的设备以多种方式访问受限信息。 停止使应用程序进一步运行并显示消息以使用户知道受感染状态,可能会使大多数攻击者望而却步。
- 越狱检测 :如果您的应用检测到越狱设备,则应删除该设备中的所有数据。 检测越狱的最流行方法是检查文件系统的一致性,Cydia方案检测,根目录权限测试和基于API的检测。 请注意此处的错误警报。 进一步阅读。
- 调试器检测 :可以将调试器(LLDB / GDB)附加到正在运行的应用程序,并可以使用swizzling修改代码或可以操纵变量中的值。 我们可以测试在给定的时间点是否正在调试应用程序。 通过运行循环不断观察这种攻击可能会占用大量CPU资源,因此建议仅在应用程序的关键部分进行检查。 进一步阅读。
结论:
除非对漏洞有清晰的了解,模仿攻击的能力,测试解决方案并定期重复执行过程,否则编写代码来保护应用程序安全是不够的。 保护应用程序不是一项一次性的投资,随着新技术的定期出现,确保用户隐私必须具有对平台的深入了解。 我建议您每季度对Apple文档和您的应用程序进行一次审核。
诸如调试器检测,越狱,钥匙串,逆向工程之类的词汇激发您学习更多知识……! 看一下这个。 本书将使您对iOS的理解达到一个全新的水平。
如果您有任何建议或问题,请随时与我联系或在下面的部分中发表评论。