2.1 在本地环境上运行Falco

尽管Falco不是那种典型的应用程序,但在本地机器上安装和运行它非常简单,你只需要一台Linux主机或者一台虚拟机,以及一个终端。我们需要安装两个组件:用户空间程序falco和驱动程序。驱动程序用来收集系统调用,这是Falco中非常常见的数据源。简单起见,本章只关注系统调用捕获。

你将在第3章了解到更多可用的驱动程序以及为什么我们需要它们来检测系统,并在第4章继续探索其他数据源。目前,你只需要知道默认的驱动程序(作为Linux内核模块实现)足以收集系统调用并开始使用Falco。

你将在第8章了解到有很多种方法可以安装上述组件,在本章中,我们选择使用二进制包的方式。它适用于几乎所有的Linux发行版,但是不提供自动化安装,你需要手动完成。二进制包涵盖了falco程序、falco-driver-loader脚本(辅助安装驱动程序的实用程序)和许多其他必需的文件。你可以从Falco项目的官方网站(https://falco.org)下载,在那里你还可以找到关于安装它的详细信息。接下来,让我们开始吧!

2.1.1 下载并安装二进制包

Falco的二进制包是通过GNU zip(gzip)压缩的tar包形式分发的。tar包的文件名为falco-<x.y.z>-<arch>.tar.gz,其中<x.y.z>是Falco发行版的版本,<arch>是包的底层架构(例如,x86_64)。

Falco的下载页面(https://oreil.ly/Hx6Dy)列出了所有可用的软件包,你可以获取二进制包的URL并在本地下载它,例如,通过curl命令:

下载tar包后,解压缩也非常简单:

刚刚提取的tar包内容需要复制到本地文件系统的根目录“/”下,不需要任何特殊的安装过程。要复制文件,需要以root用户运行命令:

现在我们可以安装驱动程序了。

2.1.2 安装驱动程序

系统调用是Falco的默认数据源。为了检测Linux内核并收集这些系统调用,它需要一个驱动程序:一个Linux内核模块或者一个eBPF探针。驱动程序需要为运行Falco的内核的特定版本和配置而构建。幸运的是,Falco项目为绝大多数最常见的Linux发行版提供了数以千计的预构建驱动程序,并提供了各种内核版本供下载。如果你的发行版和内核版本还没有预构建驱动程序,那么在2.1.1节安装的文件中包括内核模块和eBPF探针的源代码,所以也可以在本地构建驱动程序。

这听起来可能有点复杂,但是我们利用刚刚安装的falco-driver-loader脚本就可以轻松地完成所有这些步骤。在使用脚本之前,你需要安装一些必要的依赖项:

• 动态内核模块支持(dkms)

• GNU make

• Linux内核头文件

根据你使用的包管理器的不同,实际的包名称可能会有所不同。然而,它们并不难找到。安装完这些包之后,就可以以root身份运行falco-driver-loader脚本了。如果一切正常,脚本输出应该是这样的:

输出中包含了一些有用的信息。第一行报告了正在安装的Falco和驱动程序的版本。接下来是脚本将尝试下载预构建的驱动程序,以便安装内核模块。如果找不到合适的预构建驱动程序,Falco将尝试在本地构建它。输出的其余部分显示了通过DKMS构建和安装模块的过程,以及最终安装和加载的模块。

2.1.3 启动Falco

要启动Falco,你只需要以root身份[1]运行它:

这里需要注意配置文件和规则文件的路径,我们将在第9章和第13章中更详细地讨论这些内容。在最后一行中,我们可以看到Web服务器已经启动,这样做是因为Falco暴露了一个健康状况检查端点,你可以使用该端点验证它是否已经启动并正在运行。

在本章中,为了便于讲解说明,我们简单地将Falco通过一个交互式shell进程运行。因此,按<Ctrl+C>组合键就可以结束这个过程。在本书中,我们还会向你展示安装和运行它的其他方法。

一旦Falco打印了这些启动信息,说明它已经做好了准备,当加载规则集中的条件满足时,发出通知。现在,你可能不会看到任何通知(因为我们假设你的系统上没有运行恶意程序)。在2.2节中,我们将生成一个可疑事件。