前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tracee:如何使用eBPF来追踪容器和系统事件

Tracee:如何使用eBPF来追踪容器和系统事件

作者头像
FB客服
发布2021-01-08 15:43:44
3.2K0
发布2021-01-08 15:43:44
举报
文章被收录于专栏:FreeBuf

Tracee

Tracee是一款易于使用的轻量级容器和系统追踪工具,在该工具的帮助下,研究人员可以实时监控系统调用和其他系统事件。Tracee的独特之处就在于,它只会追踪新创建的进程和容器,也就是Tracee运行之后所开启的进程和容器,这样就可以帮助用户将注意力放在相关事件上,而不是系统中所发生的每一件事情。向Tracee添加新事件(尤其是系统调用)也非常简单,而且无需手写任何代码。

除了追踪功能之外,Tracee还能够捕捉到写入磁盘或内存的文件,并提取动态加载至应用程序内存中的代码。在这些功能的帮助下,我们将能够获取到运行进程的内部情况。

工具依赖

Tracee要求运行系统的Linux内核版本 >= 4.14。

如果使用Docker镜像的话,还需要满足下列条件:

  • C标准库;
  • libelf和zlib库;
  • clang >= 9;

如果使用的是预编译的eBPF代码,则需要满足下列条件:

  • clang >= 9;
  • /usr/src下包含可用的内核Header,由用户提供,需匹配正在运行的内核版本;

Docker镜像运行

代码语言:javascript
复制
docker run --name tracee --rm --privileged --pid=host -v /lib/modules/:/lib/modules/:ro -v /usr/src:/usr/src:ro -v /tmp/tracee:/tmp/tracee aquasec/tracee

上述命令将会以无参数的形式运行Tracee,默认会收集所有新创建进程的相关事件,并将其以标准输出的形式打印在表格中。

安装选项

Tracee这个程序基于eBPF程序(tracee.bpf.kernelversion.traceeversion.o)实现,当Tracee开始运行后,它将会寻找eBPF程序,路径可能是/tmp/tracee或TRACEE_BPF_FILE环境变量定义的路径。如果没有找到eBPF的话,程序将会尝试自动构建eBPF,这一步可以使用—build-policy选项来控制。

最简单的方法就是让tracee程序自动构建eBPF程序,我们可以按照下列方式获取可执行程序:

  • 从项目的GitHub库上下载(tar.gz);
  • 使用Docker镜像: aquasec/tracee(已包含所有依赖组件);
  • 使用make build命令从源代码构建可执行程序;
  • 在Docker容器中使用源码构建可执行程序: make build DOCKER=1;

或者说,我们也可以预编译eBPF程序,并将其提供给tracee程序。这样一来,我们就不需要用到clang和内核Header了。我们可以按照下列方式构建eBPF:

代码语言:javascript
复制
make bpf

如需在Docker容器中构建,请运行下列命令:

代码语言:javascript
复制
make bpf DOCKER=1

代码语言:javascript
复制
make all

make all DOCKER=1

拿到eBPF程序之后,我们就可以将其提供给Tracee了。此时,我们可以使用更加轻量级的aquasec/tracee:slim镜像来代替完整的Docker镜像。这个镜像无法构建eBPF程序,因此我们需要预先完成eBPF的构建。

权限

如果Tracee执行的不是追踪任务,那么它就不需要其他权限。比如说,构建eBPF程序、枚举所有选项等等,都能够以普通用户完成。

如需执行追踪任务,Tracee则需要更高级别的管理员权限了。

工具使用

下面给出的是Tracee的样本输出(无额外参数运行,默认追踪所有事件):

代码语言:javascript
复制
TIME(s)        UID    COMM             PID     TID     RET             EVENT                ARGS

176751.746515  1000   zsh              14726   14726   0               execve               pathname: /usr/bin/ls, argv: [ls]

176751.746772  1000   zsh              14726   14726   0               security_bprm_check  pathname: /usr/bin/ls, dev: 8388610, inode: 777

176751.747044  1000   ls               14726   14726  -2               access               pathname: /etc/ld.so.preload, mode: R_OK

176751.747077  1000   ls               14726   14726   0               security_file_open   pathname: /etc/ld.so.cache, flags: O_RDONLY|O_LARGEFILE, dev: 8388610, inode: 533737

...

每一行代表Tracee所收集到的一个单一事件,其中包含下列信息:

  • TIME: 显示系统启动后事件的发生时间,单位为秒;
  • UID: 调用进程的用户ID;
  • COMM: 调用进程名称;
  • PID: 调用进程PID;
  • TID: 调用线程TID;
  • RET: 函数返回的值;
  • EVENT: 事件识别符;
  • ARGS: 提供给函数的参数列表;

工具演示视频

视频地址:https://youtu.be/WTqE2ae257o

项目地址

Tracee:https://github.com/aquasecurity/tracee

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Tracee
  • 工具依赖
  • Docker镜像运行
  • 安装选项
  • 权限
  • 工具使用
  • 工具演示视频
  • 项目地址
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档