如何在没有人窃取令牌的情况下使用我的移动应用程序中的 API

Yar*_*nST 5 security android react-native openai-api

我正在构建一个使用OpenAI API的应用程序

他们为我提供了一个 API 令牌,我用它来从我的 Android 移动应用程序(反应本机)进行 API 调用

我知道在移动客户端上存储此 API 令牌是一种不好的做法,因为攻击者可能会保留它并使用我的配额和资金。

我有什么选择?简单的解决方案是构建一个后端,但我不想开始实现所有原始 API 方法,我只是更喜欢直接从客户端使用它。

我尝试以无法找到的方式存储令牌,但找不到方法。

Exa*_*a37 4

你的问题

\n
\n

他们为我提供了一个 API 令牌,我用它来从我的 Android 移动应用程序(反应本机)进行 API 调用

\n

我知道在移动客户端上存储此 API 令牌是一种不好的做法,因为攻击者可能会保留它并使用我的配额和资金。

\n
\n

是的,这确实是一种非常糟糕的做法,但至少您意识到了风险,而很多人使用这种方法却没有意识到攻击者获取此类秘密(Api 令牌、API 密钥,无论您如何命名)是多么容易。

\n

在我撰写的有关移动 API 安全性的一系列文章中,我展示了通过静态分析和 MitM 攻击可以多么轻松地完成此任务:

\n

如何使用静态二进制分析从移动应用程序中提取 API 密钥

\n
\n

可用于逆向工程的开源工具种类繁多,在本文中我们确实无法触及该主题的表面,但我们将重点关注使用移动安全框架(MobSF)来演示如何进行逆向工程我们的移动应用程序的 APK。MobSF 是开源工具的集合,它们在有吸引力的仪表板中展示其结果,但是 MobSF 和其他地方在幕后使用的相同工具可以单独使用以实现相同的结果。

\n

在本文中,我们将使用Android Hide Secrets研究存储库,它是一个虚拟移动应用程序,使用多种不同的技术隐藏 API 密钥。

\n
\n

一些攻击者更喜欢直接进行 MitM 攻击,因为他们将了解应用程序如何与 API 后端通信,并提取所使用的秘密,以及他们需要用于发出请求和解析响应的蓝图。

\n

通过中间人攻击窃取 Api 密钥

\n
\n

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

\n

因此,在本文中,您将了解如何设置和运行 MitM 攻击,以拦截您控制下的移动设备中的 https 流量,以便窃取 API 密钥。最后,您将在较高层面上了解如何缓解 MitM 攻击。

\n
\n

可能的解决方案

\n

反向代理

\n
\n

简单的解决方案是构建一个后端,但我不想开始实现所有原始 API 方法,我只是更喜欢直接从客户端使用它。

\n
\n

您不需要,您只需要您的后端代理对您在移动应用程序上使用的第三方 API 的请求,在您的情况下,这似乎仅适用于 OpenAPI。

\n

例如,当您的移动应用程序需要发出请求时,openapi.io/some/resourceyour-reverse-proxy.com/some/resource会抓取该/some/resource部分并构建对 OpenAPI 的请求openapi.io/some/resource,向其中添加 API 令牌标头,现在它已安全地存储在您的反向存储中代理服务器。

\n

使用反向代理保护第三方 API

\n
\n

在本文中,您将首先了解什么是第三方 API,以及为什么您不应该\xe2\x80\x99 直接从移动应用程序中访问它们。接下来,您将了解什么是反向代理,然后了解何时以及为何应使用它来保护对移动应用程序中使用的第三方 API 的访问。

\n
\n
\n

本文中反复出现的主题是建议不要直接从移动应用程序访问第三方 API。正如我们所讨论的,一旦您的移动应用程序被发布,其中的任何秘密都会公开,从而可供攻击者代表您使用。如果您不小心,您将成为支付账单的人,或者发现您的免费套餐资源已被其他人耗尽。

\n
\n

这种方法的缺点是您仍然有一个需要保护的 API 密钥,即访问反向代理的密钥,但至少您不会暴露您的 OpenApi 秘密,并且您可以使用多种机制来限制请求并保护安全访问您的反向代理,以确保仅响应来自您的移动应用程序的真实且未经修改的实例的请求。

\n

运行时秘密保护

\n

您可以设计或使用现成的机制将秘密传递到您的移动应用程序,以便在向 OpenAPI 发出的 API 请求中使用它们,但您需要确保仅传递秘密到您的移动应用程序的真实且未经修改的实例,这些实例不受 MitM 攻击,在运行时使用 Frida 等工具进行篡改/检测,否则您的秘密将通过挂钩到将其添加到标头的函数来轻松提取API 请求或通过 MitM 攻击拦截请求,即使通信通道通过证书固定进行保护,因为在攻击者控制的设备中绕过并不难。

\n

对问题的回复中,Storing Api Keys Securely in Flutter or Sending Payment Details to my Server?我将更详细地介绍运行时秘密保护方法。

\n

您想加倍努力吗?

\n

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

\n

对于APIS

\n

OWASP API 安全性前 10 名

\n
\n

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

\n
\n

对于移动应用程序

\n

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

\n
\n

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

\n
\n

OWASP - 移动安全测试指南

\n
\n

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

\n
\n