如何通过中间人攻击窃取API密钥 - Approov

作者:API传播员 · 2025-11-27 · 阅读时间:5分钟

编者按:这篇文章最初发表于2019年4月,为了确保内容的准确性和全面性,已于2021年11月进行了更新。

中间人攻击(MitM)是一种常见的网络攻击方式,攻击者通过拦截通信来窃取敏感信息。在本文中,我们将学习如何通过MitM攻击窃取API密钥,并了解如何减轻此类攻击的风险。本文将以Android模拟器为例,演示如何拦截HTTPS流量并提取API密钥。


MitM攻击的设置

为了执行MitM攻击,您需要完成以下准备工作:

  1. 安装mitmproxy工具。
  2. 确保计算机和Android模拟器连接到同一WiFi网络。
  3. 在模拟器上设置代理。
  4. 获取免费的API密钥,并在模拟器上构建和安装货币转换器演示应用程序。

克隆货币转换器演示

在进行攻击前,您需要获取一个货币转换器演示应用程序的代码库,并将其部署到模拟器中。

安装mitmproxy

如果尚未安装mitmproxy,可以参考其官方文档完成安装。如果您的系统支持Docker,也可以使用官方提供的Docker镜像。

使用Docker安装

通过以下命令运行Docker镜像,并使用演示目录下的bash脚本启动mitmproxy:

./stack

运行后,您可以通过以下命令进行测试,确保mitmproxy运行正常:

./stack mitmproxy --version

配置WiFi网络

确保计算机和Android模拟器连接到同一WiFi网络。然后,通过以下命令获取WiFi网络的IP地址:

ifconfig

或者在Ubuntu系统中,可以通过以下路径获取WiFi设置中的IP地址:

设置 > Wi-Fi > Visible Networks

记录IP地址(例如:10.0.3.55),稍后将在模拟器中配置代理时使用。

启动mitmproxy

在终端中运行以下命令,启动mitmproxy并监听WiFi网络的8080端口:

mitmproxy --listen-port 8080

启动后,您将看到mitmproxy的CLI界面。

配置Android模拟器

  1. 启动Android 29模拟器。
  2. 将mitmproxy生成的证书添加到模拟器中,以便拦截HTTPS流量。

设置代理

通过以下命令启动模拟器并设置代理:

emulator -avd  -http-proxy http://10.0.3.55:8080

10.0.3.55替换为您的WiFi IP地址。

安装演示应用程序

获取免费的API密钥后,构建货币转换器应用程序并安装到模拟器中。成功安装后,您将看到如下界面:

货币转换器演示界面


MitM攻击行动

启动应用程序并尝试进行货币转换操作,例如将1000英镑兑换为欧元。此时,mitmproxy将拦截应用程序向第三方API发送的HTTPS请求。

在mitmproxy CLI界面中,您可以查看拦截到的请求和响应数据。例如,以下是一个拦截到的请求:

拦截的HTTPS请求

通过分析请求URL和参数,您可以轻松找到API密钥的位置。


HTTPS与HTTP拦截的区别

拦截HTTPS请求需要在设备或模拟器中安装mitmproxy证书颁发机构(CA),而拦截HTTP请求则无需此步骤。

尽管HTTPS可以加密通信,但在MitM攻击中,攻击者可以通过伪造的CA证书解密流量。因此,仅依赖HTTPS并不能完全保护API密钥。


缓解MitM攻击

为了减轻MitM攻击的风险,可以采取以下措施:

  1. 证书固定(Certificate Pinning):在应用程序中固定可信证书,防止伪造的CA证书生效。
  2. 动态密钥管理:避免在应用程序中硬编码API密钥,使用动态方式获取密钥。
  3. 网络安全配置:在Android应用中通过网络安全配置文件限制证书来源。

尽管证书固定可以有效防止MitM攻击,但其实施和维护具有一定挑战性。此外,攻击者仍可能通过高级技术绕过证书固定。


结论

MitM攻击是一种常见且危险的攻击方式,即使使用高级技术(如JNI/NDK)隐藏API密钥,也无法完全避免此类攻击。通过本文的演示,我们可以清楚地看到MitM攻击的威力以及API密钥的脆弱性。

为了保护API密钥,开发者需要结合多种安全技术,如证书固定、动态密钥管理和网络安全配置。尽管这些技术可能增加开发和维护成本,但它们是确保API安全的重要手段。

如果您对MitM攻击的防御技术感兴趣,可以阅读我们的相关文章《在Android上使用证书固定来保护HTTPS》。


原文链接: https://approov.io/blog/steal-that-api-key-with-a-man-in-the-middle-attack