MASTG-TECH-0119: 在应用层通过 Hook 网络 API 拦截 HTTP 流量
根据您在测试应用时的目标,有时只需在流量到达网络层之前或在应用中接收到响应时对其进行监控就足够了。
这意味着,如果您只想确定某些敏感数据是否正在传输到网络,则无需部署完整的 MITM 攻击(包括 ARP 欺骗攻击等)。 通过这种方法,您不会干扰任何 TLS 验证或锁定。
您可以使用Frida 作为替代方案
此技术也适用于:
- 拦截使用自定义网络堆栈的应用中的流量。
- 拦截使用特定跨平台框架(如 Flutter)构建的应用中的流量。
- Android: 拦截 Flutter HTTPS 流量
- iOS: 拦截 Flutter HTTPS 流量
- 拦截其他类型的流量,如 BLE、NFC 等,在这些情况下,部署 MITM 攻击可能非常昂贵和复杂。
- 分析诸如 MQTT 和 CoAP 等协议,这些协议可能需要更专业的拦截技术。
- 监控 WebSocket 流量,这可能也需要独特的拦截策略。
您只需挂钩正确的函数,例如 OpenSSL 中的 SSL_write
和 SSL_read
。
这对于使用标准 API 库函数和类的应用程序来说效果很好; 但是,可能存在一些缺点
- 该应用可能实现自定义网络堆栈,您必须花时间分析该应用以找出您可以使用的 API。请参阅这篇博文中的“使用签名分析搜索 OpenSSL 跟踪”部分。
- 制作正确的挂钩脚本以重新组装 HTTP 响应对(跨多个方法调用和执行线程)可能非常耗时。您可能会发现现成的脚本,甚至适用于替代网络堆栈的脚本,但根据应用和平台的不同,这些脚本可能需要大量维护并且可能并非总是有效。
请参阅一些示例
- “通用拦截。如何绕过 SSL Pinning 并监控任何应用程序的流量”,章节“在传输之前抓取有效负载”和“在加密之前抓取有效负载”
- “Frida 作为网络跟踪的替代方案”