【发布时间】:2021-04-11 23:02:04
【问题描述】:
我在 Play 商店中有一个 Android 应用程序,我想检测用户是使用从 Play 商店下载的应用程序的原始版本还是从其他来源下载的 mod apk。
【问题讨论】:
-
也许你应该看看这里stackoverflow.com/a/37540163/9437124
我在 Play 商店中有一个 Android 应用程序,我想检测用户是使用从 Play 商店下载的应用程序的原始版本还是从其他来源下载的 mod apk。
【问题讨论】:
我在 Play 商店中有一个 Android 应用程序,我想检测用户是使用从 Play 商店下载的应用程序的原始版本还是从其他来源下载的 mod apk。
一个非常简单的问题,包含许多需要完全回答的问题,但从高层次的角度来看,您可以从移动应用程序内部解决这个问题,也可以从外部解决。
从内部进行称为RASP:
运行时应用程序自我保护 (RASP) 是一种安全技术,它使用运行时工具通过利用运行软件内部的信息来检测和阻止计算机攻击。
据说 RASP 技术通过监控其输入并阻止可能允许攻击的输入来提高软件的安全性,同时保护运行时环境免受不必要的更改和篡改。
我经常观察到的一件事是,许多开发人员没有意识到他们可能添加到移动应用程序代码中以尝试保护它的任何保护都可以在运行时使用检测框架绕过,即使代码本身是强混淆了。用于在运行时操作代码的著名检测框架是Frida:
将您自己的脚本注入黑盒进程。挂钩任何功能、监视加密 API 或跟踪私有应用程序代码,无需源代码。编辑,点击保存,立即查看结果。所有这些都无需编译步骤或程序重新启动。
如果开发者在他们的代码中添加一个函数来检测应用程序是否是原始应用程序,攻击者最终会通过二进制的静态分析或运行时的动态分析找到它,然后使用 Frida 进行挂钩它改变结果,就像总是返回一个结果,说它是原始结果。攻击者的另一种选择是在没有上述功能的情况下重新编译二进制文件,从而消除保护。
那么,我是说你不要在你的移动应用上使用自我保护代码或 RASP 解决方案吗?
不,我建议你使用所有你能负担得起的机制来阻止坏人,但你也需要意识到他们可以绕过他们,并尽可能努力克服你的防御,以至于这对他们来说很耗时,他们只是更愿意去其他地方寻找更容易的目标。
一个更好的选择是在应用程序运行或不是原始版本的二进制文件时将检测委托给应用程序外部,如果它在未植根或越狱的设备中进行,这可以通过使用来完成移动应用证明概念,我在 this answer 上解释了我在关于可能更好的解决方案部分提出的问题如何保护移动应用的 API REST? .
简而言之,Mobile App Attestion 是一种解决方案,当完全实施后,它可以证明您的移动应用程序是否是您上传到 Play 商店的正版且未经篡改的版本,并且在受信任的设备上运行,而不是越狱或扎根。
Mobile App Attestation 解决方案与 RASP 解决方案的不同之处在于,决策是在移动设备之外做出的,因此无法通过检测框架进行操作,并且它们还发布了一个 JWT 令牌,允许移动应用的后端知道当它可以信任从它接收请求时。
RASP 解决方案不足,因为通常它们不会让移动 api 后端知道请求是否来自在受信任环境中运行的移动设备的正版版本,即未植根或越狱的设备,但是即使他们这样做了,一旦这样做的逻辑在移动应用程序中运行,攻击者就可以使用 Frida 或类似工具对其进行操作。
另一方面,移动应用证明解决方案将在移动设备之外做出决定,并允许移动 api 后端知道它何时可以信任或不信任传入的请求。
在回答安全问题时,我总是喜欢参考 OWASP 基金会的出色工作。
OWASP API 安全项目旨在通过强调不安全 API 的潜在风险并说明如何降低这些风险,为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API 安全项目将创建和维护一份 API 安全风险前 10 名文档,以及一个文档门户,用于在创建或评估 API 时提供最佳实践。
OWASP Mobile Security Project - Top 10 risks
OWASP 移动安全项目是一个集中资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类并提供开发控制以减少其影响或被利用的可能性。
OWASP - Mobile Security Testing Guide:
移动安全测试指南 (MSTG) 是一本用于移动应用安全开发、测试和逆向工程的综合手册。
【讨论】: