如何保护Flutter应用程序免受逆向工程的影响



我正在尝试使用Flutter开发一个支付应用程序,是否有任何方法可以保护我的应用程序API和代币或使应用程序逆向工程证明。

我正在尝试使用Flutter开发一个支付应用程序,有没有任何方法可以保护我的应用程序API和代币或使应用程序的逆向工程证明。

如果你正在寻找防弹解决方案,因为它们在防止对移动应用二进制进行反向工程以从中提取令牌或机密方面100%有效,那么我必须告诉你,不幸的是,这是不可能实现的,但你可以让它变得更难。。。它的难度将取决于您愿意为您的用例投入或法律要求的精力和资源。

另一方面,保护移动API不被他人访问,那么你的移动应用程序的真实实例就可以非常自信地实现。

从移动应用程序中提取API密钥有多容易

通过大量的开源工具,逆向工程移动应用二进制文件以从中提取API令牌非常容易,正如我在文章《如何使用静态二进制分析从移动应用程序中提取API密钥:》中演示的那样

可用于反向工程的开源工具范围很大,我们在本文中确实无法触及这个主题的表面,但我们将重点使用移动安全框架(MobSF)来演示如何对我们的移动应用程序的APK进行反向工程。MobSF是一个开源工具的集合,它们在一个有吸引力的仪表板中显示结果,但MobSF和其他地方使用的相同工具可以单独使用,以实现相同的结果。

或者,中间人(MitM)攻击可以用来提取相同的API密钥,为此,我们也有开源工具,比如我在文章《用中间人攻击窃取API密钥:》中演示的mitmproxy

为了帮助演示如何窃取API密钥,我在Github中构建并发布了适用于Android的Currency Converter Demo应用程序,该应用程序使用了与我们在早期的Android Hide Secrets应用程序中使用的相同的JNI/NDK技术来隐藏API密钥。

因此,在本文中,您将学习如何设置和运行MitM攻击,以拦截您控制的移动设备中的https流量,从而窃取API密钥。最后,您将从高层次了解如何减轻MitM攻击。

防范逆向工程

逆向工程是一个巨大的主题,您可以通过阅读OWASP移动安全测试指南(MSTG)Github repo中的标记文件0x04c-Tamping-and-Leverse-Enginering.md来了解更多关于逆向工程中使用的技术。

你不能让移动应用程序100%经得起逆向工程的考验,但你可以使用许多强化代码技术来增加难度和/或使用一些运行时自我保护机制,也称为RASP:

运行时应用程序自我保护(RASP)是一种安全技术,它使用运行时检测工具,通过利用运行中软件内部的信息来检测和阻止计算机攻击。

据说,RASP技术通过监控软件的输入并阻止那些可能允许攻击的输入来提高软件的安全性,同时保护运行时环境免受不必要的更改和篡改。

您可以在OWASP MSTG存储库中阅读一些可能的反逆转防御:

  • Android-0x05j-Testing-Reflexicy-Against-Reverse-Engineering.md
  • iOS-https://github.com/OWASP/owasp-mstg/blob/master/Document/0x06j-Testing-Resiliency-Against-Reverse-Engineering.md

因此,这些都是在客户端进行决策的方法,因此很容易被使用工具框架绕过,如Frida:

将您自己的脚本注入黑盒进程。挂钩任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,点击保存,立即查看结果。所有这些都没有编译步骤或程序重新启动。

我是在告诉你使用它们毫无价值吗?不,相反,你应该增加尽可能多的防御层,就像过去几个世纪的城堡一样,以防止敌人突破外层防御。

访问API服务器的世界卫生组织和什么不同

在我深入探讨如何保护您的API服务器之前,我想首先澄清一个我通常在任何资历的开发人员中发现的误解,即什么访问API服务器之间的差异。

我写了一系列关于API和移动安全的文章,在文章中,为什么你的移动应用程序需要API密钥?您可以详细阅读什么访问您的API服务器之间的区别,但我将在这里提取它的主要内容:

what是向API服务器发出请求的东西。它真的是你的移动应用程序的真实实例,还是机器人程序、自动脚本或攻击者用Postman这样的工具手动在你的API服务器上戳来戳去?

谁是移动应用程序的用户,我们可以通过多种方式对其进行身份验证、授权和识别,例如使用OpenID Connect或OAUTH2流。

因此,请考虑作为用户,您的API服务器将能够对数据进行身份验证和授权访问,并考虑what是代表用户发出请求的软件。

将API服务器锁定到移动应用程序

因此,任何在客户端上运行并且需要一些秘密才能访问API服务器的东西都可能以不同的方式被滥用,您可以在本系列关于Mobile API安全技术的文章中了解更多信息。本文将教您如何使用API密钥、用户访问令牌、HMAC和TLS Pinning来保护API,以及如何绕过它们。

要解决访问您的移动应用程序的问题,您需要使用关于移动API安全技术的系列文章中提到的一个或所有解决方案,我在上面提到了这些解决方案,并承认它们只能使对API服务器的未经授权访问更难绕过,但并非不可能。

可以通过使用移动应用验证解决方案来采用更好的方法,该解决方案将使API服务器能够以非常高的置信度知道仅响应来自真实移动应用的请求。我建议您阅读我对以下问题的回答如何确保移动应用程序的API REST安全更详细的介绍。

你想多跑一英里吗

在回答安全问题时,我总是喜欢引用OWASP基金会的出色工作。

对于APIS

OWASP API安全前10名

OWASP API安全项目旨在通过强调不安全API中的潜在风险并说明如何减轻这些风险,为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API安全项目将创建并维护API十大安全风险文档,以及创建或评估API时最佳实践的文档门户。

适用于移动应用程序

OWASP移动安全项目-十大风险

OWASP移动安全项目是一个集中的资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或被利用的可能性。

OWASP-移动安全测试指南:

《移动安全测试指南》(MSTG)是一本关于移动应用程序安全开发、测试和逆向工程的综合手册。

很遗憾,您不能。没有办法保护";秘密";如果您将其分发给用户,则可以从逆向工程中获得。考虑这一点最简单的方法是,一个专门的反向工程师将能够完美地模拟你所采取的任何加密、混淆或其他措施。如果你不想让用户拥有某些东西(如密钥、密码、密钥等),不要将其分发给他们。

逆向工程保护是一项艰巨的任务,因为您必须同时涵盖iOS和Android世界的具体情况。除非您决定实现自己的解决方案,否则还有各种库(freeRASP、fluft_jailbreak_detection)也可以解决这个问题。不利的一面是,如果有人破解(例如Frida脚本、Magisk插件)库,所有依赖它的应用程序也会受到攻击。许多逆向工程工具包已经包含了流行的RootBeer库的旁路。如果你不能从头开始创建解决方案,你可以使用任何RASP库,并在其上添加香料——RE保护应始终包含尽可能多的层。

免责声明:我为freeRASP做出贡献

示例(使用freeRASP):

// For Android
androidCallback: AndroidCallback(
onRootDetected: () => exit(0),
onEmulatorDetected: () => exit(0),
onFingerprintDetected: () => exit(0),
onHookDetected: () => exit(0),
onTamperDetected: () => exit(0),
),
// For iOS
IOSCallback: IOScallback(
onSignatureDetected: () => exit(0),
onRuntimeManipulationDetected: () => exit(0),
onJailbreakDetected: () => exit(0),
onPasscodeChangeDetected: () => exit(0),
onPasscodeDetected: () => exit(0),
onSimulatorDetected: () => exit(0),
onMissingSecureEnclaveDetected: () => exit(0),
),
// Common for both platforms
onDebuggerDetected: () => exit(0),

悬停时,攻击者可以定位(在本机Android/iOS代码中)底层检查方法,并静态和动态禁用它们。

最新更新