Falco全解析(一)
Falco全解析(一)
Falco能做什么
Falco
主要通过系统调用去加固和监视系统
- 解析来自内核的系统调用
- 强大的规则引擎判断系统调用是否安全
- 当发现非法系统调用时发出警告
Falco架构
从最底层开始介绍,Falco
最底层是由LSM
和ebpf
驱动的一个monitor
,他会捕捉全部的系统调用并且传输至引擎中判断,引擎也就是libsinsp
和libscap
,最后引擎使用GRP
C或者其他通信方式发送出去,算是比较常规的架构(内核获取信息+用户态引擎判断+网络传输结果)
我对这部分ebpf的代码比较感兴趣,内核部分的代码在这里可以找到,同时引擎的代码也在这个仓库中,有意思的一点是现在sysdig的内核探针也是用的是Falco的,然而Falco是捐赠给CNCF的开源项目
使用
Falco
有直接可以运行的binary文件,因此可以直接执行falco
,也可以使用官方提供的Falco
Docker镜像运行,官方更推荐使用特权模式运行:1
2
3
4
5
6
7
8
9
10docker pull falcosecurity/falco-driver-loader:latest
docker run --rm -i -t \
--privileged \
-v /root/.falco:/root/.falco \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
falcosecurity/falco-driver-loader:latest
我这里由于后期有打算进行二次开发,因此选择自己编译后运行二进制文件,我的环境如下:宿主机 M1 mac,虚拟机使用的是MultiPass
,ubuntu 22.10
发行版,内核版本5.15.0-60-generic
,因为之前已经在这个虚拟机中测试过ebpf,所以说我可以直接编译
1 | git clone https://github.com/falcosecurity/falco.git |
一路也比较顺利,编译之后在/build/driver
可以看见你编译出的.ko后缀的驱动和.o后缀的BTF
文件,内核可以直接加载并运行,编译整个Falco
消耗的时间还是比较长因为他会编译所用到的所有依赖(而且是边下载边编译)…耐心等待即,编译时还出现了compiler被莫名其妙terminate的情况,给MulitPass
加了点内存之后总算可以编译成功了
直接运行binary其实坑挺多的,需要你首先使用falco-driver-loader
去加载驱动或者ebpf,然后再补充rules和配置文件之后才可以运行,更方便的还是使用docker去运行,Falco
既可以运行在容器中,也可以运行在宿主机上,一般来说Falco
在k8s中以DaemonSet
的形式运行在每一台Node上
再补充一点坑的地方,从官方仓库下载好的预编译好的probe.o文件是专门为pagesize=64k的linux内核编译的,所以我的并不能加载普通的bpf文件,但是我后来试了一下modern(也就是开启了BTF支持的,当然这里要求内核版本大于5.8),modern BPF不仅实现了CO—RE,并且使用ring buffer取代了perf map算是有了性能提升,可以看一下运行falco之后使用bpftool查看,一下子多了两百多个程序…
还有一个坑记录一下:MultiPass默认
是给了单个cpu,想要使用Ring Buffer的话必须CPU数量在2以上,所以需要改一下
1 | multipass set local.spruce-bluejay.cpus=4 |
libs代码解析
libs仓库中的架构图更详细一些
libs仓库中的文件分布如下
drivers
目录包含了全部内核层的东西,也就是驱动和ebpf
程序,这部分程序主要监视和捕获内核userspace
目录则是包含了用户态的东西,libscap
(library for system capture)主要负责直接与驱动交互,控制内核层的事件抓取,同时会捕捉文件打开与关闭的情况,并且实现了操作系统状态收集,最后把这些事件全部发送至libinsp中;libsinsp
(library for system inspection)主要负责对发送来的事件进行一些简单的过滤,并且解析过滤后的事件,并且对输出结果做一些格式化
ebpf部分
入口是probe.c
,这里是主要挂载了ebpf跟踪点的地方,传统的ebpf部分在nsfocus中已经有比较详细的讲解,下一篇中主要分析modern和传统ebpf的实现和改造