这款免费工具无须CA证书也能捕获HTTPS明文流量,原理大揭秘!

Wireshark、Burp Suite、tcpdump等工具在没有CA证书的情况下只能抓到加密后的流量,无法捕获TLS的明文。而将下来我们将会介绍一款工具,它只需要root权限,即可捕获明文的HTTPS通信包。

1. eCapture介绍

eCapture是一个C语言开发的开源项目,于2022年3月创建,一经发布广受大家喜爱,截止目前已经超过1.3万个Star。它是基于eBPF技术的先进网络数据捕获工具,能够无需CA证书即可捕获HTTPS和TLS通信的明文内容,非常适合于网络监控、安全审计和故障排查等场景。

eCapture的中文名字为旁观者,意为"当局者迷,旁观者清",与其本身功能旁路、观察 契合。

核心特点

  • 用户态捕获:主要在用户态进行数据捕获,减少了对系统内核的依赖;
  • 内核态支持:内核态代码使用C语言编写,利用eBPF技术进行高效的数据捕获;
  • 无依赖部署:编译后的程序无需其他依赖即可运行,简化了部署过程;
  • 多语言支持

eCapture有三个功能模块:

  1. tls/ssl明文数据捕获:可捕获基于Openssl/Boringssl的加密通讯的明文内容,主要用于基于tls/ssl解密需求的运维监控、故障排查、抽样分析场景;
  2. bash命令审计:可用于安全领域的bash入侵发现场景;
  3. mysqld数据库审计:适用于数据库审计场景,尤其是做数据安全、数据防泄漏,甚至入侵检测等。

注:以上三个功能均支持自定义扩展。

2. eCapture工作原理

eCapture主要利用了eBPF和HOOK技术:

  • eBPF加载机制:利用eBPF技术进行数据包的捕获和处理,eBPF程序是事件驱动的,当内核或应用程序通过某个挂钩点时运行。预定义的钩子包括系统调用、函数入口/出口、内核跟踪点、网络事件和其他几个;
  • HOOK机制:使用eBPF uprobe相关函数进行用户态函数的HOOK,支持对不同编程语言实现的加密库进行HOOK,如OpenSSL、GnuTLS、NSS/NSPR。

eBPF(Extended Berkeley Packet Filter)是一项革命性的技术,起源于Linux内核,可以在特权上下文(如操作系统内核)中运行沙盒程序。它用于安全有效地扩展内核的功能,而不需要更改内核源代码或加载内核模块。

eBPF允许沙盒程序在操作系统中运行,这意味着应用程序开发人员可以运行eBPF程序,在运行时为操作系统添加额外功能。然后,操作系统保证安全性和执行效率,就像在即时(JIT)编译器和验证引擎的帮助下进行本机编译一样。这导致了一波基于eBPF的项目,覆盖了广泛的应用场景,包括下一代网络、可观测性和安全功能。

要想了解eBPF的详细加载机制,可参阅https://ebpf.io/what-is-ebpf/。

如工作原理图所示,在用户态的加密解密函数中下钩子。tcpdump(libpcap)是在接收到数据包,XDP处理后克隆数据包(packet),发送给用户态进程。与eCapture工作的所在层不一样。

3. 安装及使用

目前仅支持 Linux 和 Android 两种操作系统。

3.1. 安装

进入开源项目下载界面:https://github.com/gojue/ecapture/releases,根据自己电脑的操作系统和架构类型选择相应的二进制安装包。

下载后解压软件包,无须额外安装其他依赖即可运行

sh 复制代码
./ecapture 

3.2. 使用介绍:以HTTPS流量捕获为例

执行eCapture tls命令可用于启动tls/ssl模块,该模块支持三类tls/ssl加密类库:

eCapture tls可捕获基于以上三种动态链接库加密的网络通讯。

接下来我们使用火狐浏览器(firefox)发送https请求来利用eCapture捕获明文流量。

首先确认下firefox使用的tls加密类库,通过执行命令ps -ef |grep firefox获取firefox的进程ID,从下图中可以得知ID为2908

接着通过命令pldd 2908 | grep -E "tls|ssl|nspr|nss"即可确认firefox使用的tls加密类库。

如果firefox加密类库与eCapture默认使用的库一致,最后则执行命令./ecapture tls --hex启动流量监控,可以看到控制台打印出了明文内容。

若系统中firefox加密类库与eCapture默认使用的库不一致,可以通过参数手工指定,具体可参阅官方文档。

虽然可以通过eCapture捕获明文流量,在高并发场景下会存在性能问题,有用户反馈在执行一千万次SSL_write写数据的场景,不开启eCapture耗时6秒,而开启eCapture后却要30秒,性能耗时增大5倍以上。

其实不仅是eCapture,其他基于HOOK技术实现的监测工具均会面临性能问题,需要在HOOK点设置、监控项与性能中做出取舍​。

4. 参考链接


相关推荐
huangdengji1 小时前
基于openresty反向代理、dns劫持、实现对http请求、响应内容抓包
网络协议·http·openresty
00后程序员张2 小时前
混淆 iOS 类名与变量名的实战指南,多工具组合把混淆做成工程能力(混淆 iOS 类名变量名/IPA 成品混淆Ipa/Guard CLI 实操)
android·ios·小程序·https·uni-app·iphone·webview
記億揺晃着的那天2 小时前
解密 HTTPS:从握手到安全通信
网络协议·安全·https·ssl证书
夜郎king3 小时前
UniHttp/Jsoup Https SSL证书验证失败:SunCertPathBuilderException解决方案详解
https·ssl·jsoup访问https·unihttp访问https
宁雨桥7 小时前
WebSocket 核心 API 速查表
网络·websocket·网络协议
打不了嗝 ᥬ᭄7 小时前
【Linux】网络层协议
linux·网络·c++·网络协议·http
进击的圆儿7 小时前
HTTP协议深度解析:从基础到性能优化
网络协议·http·性能优化
才聚PMP7 小时前
关于开启NPDP项目2025年第二次续证工作的通知
网络协议·https·ssl
一叶飘零_sweeeet10 小时前
手写 RPC 框架
java·网络·网络协议·rpc
周杰伦fans19 小时前
.NET Core WebAPI 中 HTTP 请求方法详解:从新手到精通
网络协议·http·.netcore