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


相关推荐
ACGkaka_2 小时前
抓包工具(三)Wireshark代理抓包Java程序的HTTPS请求
java·https·wireshark
哑巴语天雨3 小时前
前端面试-网络协议篇
websocket·网络协议·http·面试·https
ktkiko114 小时前
Websocket——心跳检测
网络·websocket·网络协议
小梁不秃捏6 小时前
HTTP 常见状态码技术解析(应用层)
网络·网络协议·计算机网络·http
九天轩辕8 小时前
HTTPS 通信流程
https
yourkin6668 小时前
HTTPS(下)
服务器·网络协议·https
元气满满的热码式9 小时前
logstash中的input插件(http插件,graphite插件)
网络·网络协议·http·elasticsearch·云原生
豪宇刘11 小时前
从三个维度了解 RPC(Remote Procedure Call,远程过程调用)
网络·网络协议·rpc
人工干智能17 小时前
科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal
网络协议·tcp/ip·电脑
anddddoooo21 小时前
域内证书维权
服务器·网络·网络协议·安全·网络安全·https·ssl