安卓应用可以安装在模拟器上的安全隐患

信息安全 安卓 移动的 应用安全
2021-09-03 22:06:45

我正在努力确保我公司产品的安全性。我们有该产品的移动版本。这个问题是针对安卓版本的

背景 - 我们的产品是基于 SaaS 的产品,该应用程序旨在供租户组织的不同销售人员使用。我们已经实施了不同的控制层来确保我们的应用程序的安全(或更安全)环境 -

  • 我们检查根检测 - (操作系统级别检查)
  • 实施 SSL pinning -(传输层级别检查)
  • 在 Android 钥匙串中存储秘密
  • 最小的本地数据存储。加密本地数据(需要存储)

而这样的例子不胜枚举。简而言之,从设备层到通信层再到服务器层,我们都在覆盖每一个角落。

问题是我们收到了一位安全研究人员报告的一个问题,称由于我们的应用程序可以从 Android Play 商店下载,因此它可以在模拟器上运行,并且在模拟器上,可以绕过根检测。所以它增加了一个巨大的威胁,应该立即修复。

我进行了搜索,但如果可以在模拟器上安装应用程序,我找不到可能存在的安全隐患。我还检查了是否可能需要修复它,可能的解决方案是什么。检查运行环境是否为 SDK,检查相机或传感器等功能是否正常工作,但所有这些检查也可以在模拟器中绕过。

这对我来说很关键,因为如果我接受这个问题,我们的客户会在报告中看到它并坚持修复它。我将不得不向管理层和开发人员解释(如果我接受)并修复(以后可能需要)的含义,我对此一无所知

更新 -

  1. 我想澄清一件事,我们从不提倡根检测或任何其他客户端安全控制作为我们应用程序的一个优点,因为我们相信所有客户端保护都可以在某一时刻被绕过
  2. 我们继续尝试在服务器级别构建更安全的架构。但是由于客户端也构成了生态系统的一部分,所以我们不能对其置之不理。
  3. 我们甚至尝试在通信层(TLS 除外)实施控制,以确保仅通过点击就无法获取所有内容

整个想法是,如果我们无法控制某些事情,我们至少可以让恶意方难以应对。我们的主要重点是确保我们的用户数据和控制措施到位并正在进行中。

同样来自 Pentester 的更新 - 在与他讨论后,他说他不了解应用程序的安全要求。按照他的说法,所有应用程序都应该有根检测。我们向他解释说,这些事情对我们来说是次要的,但如果任何客户特定的数据显而易见,或者由于应用程序中的错误配置或应用程序中的任何漏洞(如硬编码的秘密)而受到损害,那么它是主要的。

根据为你们提供的输入,我能够明确区分并帮助解决问题。早些时候,由于这个问题,一切都是噪音。谢谢大家

4个回答

不清楚您首先有什么样的安全要求,因此不清楚您的安全措施是否足够。

只要您不能完全控制用户的设备,就不可能完全防止使用您的应用程序的恶意用户。这种风险包括在模拟器上运行应用程序,但也包括在有根或以其他方式被篡改的设备上运行它 - 并非所有这些都会被您使用的任何根检测方法检测到。

相反,您需要设计您的应用程序,以便恶意用户不会对您或其他用户造成任何伤害,而只会对他自己造成伤害。例如,这意味着在应用程序中有用户特定的秘密,而不是使用全局秘密。这也意味着您不应该相信应用程序报告的任何内容,而是验证这是否有意义(即不要相信任何自我报告的游戏或类似的高分)。

你在这里关心谁的安全,你想保护什么?您是在试图保护用户不让其他人访问他们的数据,还是试图保护公司免受逆向工程师试图查看应用程序的工作原理,因为您的 API 不安全?

如果您纯粹是为了保护用户的安全,那么让应用程序在虚拟机中运行完全没有问题,除非您认为用户会在安全性较差的虚拟机中运行应用程序并且他们的数据被盗,这两者都非常不太可能,是他们的问题,而不是你的问题。

如果您试图阻止人们对应用程序进行逆向工程,那么您将面临一场艰苦的战斗,因为根检查器很容易被绕过。这也几乎总是毫无意义的努力,因为如果应用程序设计安全,它对攻击者应该没有任何用处。

此外,请记住,有时安全测试人员如果未能发现任何真正的问题,有时只会弥补非问题,因为空白报告很难证明所花费的资金是合理的。如果可能的话,就这个陈述向他们提出质疑,并要求他们给出一个真实世界的例子,说明这实际上是一个问题。

给您的客户的经典而正确的答案是NOTANISSUE

就您的问题而言,不应将任何客户端软件 * *视为安全设计。他们不可能。客户端软件——无论是 Web 还是应用程序——完全在客户端的控制之下,它的环境也是如此,重写/修改软件或在无法检测到的不安全或修改的环境中运行它的全部能力也是如此。那不是错误。这是模型固有的* *。

您进行各种检查的目的是降低风险并提高标准,这通常是出于安全考虑。这样做不是为了使客户端安全或确保客户端安全,并且您的客户端假设该目标是错误的。

  • * * 可能仅排除客户端软件,其中整个客户端软件及其环境的设计和控制旨在创建高度防篡改和可验证的环境,例如可信执行或某些 YubiKey 的固件(一旦刷新就根本无法轻松下载或修改),或者当客户端是具有自身安全性的远程系统时,例如安全的故障转移服务器通过 SSH 相互同步。

    即便如此,也许特定模块可能被认为是安全的(对于某种威胁模型),但这并不意味着其他任何东西,例如检查加密狗响应的本地应用程序,在任何方面都是安全的。

我在字里行间重新定位,但我想我知道研究人员来自哪里。

您的应用程序没有业务存储(或使用)任何可能暴露其他客户数据的秘密。

设计您的后端,以便提供给前端的秘密仅提供对后端服务的分隔访问。那么如果用户根他们的设备,他们只能破解自己的帐户。