我想检测 APK 文件中的任何篡改并验证应用程序或内置完整性。当我在线搜索时,我从官方来源得到了这个解决方案 - https://developer.android.com/google/play/integrity/overview
然而,它看起来不太容易实现,并且还涉及服务器端的更改。因此,我研究了另一个解决方案,即找出用于签署我的应用程序的当前密钥库的签名并将其发送到后端(在将构建上传到 PlayStore 之前已经具有原始签名)进行验证。
示例代码:
SigningInfo signingInfo = getPackageManager()
.getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES)
.signingInfo;
signingInfo.getApkContentsSigners();
//Send the information to backend to check if matches our original release.keystore signature
Run Code Online (Sandbox Code Playgroud)
然而,它看起来不太容易实现,并且还涉及服务器端的更改。
保护移动应用程序是一项非常复杂的任务,如果仅在客户端完成,攻击者就可以绕过有关其完整性的任何决策。
攻击者可以使用逆向工程技术来反编译您的移动应用程序并对其进行篡改,或者他们可以使用检测框架在运行时插入您的代码以更改其行为和/或提取其所需的任何内容,然后自动对移动应用程序后端进行攻击。
一些非常流行的开源工具可以使逆向工程变得更容易:
移动安全框架是一种自动化、一体式移动应用程序 (Android/iOS/Windows) 笔测试框架,能够执行静态分析、动态分析、恶意软件分析和 Web API 测试。
弗里达:
将您自己的脚本注入黑盒进程。挂钩任何函数、监视加密 API 或跟踪私有应用程序代码,无需源代码。编辑,点击保存,然后立即看到结果。全部无需编译步骤或程序重新启动。
为了考虑使用这种逆向工程技术,任何关于移动应用程序及其运行的设备的完整性的决策都需要在后端根据从移动应用程序及其设备中进行/执行的测量/挑战来执行。继续运行。
因此,我研究了另一个解决方案,即找出用于签署我的应用程序的当前密钥库的签名并将其发送到后端(在将构建上传到 PlayStore 之前已经具有原始签名)进行验证。
攻击者可以轻松地执行 MitM 攻击来拦截此请求,然后提取您发送到后端的签名。从这里开始,攻击者在向您的 API 后端发出 API 请求时,可以轻松冒充您的移动应用程序。您可以学习如何在自己的手机上进行 MitM 攻击,尝试自己提取其签名,我可以通过向您指出我的文章通过中间人攻击窃取 Api 密钥来帮助您实现这一点:
为了帮助演示如何窃取 API 密钥,我在 Github 上构建并发布了适用于 Android 的货币转换器演示应用程序,该应用程序使用我们在早期Android Hide Secrets应用程序中使用的相同JNI/NDK技术来隐藏 API 密钥。
因此,在本文中,您将了解如何设置和运行 MitM 攻击,以拦截您控制下的移动设备中的 https 流量,以便窃取 API 密钥。最后,您将在较高层面上了解如何缓解 MitM 攻击。
虽然我的文章是提取 API 密钥,但从 API 请求中提取应用签名的步骤是相同的。
示例代码:
Run Code Online (Sandbox Code Playgroud)SigningInfo signingInfo = getPackageManager() .getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES) .signingInfo; signingInfo.getApkContentsSigners(); //Send the information to backend to check if matches our original >release.keystore signature
- 上述用于检查 APK 完整性的简单代码有什么缺点吗?
我已经提到 MitM 攻击是一种提取发送到后端的签名的方法,但攻击者也可以使用 Frida 在运行时通过此代码挂钩到函数并提取签名。攻击者还可以反编译您的移动应用程序二进制文件并从中提取签名。
你的方法的缺点是它很容易被攻击者绕过,即使是那些不太熟练的人,比如脚本小子,只需谷歌搜索如何做东西和/或使用暗网购买专门的解决方案/帮助他们实现恶意目的的工具。
- 如果没有,那么 - Goggle 推荐 Play Integrity API 而不是这个简单解决方案的原因是什么
Google 推荐 Play Integrity API 的原因是它依赖于更先进的技术,这些技术也需要后端集成,从而使该过程更难绕过,并且需要更多技能才能执行成功的攻击。
我想检测 APK 文件中的任何篡改并验证应用程序或内置完整性。当我在线搜索时,我从官方来源得到了这个解决方案 - https://developer.android.com/google/play/integrity/overview
即使您愿意付出所有努力来实现此解决方案,您也需要考虑仅适用于 Android 的解决方案的缺点,因此当您还希望拥有使用相同 API 后端的 iOS 应用程序时,需要另一个解决方案。
我建议您阅读我针对“How to secure an API REST for mobile app?”问题给出的答案。,特别是“强化和屏蔽移动应用程序”、“保护 API 服务器安全”和“可能的更好解决方案”部分,提供替代方法来证明移动应用程序及其运行设备的完整性,并将 API 服务器锁定到移动应用程序。我链接的答案中的解决方案建议使用移动应用程序证明解决方案,该解决方案将通过云服务证明设备和移动应用程序的完整性,该云服务将发出 JWT 以使 API 服务器能够知道是什么发出了 API 请求确实是您上传到 Android Play 商店的移动应用程序的真实且未经修改的实例。
在回答安全问题时,我总是喜欢参考 OWASP 基金会的出色工作。
OWASP API 安全项目旨在通过强调不安全 API 的潜在风险并说明如何减轻这些风险,为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API 安全项目将创建并维护十大 API 安全风险文档,以及创建或评估 API 时最佳实践的文档门户。
OWASP 移动安全项目是一个集中资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类并提供开发控制以减少其影响或被利用的可能性。
移动安全测试指南 (MSTG) 是移动应用安全开发、测试和逆向工程的综合手册。
| 归档时间: |
|
| 查看次数: |
5045 次 |
| 最近记录: |