如何保护本机应用程序中的敏感数据

How secure sensitive data in react-native app

在我的应用程序中,我与 keycloak 建立了连接,以获取 API 密钥和用于保存用户数据的安全存储。

我如何确保安全:

我阅读了不同的文章,但没有找到正确保护这些数据的方法。一个简单的 APK 还原工程显示秘密数据。

可以混淆代码,但这不是一个严肃的解决方案,这对性能有很大影响。

一个问题与另一个问题交换

In my application I have a connection with keycloak for get an API key and a secure storage to save the user data.

因此,使用 KeyCloak 在运行时检索 API 密钥,以免在移动应用程序中对其进行硬编码,只是将问题从保护 API 密钥转移到保护 KeyCloak 秘密.

从移动应用中提取秘密

How I can secure :

  • the secret id need to connect to the keycloak
  • the key to access the secure store

残酷的事实是您无法适当地保护它们,因为您在移动应用程序版本中传送的任何秘密都必须被视为属于 public 域,因为它在客户端,因此任何人都可以花时间 he/she 想要通过静态或动态分析对移动应用程序进行逆向工程以提取它。

您可以使用 JNI/NDK 在 Natice C 代码中隐藏秘密,正如我在文章 How to Extract an API key from a Mobile App with Static Binary Analysis:

中展示的那样

The range of open source tools available for reverse engineering is huge, and we really can't scratch the surface of this topic in this article, but instead we will focus in using the Mobile Security Framework(MobSF) to demonstrate how to reverse engineer the APK of our mobile app. MobSF is a collection of open source tools that present their results in an attractive dashboard, but the same tools used under the hood within MobSF and elsewhere can be used individually to achieve the same results.

现在,由于隐藏在本机 C 代码中的秘密将很耗时,但并非不可能。所以,如果你不能通过静态逆向工程轻易地做到这一点,那么你可以通过我在文章 Steal that Api Key with a Man in the Middle Attack:

中展示的 MitM 攻击来做到这一点

In order to help to demonstrate how to steal an API key, I have built and released in Github the Currency Converter Demo app for Android, which uses the same JNI/NDK technique we used in the earlier Android Hide Secrets app to hide the API key.

So, in this article you will learn how to setup and run a MitM attack to intercept https traffic in a mobile device under your control, so that you can steal the API key. Finally, you will see at a high level how MitM attacks can be mitigated.

你明白了吗?您可以通过静态二进制分析使其很难提取,但是攻击者只需要使用像 mitmproxy 这样的工具来拦截流量并在请求的 header 中查找 API 键。

您可以尝试保护您的移动应用程序免受 MitM 攻击,我在我的文章中举例说明了 Securing HTTPS with Certificate Pinning:

In order to demonstrate how to use certificate pinning for protecting the https traffic between your mobile app and your API server, we will use the same Currency Converter Demo mobile app that I used in the previous article.

In this article we will learn what certificate pinning is, when to use it, how to implement it in an Android app, and how it can prevent a MitM attack.

但是,您需要注意,您也可以像我在下一篇文章中展示的那样绕过固定 Bypass Certificate Pinning:

To demonstrate how to bypass certificate pinning we will use the same Currency Converter Demo mobile app that was used in the previous article.

In this article you will learn how to repackage a mobile app in order to make it trust custom ssl certificates. This will allow us to bypass certificate pinning.

攻击者的另一种选择是使用检测框架挂钩 returns 来自密钥库或 KeyCloak 服务器的秘密或 API 密钥的代码。用于此类攻击的流行检测框架是 Frida:

Inject your own scripts into black box processes. Hook any function, spy on crypto APIs or trace private application code, no source code needed. Edit, hit save, and instantly see the results. All without compilation steps or program restarts.

因此,当代码未被混淆时,在代码中使用 Frida 进行连接会变得更容易,因为通过使用一些可猜测的函数名称搜索代码,很容易找到执行此操作的函数,或者只需在 IDE.

的帮助下遵循代码流程

代码混淆及其重要性

It's possible to obfuscate the code but it's not a serious solution and this has a great impact on performance.

是的,你是对的,代码混淆不会隐藏秘密,只会让人难以理解逻辑流程。

代码混淆应该仍然在您的移动应用程序安全加固列表中,一旦用作Google recommends,通过压缩代码和资源,混淆和优化您的应用程序与 R8,然后你就不会只是因为代码被混淆了,所以应用程序速度较慢,但​​是您将拥有一个更难通过代码遵循逻辑的应用程序,因此攻击者会四处查看代码以发现要挂钩检测框架,这将花费更多的时间任务,有时不要称之为令人沮丧。

保护移动应用程序中的秘密

I read different article but I didn't find a way to properly secure those data. A simple revert engineering from the APK show the secret data.

是的,你找不到一个,因为这不是一个需要解决的小问题,你只能让它变得困难,但并非不可能。

访问 API 服务器的 WHO 和 WHAT 之间的区别

在我深入探讨解决您的问题的可能方法之前,我想首先澄清一个误解,这个误解通常是我在任何资历的开发人员中发现的,那就是 who[=115= 之间的区别] 和 什么 正在访问 API 服务器。

我写了一系列关于API和移动安全的文章,在文章Why Does Your Mobile App Need An Api Key?中你可以详细阅读who之间的区别什么 正在访问您的 API 服务器,但我将在这里提取主要内容:

The what is the thing making the request to the API server. Is it really a genuine instance of your mobile app, or is it a bot, an automated script or an attacker manually poking around your API server with a tool like Postman?

The who is the user of the mobile app that we can authenticate, authorize and identify in several ways, like using OpenID Connect or OAUTH2 flows.

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

既然您更好地了解了它们之间的区别,您就可以在安全性和 trade-offs 方面做出更明智的决定,以决定对您的用例采取何种方法。

一种可能的朴素方法

  • 隐藏您的 API 密钥,或者如果您更喜欢本机 C 代码中的 KeyCloak 秘密,如我在上面链接的文章中所示,该文章引用了此 Github repo。这使得静态逆向工程的秘密变得更加困难。
  • 根据 Google 压缩代码和资源,混淆并优化您的应用程序 instructions.This 使得很难找到挂钩 Frida 的代码。
  • 实施证书固定。这使得执行 MitM 攻击变得更加困难。

我称之为天真的方法,因为我在链接的系列文章中展示了它可以被绕过,但它提高了完成它所需的技能和时间的门槛。

可能更好的解决方案

所以,您的主要目标似乎是保护 API 密钥,您需要将其用作一种通过后端 API 服务器识别您的移动应用程序的方式,也就是锁定日后端 API 服务器与您的移动应用程序的真实且未被篡改的版本,这将允许服务器仅响应来自您上传到 Google Play 商店的相同二进制文件的请求,那么您可能想要查看移动应用证明概念,为此我建议您阅读 this answer 我给出的问题 How to secure an API REST for mobile app?,尤其是保护API服务器可能更好的解决方案

部分

简而言之,移动应用证明解决方案的作用是在 run-time 保证您的移动应用未被篡改,未 运行 在已获得 root 权限的设备中,未被检测像 xPosed 或 Frida 这样的框架,不会受到 MitM 攻击,这是通过后台的 运行 SDK 实现的。云中的服务 运行 将挑战应用程序,并根据响应证明移动应用程序和设备的完整性 运行 开启,因此 SDK 永远不会对任何决定负责。

您想加倍努力吗?

在任何对安全问题的回答中,我总是喜欢引用 OWASP 基金会的优秀作品。

对于APIS

OWASP API Security Top 10

The OWASP API Security Project seeks to provide value to software developers and security assessors by underscoring the potential risks in insecure APIs, and illustrating how these risks may be mitigated. In order to facilitate this goal, the OWASP API Security Project will create and maintain a Top 10 API Security Risks document, as well as a documentation portal for best practices when creating or assessing APIs.

对于移动应用程序

OWASP Mobile Security Project - Top 10 risks

The OWASP Mobile Security Project is a centralized resource intended to give developers and security teams the resources they need to build and maintain secure mobile applications. Through the project, our goal is to classify mobile security risks and provide developmental controls to reduce their impact or likelihood of exploitation.

OWASP - Mobile Security Testing Guide:

The Mobile Security Testing Guide (MSTG) is a comprehensive manual for mobile app security development, testing and reverse engineering.