这篇文章将为大家详细讲解有关Tracee中怎么使用eBPF来追踪容器和系统事件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
创新互联成立于2013年,是专业互联网技术服务公司,拥有项目网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元于田做网站,已为上家服务,为于田各地企业和个人服务,联系电话:13518219792
Tracee是一款易于使用的轻量级容器和系统追踪工具,在该工具的帮助下,研究人员可以实时监控系统调用和其他系统事件。Tracee的独特之处就在于,它只会追踪新创建的进程和容器,也就是Tracee运行之后所开启的进程和容器,这样就可以帮助用户将注意力放在相关事件上,而不是系统中所发生的每一件事情。向Tracee添加新事件(尤其是系统调用)也非常简单,而且无需手写任何代码。
除了追踪功能之外,Tracee还能够捕捉到写入磁盘或内存的文件,并提取动态加载至应用程序内存中的代码。在这些功能的帮助下,我们将能够获取到运行进程的内部情况。
Tracee要求运行系统的Linux内核版本 >= 4.14。
如果使用Docker镜像的话,还需要满足下列条件:
C标准库;
libelf和zlib库;
clang >= 9;
如果使用的是预编译的eBPF代码,则需要满足下列条件:
clang >= 9;
/usr/src下包含可用的内核Header,由用户提供,需匹配正在运行的内核版本;
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:
make bpf
如需在Docker容器中构建,请运行下列命令:
make bpf DOCKER=1
或
make all make all DOCKER=1
拿到eBPF程序之后,我们就可以将其提供给Tracee了。此时,我们可以使用更加轻量级的aquasec/tracee:slim镜像来代替完整的Docker镜像。这个镜像无法构建eBPF程序,因此我们需要预先完成eBPF的构建。
如果Tracee执行的不是追踪任务,那么它就不需要其他权限。比如说,构建eBPF程序、枚举所有选项等等,都能够以普通用户完成。
如需执行追踪任务,Tracee则需要更高级别的管理员权限了。
下面给出的是Tracee的样本输出(无额外参数运行,默认追踪所有事件):
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中怎么使用eBPF来追踪容器和系统事件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。