Skip to content

Latest commit

 

History

History
258 lines (178 loc) · 9.99 KB

File metadata and controls

258 lines (178 loc) · 9.99 KB

eCapture Logo

汉字 | English

GitHub stars GitHub forks CI Github Version Home Page QQ 群

eCapture(旁观者): 基于eBPF技术实现SSL/TLS加密的明文捕获,无需CA证书。

Tip

支持Linux系统内核x86_64 4.18及以上版本,aarch64 5.5及以上版本; 需要ROOT权限或特定的 Linux capabilities; 不支持Windows、macOS系统;



介绍

eCapture的汉字名字为旁观者,即「当局者迷,旁观者清」,与其本身功能旁路、观察 契合,且发音与英文有相似之处。eCapture使用eBPF Uprobe/Traffic Control技术,实现各种用户空间/内核空间的数据捕获,无需改动原程序。

快速上手

下载

ELF可执行文件

Important

支持 Linux/Android的x86_64/aarch64 CPU架构。

下载 release 的二进制包,可直接使用。

Docker容器镜像

Tip

仅支持Linux x86_64/aarch64。

# 拉取镜像
docker pull gojue/ecapture:latest
# 运行
docker run --rm --privileged=true --net=host -v ${宿主机文件路径}:${容器内路径} gojue/ecapture ARGS

⚠️ 安全提醒: --privileged=true 会授予容器完整的宿主机访问权限。在生产环境中,建议使用特定的 capabilities 替代。参阅 最小权限指南

小试身手

捕获基于Openssl动态链接库加密的网络通讯。

sudo ecapture tls

eCapture 会自动检测系统的 OpenSSL 库并开始捕获明文。当你发起 HTTPS 请求时(如 curl https://baidu.com),捕获到的请求和响应将会显示:

...
INF module started successfully. moduleName=EBPFProbeOPENSSL
??? UUID:233479_233479_curl_5_1_39.156.66.10:443, Name:HTTPRequest, Type:1, Length:73
GET / HTTP/1.1
Host: baidu.com
Accept: */*
User-Agent: curl/7.81.0
...

📄 完整的输出示例请参阅 docs/example-outputs.md

模块介绍

eCapture 有8个模块,分别支持openssl/gnutls/nspr/boringssl/gotls等类库的TLS/SSL加密类库的明文捕获、Bash、Mysql、PostGres软件审计。

  • bash 捕获bash命令行的输入输出
  • gnutls 捕获基于gnutls类库加密通讯的明文内容
  • gotls 捕获使用Golang语言编写的,基于内置crypt类库实现TLS/HTTPS加密通讯的明文内容
  • mysqld 捕获Mysqld的SQL查询,适用于数据库审计场景,支持Mysqld 5.6/5.7/8.0等
  • nss 捕获基于nss类库加密通讯的明文内容
  • postgres 支持postgres 10+的数据库审计,捕获查询语句
  • tls 捕获基于Openssl/Boringssl的加密通讯的明文内容,支持Openssl 1.0.x/1.1.x/3.x以及更新版本,支持BoringSSL所有发行版本

你可以通过ecapture -h来查看这些自命令列表。

openssl 模块

执行sudo ecapture -h查看详细帮助文档。

eCapture默认查找/etc/ld.so.conf文件,查找SO文件的加载目录,并查找openssl等动态链接路位置。你也可以通过--libssl 参数指定动态链接库路径。

如果目标程序使用静态编译方式,则可以直接将--libssl参数设定为该程序的路径。

openssl模块支持3种捕获模式

  • pcap/pcapng模式,将捕获的明文数据以pcap-NG格式存储。
  • keylog/key模式,保存TLS的握手密钥到文件中。
  • text模式,直接捕获明文数据,输出到指定文件中,或者打印到命令行。

Pcap 模式

支持了TLS加密的基于TCP的http 1.0/1.1/2.0应用层协议, 以及基于UDP的 http3 QUIC应用层协议。 你可以通过-m pcap-m pcapng参数来指定,需要配合--pcapfile-i参数使用。其中--pcapfile参数的默认值为ecapture_openssl.pcapng

sudo ecapture tls -m pcap -i eth0 --pcapfile=ecapture.pcapng tcp port 443

📄 完整的 pcapng 模式输出请参阅 docs/example-outputs.md

将捕获的明文数据包保存为pcapng文件,再使用Wireshark打开查看,之后就可以看到明文的网络包了。

keylog 模式

你可以通过-m keylog-m key参数来指定,需要配合--keylogfile参数使用,默认为ecapture_masterkey.log。 捕获的openssl TLS的密钥Master Secret信息,将保存到--keylogfile中。你也可以同时开启tcpdump抓包,再使用Wireshark打开,设置Master Secret路径,查看明文数据包。

sudo ecapture tls -m keylog -keylogfile=openssl_keylog.log

也可以直接使用tshark软件实时解密展示。

tshark -o tls.keylog_file:ecapture_masterkey.log -Y http -T fields -e http.file_data -f "port 443" -i eth0

text 模式

sudo ecapture tls -m text 将会输出所有的明文数据包。(v0.7.0起,不再捕获SSLKEYLOG信息。)

gotls 模块

与openssl模块类似。

验证方法:

cfc4n@vm-server:~$# uname -r
4.18.0-305.3.1.el8.x86_64
cfc4n@vm-server:~$# cat /boot/config-`uname -r` | grep CONFIG_DEBUG_INFO_BTF
CONFIG_DEBUG_INFO_BTF=y

启动eCapture

sudo ecapture gotls --elfpath=/home/cfc4n/go_https_client --hex

启动该程序:

确保该程序会触发https请求。

/home/cfc4n/go_https_client

更多帮助

sudo ecapture gotls -h

其他模块

eCapture 还支持其他模块,如bashmysqlnsspostgres等,你可以通过ecapture -h查看详细帮助文档。

使用演示

介绍文章

eCapture:无需CA证书抓https明文通讯

视频:Linux上使用eCapture

eCapture User Manual

视频:Android上使用eCapture

eCapture User Manual

eCaptureQ 界面程序

eCaptureQ是 eCapture 的跨平台图形界面客户端,将 eBPF TLS 抓包能力可视化呈现。采用 Rust + Tauri + React 技术栈构建,提供实时响应式界面,无需 CA 证书即可轻松分析加密流量。让复杂的 eBPF 抓包技术变得简单易用。 支持两种模式:

  • 集成模式:Linux/Android 一体化运行
  • 远程模式:Windows/macOS/Linux 客户端连接远程 eCapture 服务

其他事件转发项目

事件转发优秀项目

视频演示

eCaptureQ.Demo.mp4

🔗 GitHub 仓库

Protobuf 协议说明

关于 eCapture/eCaptureQ 使用的 Protobuf 日志模式的详细信息,请参见:

星标成长曲线

星标成长曲线

安全与运维

贡献

参考 CONTRIBUTING的介绍,提交缺陷、补丁、建议等,非常感谢。

二次开发

自行编译

你可以定制自己想要的功能,比如设定uprobe 的偏移地址,用来支持被静态编译的Openssl类库。编译方法可以参考 编译指南 的介绍。

动态修改配置

当eCapture运行后,你可以通过HTTP接口动态修改配置,参考HTTP API 文档

事件转发

eCapture支持多种事件转发方式,你可以将事件转发至Burp Suite等抓包软件,详情参考事件转发API 文档

微信公众号

感谢

本项目获得 JetBrains IDE 许可证的支持。感谢 JetBrains 对开源社区的贡献。

JetBrains 徽标