如何通过中间人攻击窃取API密钥 - Approov
编者按:这篇文章最初发表于2019年4月,为了确保内容的准确性和全面性,已于2021年11月进行了更新。
中间人攻击(MitM)是一种常见的网络攻击方式,攻击者通过拦截通信来窃取敏感信息。在本文中,我们将学习如何通过MitM攻击窃取API密钥,并了解如何减轻此类攻击的风险。本文将以Android模拟器为例,演示如何拦截HTTPS流量并提取API密钥。
MitM攻击的设置
为了执行MitM攻击,您需要完成以下准备工作:
- 安装mitmproxy工具。
- 确保计算机和Android模拟器连接到同一WiFi网络。
- 在模拟器上设置代理。
- 获取免费的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模拟器
- 启动Android 29模拟器。
- 将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界面中,您可以查看拦截到的请求和响应数据。例如,以下是一个拦截到的请求:

通过分析请求URL和参数,您可以轻松找到API密钥的位置。
HTTPS与HTTP拦截的区别
拦截HTTPS请求需要在设备或模拟器中安装mitmproxy证书颁发机构(CA),而拦截HTTP请求则无需此步骤。
尽管HTTPS可以加密通信,但在MitM攻击中,攻击者可以通过伪造的CA证书解密流量。因此,仅依赖HTTPS并不能完全保护API密钥。
缓解MitM攻击
为了减轻MitM攻击的风险,可以采取以下措施:
- 证书固定(Certificate Pinning):在应用程序中固定可信证书,防止伪造的CA证书生效。
- 动态密钥管理:避免在应用程序中硬编码API密钥,使用动态方式获取密钥。
- 网络安全配置:在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
最新文章
- 为什么要使用Google My Business Reviews API
- 2025年7月第2周GitHub热门API推荐:rustfs/rustfs、pocketbase/pocketbase、smallcloudai/refact
- API设计的首要原则
- 左手用R右手Python系列——百度地图API调用与地址解析/逆解析
- 实测:阿里云百炼上线「全周期 MCP 服务」,AI 工具一站式托管
- 什么是GitHubActions实现开源项目的自动化
- 使用 Whisper API 通过设备麦克风把语音转录为文本
- 如何通过Password Manager(密码管理器)的API调用保护账户安全
- 如何为现代图形API编写渲染器 | Clean Rinse
- Python + BaiduTransAPI :快速检索千篇英文文献(附源码)
- Nexus API 的入门教程与使用指南
- API 规范:设计与最佳实践