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

eCapture介绍

eCapture是一款基于eBPF技术实现的用户态数据捕获工具。不需要CA证书,即可捕获https/tls的通讯明文。

f2e8686d6c55269758ce9fec3a48372b.png

项目在2022年3月中旬创建,一经发布,广受大家喜爱,至今不到两周已经1200多个Star。

6f9ab93db072f9bcd91e367fc88233b2.png

作用

  1. 不需要CA证书,即可捕获HTTPS/TLS通信数据的明文。

  2. 在bash审计场景,可以捕获bash命令。

  3. 数据库审计场景,可以捕获mysqld/mariadDB的SQL查询。

官网

代码仓库见:https://github.com/ehids/ecapture

产品架构

eCapture系统用户态程序使用Golang语言开发,具有良好的系统兼容性,无依赖快速部署,更适合云原生场景。内核态代码使用C编写,使用clang/llvm编译,生产bpf字节码后,采用go-bindata转化为golang语法文件,之后采用ehids/ebpfmanager类库,调用bpf syscall进行加载、HOOK、map读取。golang编译后,无其他任何依赖即可运行,兼容linux kernel 4.18以上所有版本。

2d23698dd99f0c66d047c01403d01974.png

eBPF加载机制

关于eBPF详细加载机制,可到https://ebpf.io/ 查阅相关原理。

80e63f412fd800ea915a1505d4fd81bd.png

实现原理

如工作原理的图所示,在用户态的加密解密函数中下钩子。tcpdump(libpcap)是在数据包接收到,XDP处理后,进行clone packet,进行包的复制,发送给用户态进程。二者工作的所在层不一样。

功能介绍

eCapture有三个模块

  1. tls/ssl明文数据捕获

  2. bash命令审计

  3. mysqld数据库审计

第一个功能适用于基于tls/ssl解密需求的运维监控、故障排查、抽样分析场景。

第二个功能适用于安全领域的bash入侵发现场景,这里只是简单的功能,可以在此基础上增加其他功能。

第三个功能适用于数据库审计场景,尤其是做数据安全、数据防泄漏,甚至入侵检测等。同样,可以在此基础上扩充其他功能。

f8a7d5c2c651b3a4e49687307c6790d0.png

查看其使用说明,如下:

cfc4n@vm-desktop:~/ehids/ecapture$ ./bin/ecapture
NAME:ecapture - capture text SSL content without CA cert by ebpf hook.USAGE:ecapture [flags]VERSION:0.1.5-20220325-47edbedCOMMANDS:bash  capture bash commandhelp  Help about any commandmysqld56 capture sql queries from mysqld >5.6 .tls  alias name:openssl , use to capture tls/ssl text content without CA cert.DESCRIPTION:ecapture是一款无需安装CA证书,即可抓去HTTPS、TLS等明文数据包的工具。也可以捕获bash的命令,适用于安全审计场景。包括mysqld的数据库审计等。仓库地址: https://github.com/ehids/ecaptureOPTIONS:--debug[=false] enable debug logging-h, --help[=false] help for ecapture--hex[=false] print byte strings as hex encoded strings-p, --pid=0  if target_pid is 0 then we target all pids

其中,有四个全局参数,分别是

  • --debug , 用于启动调试日志

  • --help  , 查看帮助

  • --hex ,按照hex模式打印字符,用于查看不可见字符

  • --pid ,用于针对特定进程进行数据捕获

HOOK机制

eCapture采用eBPF uprobe相关函数进行HOOK,故需要目标用户态函数信息,包含函数符号表(symbol table),函数偏移地址(offset)。在大部分linux发行版中,使用的二进制可执行文件(ELF)都是包含符号表的;少部分发行版,会去掉ELF中的符号表。那么针对这种场景,就需要用户自行定位目标函数所在ELF/SO中的偏移地址,通过工具的参数来指定。

对于ELF文件,可以将目标类库静态编译到自身,也可以通过动态链接库的方式引用。那么对于这两种形式,eCapture根据不同场景进行自动查找。若查找不到,用户可以通过命令行参数指定。

故eCapture支持HOOK ELF,以及HOOK SO两种模式。会自动分析ELF文件,读取.dynamic.dynsym等段信息,查找相关链接库名以及函数名、偏移地址。

查找原理如下图:

c06ed3714709d3d5716cc5725857cadb.png

tls/ssl

ecapture tls命令用于启动tls/ssl模块,支持了三类tls/ssl加密类库,分别是

  • openssl ,动态链接库名字为libssl.so

  • gnutls ,动态链接库名字为libgnutls.so

  • nss/nspr ,动态链接库名字为libnspr4.so

d334ca3034108f376ef5459002bf136e.png

在不同的linux发行版中,因为各种原因,会选择不同的类库。比如wget程序,在ubuntu跟centos中就会使用不同的类库。有的是openssl,有的是gnutls,甚至两个库都引入了。

具体情况,你可以使用ldd $ELF_PATH | grep -E "tls|ssl|nspr|nss"来查看一个ELF文件使用类库情况。

cfc4n@vm-desktop:~$ ldd `which wget` |grep -E "tls|ssl|nspr|nss"libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f50699f6000)

对于firefox、chrome这种进程,需要在程序启动后才能看到tls类库依赖情况,那么,你可以使用sudo pldd $PID | grep -E "tls|ssl|nspr|nss" 来查看。

cfc4n@vm-desktop:~$ ps -ef|grep firefox
cfc4n       6846    1432 45 17:50 ?        00:00:04 /usr/lib/firefox/firefox -new-window
cfc4n@vm-desktop:~$ sudo pldd 6846 |grep -E "tls|ssl|nspr|nss"
/usr/lib/firefox/libnspr4.so
/usr/lib/firefox/libnssutil3.so
/usr/lib/firefox/libnss3.so
/usr/lib/firefox/libssl3.so
/lib/x86_64-linux-gnu/libnss_files.so.2
/lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2
/lib/x86_64-linux-gnu/libnss_dns.so.2
/usr/lib/firefox/libnssckbi.so

eCapture的tls模块命令行参数如下,用户可以使用默认配置外,也可以根据自己环境自行指定。

OPTIONS:--curl=""  curl or wget file path, use to dectet openssl.so path, default:/usr/bin/curl--firefox="" firefox file path, default: /usr/lib/firefox/firefox.--gnutls="" libgnutls.so file path, will automatically find it from curl default.-h, --help[=false] help for tls--libssl="" libssl.so file path, will automatically find it from curl default.--nspr=""  libnspr44.so file path, will automatically find it from curl default.--wget=""  wget file path, default: /usr/bin/wget.

同时,使用方法也比较简单,./ecapture tls --hex命令即可。

74370e92681f081c3000150e9d910d1d.png

在linux上,firefox程序中,有很多通讯都使用了/usr/lib/firefox/libnspr4.so,但实际上业务请求是可以通过Socket Thread进程来发送的。可以通过这个特点来过滤,对于chrome程序,相信细心的你,也能搞定。

005cfd0c4c93e48ad12f58b12af98170.png

bash

笔者在安全部门工作,接到过bash审计需求,其实现方法无非是修改系统类库、使用内核模块等技术实现,对系统稳定性有一定风险。基于eBPF技术实现,可以避开这些问题。这里的bash命令的监控,是作为eBPF技术在安全审计场景中的一个探索。

eCapture在实现时首先查找ENV的$SHELL值,作为bash的二进制文件路径进行HOOK。对于bash加载了libreadline.so的场景,也会自动分析,进行符号表查找、offset定位,再进行HOOK。

bash模块的参数有三个,用户可以自定义bashreadlineso的路径。

OPTIONS:--bash=""  $SHELL file path, eg: /bin/bash , will automatically find it from $ENV default.-h, --help[=false] help for bash--readlineso="" readline.so file path, will automatically find it from $BASH_PATH default.
7894918c8431690a4f58960b24a3ea48.png

mysql/mariadb

与bash模块一样,也是作为数据库审计的一个探索。笔者环境为ubuntu 12.04,mysqld也因为协议关系,使用了衍生的MariadDB,用户也可以根据自己实际场景,使用命令行参数进行指定。

mysqld模块,核心原理是HOOK了dispatch_command函数:

  • 第一个参数为CMD类型,值为COM_QUERY时,为查询场景,即审计需求的查询类型。

  • 第二个参数是THD的结构体,在这里我们用不到。

  • 第三个是查询的SQL语句

  • 第四个参数是SQL语句的长度

// https://github.com/MariaDB/server/blob/b5852ffbeebc3000982988383daeefb0549e058a/sql/sql_parse.h#L112
dispatch_command_return dispatch_command(enum enum_server_command command, THD *thd,char* packet, uint packet_length, bool blocking = true);

mysqld审计模块参数如下:

OPTIONS:-f, --funcname=""   function name to hook-h, --help[=false]   help for mysqld56-m, --mysqld="/usr/sbin/mariadbd" mysqld binary file path, use to hook--offset=0   0x710410

其中,--mysqld是用来指定mysqld的路径。mysqld二进制程序符号表里虽然有dispatch_command信息,但dispatch_command这个函数名每次编译都是变化的,故不能写死。

eCapture的查找方式是读取mysqld二进制的.dynamic段信息,正则语法\w+dispatch_command\w+去匹配所有符号信息,找到其函数名、偏移地址,再使用。

你也可以通过objdump命令来查找,再通过命令行参数自行指定funcname。

mariadbd version : 10.5.13-MariaDB-0ubuntu0.21.04.1 objdump -T /usr/sbin/mariadbd |grep dispatch_command 0000000000710410 g    DF .text 0000000000002f35  Base        _Z16dispatch_command19enum_server_commandP3THDPcjbb

即offset为0x710410,函数名为_Z16dispatch_command19enum_server_commandP3THDPcjbb

dae8249dc7b00a9fed5ef599adf44521.png

使用

下载二进制包

eCapture发布在https://github.com/ehids/ecapture/releases ,目前最新版为eCapture v0.1.5

可在linux kernel 4.18以上版本运行。

二进制包地址:

https://github.com/ehids/ecapture/releases/download/v0.1.5/ecapture_v0.1.5.zip

国内加速地址:https://github.do/https://github.com/ehids/ecapture/releases/download/v0.1.5/ecapture_v0.1.5.zip

自行编译

代码仓库在https://github.com/ehids/ecapture ,你可以自行修改源码编译。

视频演示

往期推荐

d452ae178e37b735b04b9a8612cae863.png

Web 全栈推拉能手 Socket.IO 库

dc4e4c697aff9377e9a29ebbccd7eda9.png

Golang分析内存溢出

cbb450755561f7ee13499a77dc081746.png

‍手撕 Golang 高性能内存缓存库 bigcache! #4‍ ‍

想要了解Go更多内容,欢迎扫描下方👇 关注 公众号,回复关键词 [实战群]  ,就有机会进群和我们进行交流~

11348e717c4ddcc02528547f0587652d.png

分享、在看与点赞,至少我要拥有一个叭~

6bd4242ecc0c8ea24cb95da2c83691d3.gif

1a09d04d62963950810bb15917ba703e.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16665.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络通信之——Https数字证书

数据通信 系列目录 网络通信之——RSA加密签名网络通信之——Https数字证书网络通信之——SSL与TLS数字证书中签名算法、签名哈希算法区别? 数字证书 前言证书构成证书的发布及使用流程Android开发中的运用总结 博客创建时间:2020.05.11 博客更新时间&a…

网工必考:HCIP认证(华为认证ICT高级网络工程师)

华为HCIP课程介绍 HCIP认证概述 HCIP-R&S认证定位于中小型网络的构建和管理。 HCIP-R&S认证包括但不限于:网络基础知识,交换机和路由器原理,TCP/IP协议簇&#…

VBA宏实现Word论文自动排版

一、灵感与动机 作为一名即将毕业的大四学生,不仅经历了设计、编写系统的痛苦,还经历了撰写论文的烦恼,尤其是最后论文排版阶段,非常的繁琐和费时。所以我就希望可以有一个自动排版的“脚本”,一开始认为可以通过Pytho…

chatgpt赋能python:Python自动排版Word文档:提高生产效率的神奇工具

Python自动排版Word文档:提高生产效率的神奇工具 介绍 随着电子文档的普及,Word文档成为了各种场合中最常用的文档格式。尤其在企业中,各种报告、规范、合同等文档的排版工作常常会占据很大比重,但是传统的手工排版往往效率低下…

YOLOv5全面解析教程⑥:模型训练流程详解

作者 | Fengwen、BBuf 欢迎Star、试用One-YOLOv5: https://github.com/Oneflow-Inc/one-yolov5 1 结构项目预览 2 安装 git clone https://github.com/Oneflow-Inc/one-yolov5 # clone cd one-yolov5 pip install -r requirements.txt # install 3 训练 两种训练…

发布4大“业界首个”产品,华为让数据中心变革开启“狂飙”模式

华为聚焦数字基础设施创新,通过4大“业界首个”产品的发布,不仅将引领新型数据中心发展,也将进一步支持企业的数字化转型,释放数字生产力。 在全球经济增速放缓的今天,数字经济正在成为经济增长的新引擎,为…

数据治理在学术上的发展史以及未来展望

数据治理是大数据领域中非常重要的一环,从早期的学术研究到如今的各大企业落地实践,经历了漫长的过程,数据治理的实践落地本身也是一场马拉松。 从百度学术通过精确关键词匹配,搜索中文期刊的“数据治理” 和外文期刊的“data gov…

于变革时代探寻破局之光 | LeaTech全球CTO领导力峰会圆满落幕

引言 2023 年 3 月 4 日,腾讯云 TVP 与 51CTO 联合主办的 LeaTech 全球 CTO 领导力峰会于上海扬子江丽笙精选酒店圆满落幕。 本届峰会聚集了腾讯云 TVP 技术专家、TVP 行业大使、CTO 训练营导师、CTO 训练营历届校友,以及来自各个领域和行业的技术领导者…

【原创】理解ChatGPT之注意力机制和Transformer入门

作者:黑夜路人 时间:2023年4月27日 想要连贯学习本内容请阅读之前文章: 【原创】理解ChatGPT之GPT工作原理 【原创】理解ChatGPT之机器学习入门 【原创】AIGC之 ChatGPT 高级使用技巧 GPT是什么意思 GPT的全称是 Generative Pre-trained …

新传专业需要计算机二级吗,大学生有必要去考取计算机二级证书吗?

满意答案 JKSNX 2020.09.22 采纳率:41% 等级:12 已帮助:4161人 这是个很常见的问题。每年总有两个月,学校的教务会发一则“计算机二级报考通知”,大家便开始讨论计算机二级有没有用,身体却很诚实地交上7…

跨考安大计算机研究生难吗,关于跨考安大新传这件事,你现在纠结的问题我们都知道!...

灵魂拷问:你为什么想要跨考新传? 因为兴趣…?热爱…?新闻理想…? 还是因为…? (开玩笑啦)即便有以上因素存在,大家选择了新传也有大部分原因是因为喜欢,比如说我,虽然综合…

新传工作运用计算机吗,Windows 7正式退休,这些解决办法你必须了解

2020年1月14日,微软Windows 7系统正式停止技术支持,你的计算机将不会中断或停止工作,但如果你的Windows 7计算机出现问题,它将不再收到任何问题的技术支持、软件更新、安全更新或修复。 现在微软在官方网站上公布了最新的Windows …

新传工作运用计算机吗,计算机等现代办公技术运用给文秘工作带来的新思考1...

电子计算机技术的运用发展被称为人类科学技术发展的"第三次革命",计算机技术在办公室的普及运用也使秘书工作由"笔杆子"向"键盘子"转变,计算机的运用操作成为了现代从业秘书的必备技能,与运而生的办公自动化大…

新传要不要学计算机,大学新生入学要带电脑吗?学长给出建议,不知道的会很“吃亏”...

教之而不受,虽强告之无益。譬之以水投石,必不纳也,今夫石田虽水润沃,其干可立待者,以其不纳故也。——张载 01前言 今年高考结束已经走了一段时间了,虽然成绩都还没有被公布,但相信很多考生的心…

服开与编排,老兵新传

前段时间,有同学问:编排与服开是什么关系?现在运营商都建设编排系统,那是不是服务开通以后就退出 OSS 舞台了?为什么会出现编排?这些问题对于行业老兵来说感慨万千,而对于新兵来说就要通过追溯其…

考研最卷的专业,我提名新传

不少专业的研究生统招考试都是一场“千军万马过独木桥”的残酷竞争,只是有的专业卷得明明白白,而有的专业多少让人意想不到 ——“钱途”一般,却也能卷上天,比如新传。 新传,指的是新闻传播类学科,除了主要…

Hitachi Vantara老兵新传

Hitachi Vantara正在书写一部“老兵新传”! 所谓“老”,是指Hitachi Vantara的前身HDS(Hitachi Data Systems)资历老,它曾是企业级存储市场的领导者;何为“新”?Hitachi Vantara于2017年9月才正…

计算机知识讲座图片,计算机ppt辅导讲座

原标题:计算机ppt辅导讲座 2020年11月4日下午1:30,在竞秀南楼304,润园书院学习部请到了赵燕飞老师为大家带来了一次细致实用的计算机关于ppt的辅导讲座。同时也是为了丰富同学们的计算机知识,教同学们熟练运用计算机知识制作精美的ppt。本次讲…

【简单】使用ChatGPT和QT从零开始构建一个计算器应用

在这篇博文中,我将向大家展示如何使用ChatGPT和Qt来构建一个完整的计算器应用。我们将从零开始,逐步引导您完成整个项目,包括需求分析、软件设计、代码编写等环节。该项目代码全部由GPT编写,10分钟完成。 一,项目概述 本项目旨在…

太突然了,不会ChatGPT就被淘汰,很多公司开始行动了!

上周末分别和两拨朋友约了饭局。周六约的是国内最大ERP厂商的朋友,饭桌上大家聊的最多的话题就是ChatGPT,他们上面领导发话了,让尽快引入ChatGPT,寻求突破。周日约见的是一波搞游戏开发的朋友,聊的最多话题也是ChatGPT…