我正在尝试使用 Flutter 开发支付应用程序,有什么方法可以保护我的应用程序 API 和令牌或使应用程序逆向工程证明。
如果您正在寻找防弹解决方案,因为它们可以 100% 有效地防止对移动应用二进制文件进行逆向工程以从中提取令牌或秘密,那么我不得不告诉您,很遗憾,这是不可能实现的,但是你可以让它变得更难......它的难度取决于你愿意为你的用例投入或法律要求的努力和资源。
另一方面,保护移动 API 不被他人访问,那么您的移动应用程序的真正实例就有可能以非常高的信心实现。
从移动应用程序中提取 API 密钥有多容易?
使用大量开源工具对移动应用二进制文件进行逆向工程以从中提取 API 令牌非常容易,正如我在我的文章 How to Extract an API key from a Mobile App with Static Binary Analysis 中演示的那样:
可用于逆向工程的开源工具范围很广,我们在本文中确实无法触及这个主题的表面,而是将重点使用Mobile Security Framework(MobSF) 来演示如何逆向工程我们的移动应用程序的 APK。 MobSF 是一组开源工具,它们在一个有吸引力的仪表板中展示其结果,但在 MobSF 和其他地方使用的相同工具可以单独使用以实现相同的结果。
另外,中间人 (MitM) 攻击可用于提取相同的 API 密钥,为此,我们还有开源工具,例如我在文章 Steal that Api Key with a Man in the Middle Attack 中演示的 mitmproxy:
为了帮助演示如何窃取 API 密钥,我在 Github 中构建并发布了适用于 Android 的 Currency Converter Demo 应用程序,它使用了我们在之前的 Android Hide Secrets 应用程序中使用的相同 JNI/NDK 技术来@ 987654327@.
因此,在本文中,您将学习如何设置和运行中间人攻击,以拦截您控制的移动设备中的 https 流量,从而窃取 API 密钥。最后,您将了解如何缓解中间人攻击。
防御逆向工程
逆向工程是一个庞大的话题,您可以通过阅读 OWASP 移动安全测试指南 (MSTG) 的 Github 存储库中的降价文件 0x04c-Tampering-and-Reverse-Engineering.md 来了解更多关于逆向工程中使用的技术。
您无法使移动应用程序 100% 进行逆向工程证明,但您可以使用许多强化代码技术使其变得更加困难和/或使用一些运行时自我保护机制,即 RASP:
运行时应用程序自我保护 (RASP) 是一种安全技术,它使用运行时工具通过利用运行软件内部的信息来检测和阻止计算机攻击。
据说 RASP 技术通过监控其输入并阻止可能允许攻击的输入来提高软件的安全性,同时保护运行时环境免受不必要的更改和篡改。
您可以在 OWASP MSTG 存储库中阅读一些可能的反逆向防御:
因此,这些都是在客户端做出决策的方法,因此很容易被使用检测框架绕过,例如Frida:
将您自己的脚本注入黑盒进程。挂钩任何功能、监视加密 API 或跟踪私有应用程序代码,无需源代码。编辑,点击保存,立即查看结果。所有这些都无需编译步骤或程序重新启动。
我是在告诉你使用它们毫无价值吗?不,相反,您应该尽可能多地添加防御层,就像过去几个世纪的城堡如何防止敌人突破外层防御一样。
访问 API 服务器的 WHO 和 WHAT 的区别
在深入探讨如何保护 API 服务器之前,我想先澄清一个误解,这种误解通常在任何资历的开发人员中发现,即关于 谁 和 之间的区别什么正在访问 API 服务器。
我写了一系列关于 API 和移动安全的文章,在文章 Why Does Your Mobile App Need An API Key? 你可以详细阅读 谁 和 what 访问你的API 服务器,但我将在这里提取它的主要内容:
what 是向 API 服务器发出请求的事物。它真的是您的移动应用程序的真实实例,还是机器人、自动脚本或攻击者使用 Postman 之类的工具手动绕过您的 API 服务器?
谁是移动应用的用户,我们可以通过多种方式进行身份验证、授权和识别,例如使用 OpenID Connect 或 OAUTH2 流。
因此,将 谁 视为您的 API 服务器将能够对数据进行身份验证和授权访问的用户,并将 what 视为发出该请求的软件代表用户。
将 API 服务器锁定到移动应用
因此,任何在客户端运行并且需要一些秘密才能访问 API 服务器的东西都可能以不同的方式被滥用,您可以在 this series 有关移动 API 安全技术的文章中了解更多信息。本文将教您如何使用 API Keys、用户访问令牌、HMAC 和 TLS Pinning 来保护 API 以及如何绕过它们。
要解决 什么 正在访问您的移动应用程序的问题,您需要使用我上面提到的关于移动 API 安全技术的系列文章中提到的一个或所有解决方案,并接受它们可以只会使对您的 API 服务器的未经授权的访问更难绕过,但并非不可能。
可以通过使用移动应用证明解决方案来采用更好的方法,该解决方案将使 API 服务器能够非常自信地知道仅响应来自真正移动应用的请求。我建议您阅读 this answer 我提出的问题如何保护移动应用程序的 API REST? 对此进行了更详细的说明。
你想加倍努力吗?
在回答安全问题时,我总是喜欢参考 OWASP 基金会的出色工作。
对于 APIS
OWASP API Security Top 10
OWASP API 安全项目旨在通过强调不安全 API 的潜在风险并说明如何降低这些风险,为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API 安全项目将创建和维护一份 API 安全风险前 10 名文档,以及一个文档门户,用于在创建或评估 API 时提供最佳实践。
对于移动应用
OWASP Mobile Security Project - Top 10 risks
OWASP 移动安全项目是一个集中资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类并提供开发控制以减少其影响或被利用的可能性。
OWASP - Mobile Security Testing Guide:
移动安全测试指南 (MSTG) 是一本用于移动应用安全开发、测试和逆向工程的综合手册。