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有三个功能模块:
- tls/ssl明文数据捕获:可捕获基于Openssl/Boringssl的加密通讯的明文内容,主要用于基于tls/ssl解密需求的运维监控、故障排查、抽样分析场景;
- bash命令审计:可用于安全领域的bash入侵发现场景;
- 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加密类库:
- openssl:动态链接库名字为libssl.so
- gnutls:动态链接库名字为libgnutls.so
- nss/nspr:动态链接库名字为libnspr4.so
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. 参考链接
- https://ecapture.cc/zh/guide/how-it-works.html
- https://ebpf.io/
- https://mp.weixin.qq.com/s/DvTClH3JmncpkaEfnTQsRg