跳过内容

前言

技术革命可能会迅速发生。不到十年前,智能手机还是带有小型键盘的笨重设备——科技达人的昂贵玩具。 如今,智能手机已成为我们生活中必不可少的一部分。 我们已经开始依靠它们获取信息、导航和通信,它们在商业和社交生活中都无处不在。

每项新技术都会带来新的安全风险,跟上这些变化是安全行业面临的主要挑战之一。 防守方总是落后几步。 例如,许多人的默认反应是应用旧方法:智能手机就像小型计算机,移动应用程序就像经典软件,因此安全要求肯定相似? 但事实并非如此。 智能手机操作系统不同于桌面操作系统,移动应用程序不同于 Web 应用程序。 例如,经典的基于签名的病毒扫描方法在现代移动操作系统环境中没有意义:它不仅与移动应用程序分发模型不兼容,而且由于沙盒限制,在技术上也是不可能的。 此外,在普通移动应用程序的上下文中,诸如缓冲区溢出和 XSS 问题之类的某些漏洞类别与桌面应用程序和 Web 应用程序相比(例外情况适用)不太相关。

随着时间的推移,我们的行业对移动威胁的了解越来越深入。 事实证明,移动安全完全是关于数据保护的:应用程序存储我们的个人信息、图片、录音、笔记、帐户数据、商业信息、位置等等。 它们充当客户端,将我们连接到我们每天使用的服务,并充当通信中心,处理我们与他人交换的每条消息。 攻破一个人的智能手机,你就可以无限制地访问那个人的生活。 当我们考虑到移动设备更容易丢失或被盗,并且移动恶意软件正在兴起时,数据保护的需求就变得更加明显。

因此,移动应用程序的安全标准必须侧重于移动应用程序如何处理、存储和保护敏感信息。 即使像 iOS 和 Android 这样的现代移动操作系统提供了成熟的 API 用于安全数据存储和通信,也必须正确实施和使用这些 API 才能有效。 数据存储、应用程序间通信、密码 API 的正确使用以及安全网络通信只是需要仔细考虑的几个方面。

一个需要行业共识的重要问题是,在保护数据的机密性和完整性方面究竟应该走多远。 例如,我们大多数人都会同意移动应用程序应该验证 TLS 交换中的服务器证书。 但是证书或公钥锁定呢? 不这样做会导致漏洞吗? 如果应用程序处理敏感数据,这应该是一个要求吗,或者它甚至可能适得其反? 我们是否需要加密存储在 SQLite 数据库中的数据,即使操作系统对应用程序进行了沙盒处理? 适合一个应用程序的东西可能对另一个应用程序不切实际。 MASVS 尝试使用适合不同威胁场景的配置文件来标准化这些要求。

此外,root 恶意软件和远程管理工具的出现使人们意识到移动操作系统本身存在可利用的缺陷,因此容器化策略越来越多地用于为敏感数据提供额外保护并防止客户端篡改。 这就是事情变得复杂的地方。 硬件支持的安全功能和操作系统级别的容器化解决方案(例如 Android Enterprise 和 Samsung Knox)确实存在,但它们在不同的设备上并非始终可用。 作为一种临时措施,可以实施基于软件的保护措施——但不幸的是,没有用于验证这些保护的标准或测试过程。

因此,移动应用程序安全测试报告随处可见:例如,一些测试人员将 Android 应用程序中缺少混淆或 root 检测报告为“安全缺陷”。 另一方面,诸如字符串加密、调试器检测或控制流混淆之类的措施不被认为是强制性的。 然而,这种二元化的看待事物的方式没有意义,因为弹性不是二元命题:它取决于人们旨在防御的特定客户端威胁。 软件保护并非毫无用处,但它们最终可以被绕过,因此绝不能用作安全控制的替代品。

MASVS 的总体目标是为移动应用程序安全提供基线,同时允许包含深度防御措施和针对客户端威胁的保护。 MASVS 旨在实现以下目标

  • 为寻求开发安全移动应用程序的软件架构师和开发人员提供要求;
  • 提供可以在移动应用程序安全审查中进行测试的行业标准;
  • 阐明软件保护机制在移动安全中的作用,并提供验证其有效性的要求;
  • 针对不同的用例,就建议采用的安全级别提供具体建议。

我们知道 100% 的行业共识是不可能实现的。 尽管如此,我们希望 MASVS 在移动应用程序开发和测试的所有阶段都能提供有用的指导。 作为一项开源标准,MASVS 将随着时间的推移而发展,我们欢迎任何贡献和建议。

Bernhard Mueller 撰写