如何防止对 API Key 和 API Secret 的 MITM 攻击?

Posted

技术标签:

【中文标题】如何防止对 API Key 和 API Secret 的 MITM 攻击?【英文标题】:How to prevent MITM attacks on API Key and API secret? 【发布时间】:2021-12-02 09:59:41 【问题描述】:

有人会如何防止针对 API 机密/API 密钥的 MITM 类型攻击? facebook/instagram 如何保护他们的用户免受 MITM 类型的黑客攻击?

他们甚至保护用户吗?或者他们认为任何可能的攻击都应该由用户承担?

【问题讨论】:

HTTPS 可防止中间人攻击。如果您的应用程序进行了正确的证书和主机名验证,那么您将受到保护。 但是HTTPS就够了吗? 我就是这么说的。如果你怀疑那很好,但你能解释一下你为什么怀疑吗? 我不是质疑 HTTPS 本身,我是在质疑它可以被拦截的情况 【参考方案1】:

我的回答中的一些背景

我假设您的问题是在移动应用程序的上下文中,因此我的回答将说明如何防止服务于移动应用程序的 API 受到中间人攻击以及如何绕过它。

您的 Facebook/Instagram 相关问题

facebook/instagram 如何保护他们的用户免受 MITM 类型的黑客攻击?

他们甚至保护用户吗?或者他们认为任何可能的攻击都应该由用户承担?

这个问题最好由 Facebook/Instagram 的内部人员或在他们的移动应用程序和 API 上做了大量工作的安全研究人员来回答。

很抱歉无法在这里为您解释清楚。

防止中间人攻击

有人会如何防止针对 API 机密/API 密钥的 MITM 类型攻击?

我可以通过对证书公钥使用证书固定来帮助您并快速回复它,我们将在下面进行更详细的介绍。

首先,您需要通过将移动应用配置为仅在 TLS 握手期间与 API 建立连接来保护 HTTPS 通信通道通过移动应用程序,忽略根据设备证书信任存储验证可能仍然有效的任何其他内容。我在Securing HTTPS with Certificate Pinning写的文章中详细介绍了它以及如何实现它:

为了演示如何使用证书固定来保护您的移动应用和 API 服务器之间的 https 流量,我们将使用我在上一篇文章中使用的同一 Currency Converter Demo 移动应用。

在本文中,我们将了解什么是证书固定、何时使用、如何在 android 应用中实现它,以及它如何防止中间人攻击。

要固定什么?

来自同一个article我会引用:

最简单的固定方法是使用服务器的公钥或该公钥的散列,散列公钥是最灵活和可维护的方法,因为它允许证书在服务器中轮换,通过签署新的使用相同的公钥。因此,移动应用程序不必使用新的 pin 更新,因为新证书的公钥的哈希将继续与网络安全配置文件中提供的 pin 匹配。稍后我们将在讨论如何设置证书固定时看到一个示例。

实现静态证书固定

在移动应用中实现静态证书固定的最简单快捷的方法是使用Mobile Certificate Pinning Generator,它接受您要固定的域列表并为您生成正确的证书固定配置以用于Android 和 ios

给它一个要固定的域列表:

该工具会为您生成 Android 配置:

还有 iOS 配置:

该工具甚至作为说明如何将配置添加到您的移动应用程序,您可以在证书固定配置框下方找到该工具。他们还为Android 和iOS 提供了一个示例引脚测试应用程序,这是一个分步教程。

绕过证书固定

任何决定在其移动应用程序中实施证书固定的开发人员都必须了解如何绕过它,以便了解威胁模型并评估是否需要进一步的保护来防止证书固定绕过。

我写了两篇关于如何绕过 Android 上的证书固定的文章,您可以在其中一篇文章中学习如何通过提取、修改和重新打包 APK 来做到这一点,而在另一篇文章中您将学习如何使用 Frida 检测框架在运行时挂钩到移动应用程序以绕过证书固定:

Bypassing Certificate Pinning on Android via APK

在本文中,您将学习如何重新打包移动应用程序以使其信任自定义 ssl 证书。这将允许我们绕过证书固定。

How to Bypass Certificate Pinning with Frida on an Android App:

今天我将展示如何使用 Frida 检测框架在运行时挂钩到移动应用程序并检测代码以执行成功的中间人攻击,即使移动应用程序已经实现了证书锁定。

绕过证书固定并不太难,只是有点费力,并且允许攻击者详细了解移动应用程序如何与其 API 通信,然后使用相同的知识来自动化攻击或围绕它构建其他服务。

总结

尽管可以绕过证书固定,但我仍然强烈建议您在移动应用中实现它,因为它可以大大减少移动应用的攻击面。

了解如何绕过证书固定可以让您深入了解是否需要采取进一步的保护措施。动态证书固定和运行时应用程序自我保护 (RASP) 可能是您安全阶梯的下一步。

【讨论】:

感谢您的回复!这是一本非常有见地的读物!

以上是关于如何防止对 API Key 和 API Secret 的 MITM 攻击?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 Node.js API REST 应用程序对高 CPU/RAM 使用率无响应?

如何有效防止API的重放攻击(转自阿里云)

如何防止 python 请求对我的 URL 进行百分比编码?

REST API 和 API KEY

如何防止 Laravel API 处理查询字符串上的参数?

API接口如何防止参数被篡改和重放攻击?