购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 驱动程序

系统调用是Falco的原始数据源,直到今天它们仍然是最重要的。收集系统调用是Falco的核心功能,通过细粒度的方式高效跟踪进程、容器和用户行为。可靠而高效的系统调用收集需要从操作系统内核内部执行,因此它需要一个在操作系统内部运行的驱动程序。如3.1节所述,Falco提供了两个这样的驱动程序:内核模块和eBPF探针。

这两个组件提供相同的功能,需要以互斥的方式部署:如果部署内核模块,则不能运行eBPF探针,反之亦然。那它们都有哪些区别呢?

内核模块适用于各种版本的Linux内核,包括早期版本。此外,它仅需要较少的资源来运行,因此当你关心降低Falco的开销时,可以考虑使用它。

相对地,eBPF探针只能在Linux的最新版本上运行,从内核4.11开始支持。它的优点是更安全,因为它的代码在执行之前要经过操作系统的严格验证。这意味着即使它包含一个Bug,理论上也不会使你的机器崩溃。与内核模块相比,它可以更好地避免出现可能危及运行它的机器的安全漏洞。因此,在大多数情况下,eBPF探针是优先考虑的选项。此外还需要注意的是,某些环境,特别是基于云的托管容器环境,会阻止在操作系统内核中加载内核模块。在这种情况下,eBPF探针是唯一的选择。

内核模块和eBPF探针都被赋予了一组非常重要的任务:

捕获系统调用

驱动程序的首要职责是捕获系统调用。这是通过一个名为tracepoints ( https://oreil.ly/tEYsq )的内核工具实现的,它经过了大量优化,力求最大限度地减少对被监控应用程序的性能影响。

系统调用打包

然后,驱动程序将系统调用信息编码到传输缓冲区中,使用一种可以被Falco堆栈轻松有效解析的格式。

零拷贝数据传输

最后,驱动程序负责有效地将这些数据从内核传输到用户空间, libscap 将在用户空间接收这些数据。或许我们不应该称之为“传输数据”,因为内核模块和eBPF探针都是围绕零拷贝架构设计的,它将数据缓冲区映射到用户空间内存中,这样 libscap 就可以直接访问原始数据,而不需要拷贝或传输数据。

在第4章中,你将学习需要了解的驱动程序,包括它们的架构、功能和使用场景。 s9RwxZJa4dFjgWdDpR2zLf5PDXGTOJ7CNimZ5207K0ouzuD+TKtnC/b4ZHHGgWbT

点击中间区域
呼出菜单
上一章
目录
下一章
×