Note:
支持Linux系统内核x86_64 4.18及以上版本,aarch64 5.5及以上版本;
不支持Windows、macOS系统。
官方网站: https://ecapture.cc
eCapture的中文名字为旁观者,即「当局者迷,旁观者清」,与其本身功能旁路、观察契合,且发音与英文有相似之处。
eBPF Uprobe
/Traffic Control
实现的各种用户空间/内核空间的数据捕获,无需改动原程序。
- SSL/HTTPS数据导出功能,针对HTTPS的数据包抓取,不需要导入CA证书。
- 支持go tls类库的明文捕获,即使用golang语言编写的https/tls程序的加密通讯。
- bash的命令捕获,HIDS的bash命令监控解决方案。
- mysql query等数据库的数据库审计解决方案。
下载 release 的二进制包,可直接使用。
系统配置要求
- 系统linux kernel版本必须高于4.18。
- 开启BTF BPF Type Format (BTF) 支持。 (可选, 2022-04-17)
Note
需要ROOT权限执行。
执行./ecapture -h
查看详细帮助文档。
eCapture默认查找/etc/ld.so.conf
文件,查找SO文件的加载目录,并查找openssl
等动态链接路位置。你也可以通过--libssl
参数指定动态链接库路径。
如果目标程序使用静态编译方式,则可以直接将--libssl
参数设定为该程序的路径。
./ecapture tls -i eth0 -w pcapng -p 443
将捕获的明文数据包保存为pcapng文件,可以使用Wireshark
打开查看。
./ecapture tls
将会输出所有的明文数据包,并捕获openssl TLS的密钥Master Secret
文件到当前目录的ecapture_masterkey.log
中。你也可以同时开启tcpdump
抓包,再使用Wireshark
打开,设置Master Secret
路径,查看明文数据包。
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
执行任意https网络请求即可使用。
curl https://www.qq.com
# 由于curl等工具依赖于原生openssl的安装,用以下方式测试,也可以重新编译安装相关的工具来测试
vm@vm-server:~$ ldd /usr/local/bin/openssl
linux-vdso.so.1 (0x00007ffc82985000)
libssl.so.52 => /usr/local/lib/libssl.so.52 (0x00007f1730f9f000)
libcrypto.so.49 => /usr/local/lib/libcrypto.so.49 (0x00007f1730d8a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1730b62000)
/lib64/ld-linux-x86-64.so.2 (0x00007f17310b2000)
# 使用libssl配置libssl.so的路径
vm@vm-server:~$ sudo ./ecapture tls --libssl="/usr/local/lib/libssl.so.52" --hex
# 另一个终端使用如下命令开启测试,可输入一些字符串,然后回车,观察ecapture的抓包输出
vm@vm-server:~$ /usr/local/bin/openssl s_client -connect www.qq.com:443
# boringssl的测试,同理
/path/to/bin/bssl s_client -connect www.qq.com:443
ps -ef | grep foo
自行编译对编译环境有要求,参考原理章节的介绍。
参考ebpf官网的介绍
针对个别程序使用的openssl类库是静态编译,也可以自行修改源码实现。若函数名不在符号表里,也可以自行反编译找到函数的offset偏移地址,填写到UprobeOffset
属性上,进行编译。
笔者环境ubuntu 21.04
, Linux Kernel 4.18以上通用。
推荐使用UBUNTU 20.04
及以上版本的Linux测试。
Note
Android版本编译方法见 eCapture旁观者:Android HTTPS明文抓包
- golang 1.18 以上
- clang 9.0 以上
- cmake 3.18.4 以上
- clang backend: llvm 9.0 以上
- kernel config:CONFIG_DEBUG_INFO_BTF=y (可选,2022-04-17增加)
如果你使用的是ubuntu 20.04以及更新版本,可以使用一条命令即可完成编译环境的初始化。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/gojue/ecapture/master/builder/init_env.sh)"
编译环境除了上面工具链版本
列出的软件外,还需要以下软件,请自行安装。
- linux-tools-common
- linux-tools-generic
- pkgconf
- libelf-dev
克隆仓库代码,并进行编译
git clone git@github.com:gojue/ecapture.git
cd ecapture
make
bin/ecapture
如果你在中国,可以在make
编译之前,设定GOPROXY来加速eCapture依赖的go package的安装。
export GOPROXY=https://goproxy.cn
2022/04/17起,eCapture支持了未开启BTF的系统编译,编译指令为:make nocore
,即在不支持BTF的Linux上也可以正常工作。
git clone git@github.com:gojue/ecapture.git
cd ecapture
make nocore
bin/ecapture
参考 CONTRIBUTING的介绍,提交issue、PR等,非常感谢。