开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情
构建安全的移动应用程序是一个困难的过程,尤其是在云上。我们必须考虑到移动平台,如 iOS 和 Android,具有完全不同的架构和质量准则。此外,我们需要在后端处理云架构。在本文中,我们将了解Top6的安全漏洞、OWASP 构建测试 iOS 和 Android 应用程序的最佳实践,以及 iOS 和 Android 指南。
iOS 和 Android 中的六大 OWASP 安全漏洞类型
在我们开始 iOS 和 Android 指南以及 OWASP 测试指南之前,让我们先看看排名前六的 OWASP 漏洞类型:
| 漏洞类型 | 描述 |
|---|---|
| 身份验证问题,不安全的通信 | 移动应用程序具有未加密的 UI 表单、算法和协议来进行身份验证。攻击者使用伪造的应用程序/恶意软件来扫描和观察应用程序传输层。此外,弱密码、使用地理定位对用户进行身份验证或使用持久身份验证可能会导致敏感数据泄露。 |
| 逆向工程 | 此漏洞允许攻击者分析和混淆目标应用程序。这可能导致敏感数据泄漏,这些数据被硬编码在应用程序配置变量或常量中。此外,攻击者可能会找到后端服务器的 URL 和配置。 |
| 数据存储安全漏洞 | 此漏洞允许攻击者从数据存储中窃取数据。我们将其与“平台使用不当”联系起来。为防止数据泄露,我们应该只使用加密数据存储,避免在设备中存储敏感数据(密码、卡号)。加密数据传输,只使用加密存储操作系统功能(例如,iOS Keychain)。 |
| 平台使用不当 | 这种类型的攻击依赖于开发人员没有使用(或不正确使用)操作系统中包含的安全功能的问题。安全功能包括 Face ID、iOS Keychain 和 Touch ID。例如,开发人员可能会使用不安全的本地存储而不是 iOS Keychain 来存储敏感数据。 |
| 代码篡改 | 代码篡改是指攻击者下载应用程序并更改代码。例如,他们创建虚假的注册或付款表格,然后将应用程序上传回市场或创建克隆应用程序。它也可以是可以修改另一个应用程序代码的虚假应用程序(例如免费的手机清洁工具或应用程序商店中的免费游戏)。 |
OWASP 移动应用安全基础
OWASP 移动应用程序安全基础知识由多个来源组成,包含OWASP 移动应用程序安全验证标准(MASVS)、OWASP 移动应用程序安全测试指南(MASTG) 和移动安全清单。在下面的图 1 中,将详细了解移动应用程序安全性的基础知识:
图 1:OWASP 移动应用安全基础
移动应用程序安全检查表
移动应用程序安全清单是 MASTG 的一部分。这是开发团队在保护移动应用程序时应包括的一组规则。它包含 100 多行,并按以下类别组织:
- 架构、设计和威胁建模要求
- 数据存储和隐私要求
- 密码学要求
- 身份验证和会话管理要求
- 网络通讯要求
- 平台交互要求
- 代码质量和构建设置要求
- 弹性要求
每个规则都有标识代码和描述。 所有规则都有优先标记。 “ L1”或“ L2”是指应用程序应具有实现的规则。 “ r”表示需要它,因此团队必须实施标记为“ R”的所有内容。
iOS 和 Android 中的安全移动应用程序指南
Apple App 沙盒、数据保护 API 和钥匙串
Apple App Sandbox 提供了一个 API 来隔离应用程序并防止访问主系统或其他应用程序。它基于 UNIX 的用户权限,并确保应用程序由权限较低的“移动”用户执行。此外,它还包括地址空间布局随机化 (ASLR) 和 ARMs Never eXecute,可防止与内存相关的安全漏洞并阻止恶意代码的执行。
数据保护 API 允许应用程序加密和解密其文件,并且它可以解决多个安全问题,例如身份验证和逆向工程。每个文件都有四个可用的保护级别,默认情况下,它会通过第一次用户身份验证进行加密。但是,我们应该提高级别以提供最高级别的保护。
最后但同样重要的是,钥匙扣。它提供安全的硬件加速数据存储。iOS 提供此 API 以最高安全级别存储证书和密码。对于钥匙串中的每个项目,我们可以定义特定的访问策略。特别是当用户需要申请 Face ID 或 Touch ID 时,生物特征注册不会因为项目被添加到钥匙串而改变。
图 2:钥匙串 API
Android 加密键值存储、文件加密和加密 API
与 iOS 一样,Android 也有许多类似的功能来安全地存储数据。第一个是键值存储。它允许存储数据SharedPreferences用于设置存储中项目的可见范围。我们需要记住,默认情况下存储的值是不加密的。因此,恶意软件可能会访问这些数据。
如果我们需要手动加密数据,我们可以使用 Cryptographic API。我们可以使用 KeyGenerator 生成安全密钥,然后将加密后的值保存并提取到Android Keystore中。为了安全地处理文件和外部存储,Android 提供了密码学支持库。它支持很多加密算法来加密/解密文件。
HTTPS、SSL 固定和推送通知
安全通信层是安全应用程序的下一个重要里程碑。首先,我们需要确保我们使用的是 HTTPS。iOS 有一项称为 App Transport Security (ATS) 的功能,默认情况下会阻止不安全的连接,因此所有连接都必须使用 HTTPS/TLS。此外,SSL 固定功能有助于防止中间人攻击。如果系统证书是由根证书颁发机构签署的,它将验证系统证书。
要使用此功能,应用程序应运行额外的服务器证书信任验证。推送通知是应该保护的另一部分。我们应该使用 Apple 的推送通知服务(APNs) 和UNNotificationServiceExtension扩展. 这将允许我们对敏感的移动应用程序数据使用占位符并发送加密消息。
另外,请考虑使用 Apple 的CryptoKit。它是 iOS 13 中引入的新 API,提供以下功能:
- 哈希数据
- 使用消息验证码验证数据
- 执行密钥协议
- 创建和验证签名
Android 有类似的选项。它只允许 HTTPS 使用 TLS 传输加密数据。SSL 固定也是如此。为了防止中间人攻击,我们可以对服务器证书执行额外的信任验证。
结论
在本文中,介绍了有关安全移动应用程序的简短指南。我们发现 OWASP 拥有重要的安全基础,并且 OWASP 可以用作构建新应用程序或重构现有应用程序的强大基础。此外,我们还了解了 iOS 和 Android 的安全功能、安全 API,并了解了如何正确使用它们。