这款免费工具无须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. 参考链接


相关推荐
Lws2 小时前
CS144 lab0(个人理解)
网络协议
C++忠实粉丝6 小时前
计算机网络socket编程(2)_UDP网络编程实现网络字典
linux·网络·c++·网络协议·计算机网络·udp
添砖java_8576 小时前
UDP数据报套接字编程
网络·网络协议·udp
lxkj_20248 小时前
修改ffmpeg实现https-flv内容加密
网络协议·https·ffmpeg
千羽星弦9 小时前
Apache和HTTPS证书的生成与安装
网络协议·https·apache
程序猿小D12 小时前
第三百三十节 Java网络教程 - Java网络UDP服务器
java·开发语言·网络·网络协议·udp·多线程
是理不是里_18 小时前
常见的网络协议汇总(涵盖了不同的网络层次)
网络·网络协议
Peter_chq1 天前
【计算机网络】HTTP协议
linux·c语言·开发语言·网络·c++·后端·网络协议
琢瑜1 天前
TCP 三次握手和四次挥手
网络·网络协议·tcp/ip·linux网络编程
可涵不会debug1 天前
【Linux|计算机网络】HTTPS工作原理与安全机制详解
linux·网络协议·http·网络安全·https