你的问题
当您想使用这些库时,您不能向您的 API 发送请求以隐藏 API 密钥。您必须在客户端代码中初始化这些库(例如反应)。
保护客户端 SDK 和库的 API 密钥的最佳做法是什么?
您发现自己是一个非常难以解决的问题(但在某种程度上并非不可能),因为一旦 API 密钥在客户端,它就是公开的。因此,无论您隐藏得多么好,始终可以在浏览器或移动应用上检索它。
网络应用
在浏览器上获取 API 密钥非常简单,只需打开开发人员工具并在网络选项卡中查找您有兴趣提取 API 密钥的请求,然后单击它以检查请求标头。
移动应用
在移动设备中,从移动应用程序中提取 API 密钥更加费力,但许多人可能认为这并不难。
JNI/NDK - 在原生 C 代码中隐藏 API 密钥
例如,您可以通过 JNI/NDK 隐藏 C 本机代码中的 API 密钥:
使用 Android Studio 2.2 及更高版本,您可以使用 NDK 将 C 和 C++ 代码编译为本机库,然后使用 IDE 的集成构建系统 Gradle 将其打包到您的 APK 中。然后,您的 Java 代码可以通过 Java 本机接口 (JNI) 框架调用本机库中的函数。
这种方法旨在保护 AP/i 密钥不被通过静态二进制分析从您的移动应用程序二进制文件中提取出来,例如 this repo 和 blog post 我写道:
在本文中,我们将使用 Android Hide Secrets 研究存储库,它是一个使用多种不同技术隐藏 API 密钥的虚拟移动应用程序。
通过中间人攻击提取隐藏在本机 C 代码中的 API 密钥
在上面的博文中,隐藏在 JNI/NDK 接口源代码中的 API 密钥无法通过静态二进制分析提取,但正如我在文章 Steal that Api Key with a Man in the Middle Attack 中演示的那样,通过中间人攻击很容易提取:
为了帮助演示如何窃取 API 密钥,我在 Github 中构建并发布了适用于 Android 的 Currency Converter Demo 应用程序,它使用了我们在之前的 Android Hide Secrets 应用程序中使用的相同 JNI/NDK 技术来@ 987654329@.
因此,在本文中,您将学习如何设置和运行中间人攻击,以拦截您控制的移动设备中的 https 流量,从而窃取 API 密钥。最后,您将了解如何缓解中间人攻击。
通过证书固定防止中间人攻击
防止中间人攻击的第一件事是使用证书固定,我在文章Securing HTTPS with Certificate Pinning中写了如何做到这一点:
为了演示如何使用证书固定来保护您的移动应用和 API 服务器之间的 https 流量,我们将使用我在上一篇文章中使用的同一 Currency Converter Demo 移动应用。
在本文中,我们将了解什么是证书固定、何时使用、如何在 Android 应用中实现它,以及它如何防止中间人攻击。
我现在看到你脸上的笑容,但不会太久,因为可以绕过证书固定。
绕过证书固定
您可以在不固定或在运行时使用检测框架禁用它的情况下重新打包移动应用程序。
重新打包移动应用程序以绕过固定
当您拥有正确的工具并且开源充满了这些工具时,这并不难实现。我在Bypassing Certificate Pinning文章里写了怎么做
在本文中,您将学习如何重新打包移动应用程序以使其信任自定义 ssl 证书。这将允许我们绕过证书固定。
使用 Instrumentation Framework 绕过固定
这是我的首选方法,我的首选仪表框架是 Frida,猜猜看,我还有一篇标题为 How to Bypass Certificate Pinning with Frida on an Android App 的文章向您展示如何做到这一点:
今天我将展示如何使用 Frida 检测框架在运行时挂钩到移动应用程序并检测代码以执行成功的中间人攻击,即使移动应用程序已经实现了证书锁定。
绕过证书固定并不太难,只是有点费力,并且允许攻击者详细了解移动应用程序如何与其 API 通信,然后使用相同的知识来自动化攻击或围绕它构建其他服务。
可能的解决方案
您可以采用一系列不同的方法和技术来保护您的 API 服务器和移动应用程序,但优先使用跨移动/网络应用程序和 API 服务器的安全解决方案。
要使用的解决方案取决于您的威胁模型、预算和资源,我将在下面为您提供一些选项。
对于移动应用
我建议您阅读 this answer 我提出的问题如何保护移动应用程序的 API REST?,尤其是强化和屏蔽移动应用程序部分 ,保护 API 服务器和可能更好的解决方案。
对于网络应用程序
您可以学习一些有用的技术来帮助您的 API 后端尝试仅响应来自您所期望的什么的请求,您的真正网络应用程序,为此我邀请您阅读 @987654335 @ 问题从应用程序调用中保护 api 数据,特别是专门用于保护 API 服务器的部分。
你想加倍努力吗?
在回答安全问题时,我总是喜欢参考 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) 是一本用于移动应用安全开发、测试和逆向工程的综合手册。
对于网络应用程序
The Web Security Testing Guide:
OWASP Web 安全测试指南包括用户可以在自己的组织中实施的“最佳实践”渗透测试框架和描述测试最常见 Web 应用程序和 Web 服务安全问题的技术的“低级”渗透测试指南。