ecapture是一款无需CA证书,就可以进行HTTPS通讯明文抓包的工具

ecapture 介绍

eBPF HOOK uprobe实现的各种用户态进程的数据捕获,无需改动原程序。

  • SSL/HTTPS数据导出功能,针对HTTPS的数据包抓取,不需要导入CA证书。
  • bash的命令捕获,HIDS的bash命令监控解决方案。
  • mysql query等数据库的数据库审计解决方案。

项目地址

https://github.com/ehids/ecapture

原理

依赖

内核版本

依赖BPF BTF 格式,仅支持linux kernel 5.8以上内核版本,即以下linux发行版。

  • CentOS 8.2
  • CentOS Stream 8.3
  • Alma 8.3
  • Fedora 32
  • Ubuntu 20.10

eBPF配置

需要内核开启BTF支持。

cat /boot/config-`uname -r` | grep BTF
CONFIG_VIDEO_SONY_BTF_MPX=m
CONFIG_DEBUG_INFO_BTF=y
CONFIG_PAHOLE_HAS_SPLIT_BTF=y
CONFIG_DEBUG_INFO_BTF_MODULES=y

eBPF技术

参考ebpf官网的介绍

68747470733a2f2f656270662e696f2f7374617469632f6f766572766965772d62663436333435356135363636666333666238343162393234306435383866662e706e67.png

 

uprobe HOOK

https的ssl hook

本项目hook了/lib/x86_64-linux-gnu/libssl.so.1.1SSL_writeSSL_read函数的返回值,拿到明文信息,通过ebpf map传递给用户进程。

Probes: []*manager.Probe{
    {
        Section:          "uprobe/SSL_write",
        EbpfFuncName:     "probe_entry_SSL_write",
        AttachToFuncName: "SSL_write",
        //UprobeOffset:     0x386B0,
        BinaryPath: "/lib/x86_64-linux-gnu/libssl.so.1.1",
    },
    {
        Section:          "uretprobe/SSL_write",
        EbpfFuncName:     "probe_ret_SSL_write",
        AttachToFuncName: "SSL_write",
        //UprobeOffset:     0x386B0,
        BinaryPath: "/lib/x86_64-linux-gnu/libssl.so.1.1",
    },
    {
        Section:          "uprobe/SSL_read",
        EbpfFuncName:     "probe_entry_SSL_read",
        AttachToFuncName: "SSL_read",
        //UprobeOffset:     0x38380,
        BinaryPath: "/lib/x86_64-linux-gnu/libssl.so.1.1",
    },
    {
        Section:          "uretprobe/SSL_read",
        EbpfFuncName:     "probe_ret_SSL_read",
        AttachToFuncName: "SSL_read",
        //UprobeOffset:     0x38380,
        BinaryPath: "/lib/x86_64-linux-gnu/libssl.so.1.1",
    },
    /**/
},

 

bash的readline hook

hook了/bin/bashreadline函数。

使用方法

安装使用,可以选择编译,也可以直接下载二进制包。 笔者环境ubuntu 21.04, linux kernel 5.10以上通用。

推荐使用UBUNTU 21.04版本的linux测试。

工具链版本

  • gcc 10.3.0
  • clang 12.0.0
  • cmake 3.18.4
  • clang backend: llvm 12.0.0

最低要求 (笔者未验证)

  • gcc 5.1 以上
  • clang 9
  • cmake 3.14

编译

git clone git@github.com:ehids/ecapture.git
cd ecapture
make
bin/ecapture

 

使用

https的无证书抓包 ssldump

执行任意https网络请求即可使用。

wget https://www.qq.com

 

演示

https://v.qq.com/txp/iframe/player.html?vid=m33278fdqt8

bash的shell捕获

ps -ef|grep foo

 

请登录后发表评论

    没有回复内容