![Falco云原生安全:Falco原理、实践与扩展](https://wfqqreader-1252317822.image.myqcloud.com/cover/778/50688778/b_50688778.jpg)
2.2 生成事件
生成事件的方法数以万计。在系统调用的场景中,实际上,只要进程在运行,许多事件就会自然地连续发生。然而,要使Falco发挥作用,我们必须关注能够触发警报的事件。你可能还记得,Falco预置了一组开箱即用的规则,涵盖了最常见的安全场景。Falco使用这些规则来表示异常的行为,因此我们需要选择一个规则作为目标,然后在系统中通过模拟恶意操作来触发它。
在本书中,特别是在第13章中,你将看到有关规则的全面解析、如何使用Falco的规则语法解释和编写条件,以及在条件和输出中支持哪些字段。现在,让我们简单回顾一下什么是规则,并通过一个实际的例子来解释它的结构:
![](https://epubservercos.yuewen.com/AD974B/29863515404397606/epubprivate/OEBPS/Images/0035-02.jpg?sign=1739306951-dqt5eLoehHm8mMN9eylnSZgCod72Z2FK-0-6184f16e1cc7afc4b112dd2b6ca2b9d0)
规则声明是一个包含若干键的YAML对象。第一个键rule作为规则集(包含规则定义的一个或多个YAML文件)中规则的唯一标识。第二个键desc允许规则的作者简要描述规则要检测的内容。键condition是最重要的一个,它允许使用一些简单的语法来表达安全断言。各种布尔运算符和比较运算符可以与字段(包含收集到的数据)结合使用,以过滤相关的事件。在上面的示例规则中,evt.dir是一个用于过滤的字段。我们将在第6章中详细介绍Falco支持的字段和过滤器。
条件为假,什么也不会发生;条件为真,断言得到满足,然后立即触发警报。警报将包含一条消息,由规则作者使用规则声明的键output定义,键priority对应的值也将出现在报告中。下一节我们会更详细地介绍警报的内容。
条件condition的语法还可以使用更多的结构,如列表list和宏marco,这些结构可以在规则集中与规则一起定义。顾名思义,列表是可以跨不同规则重用项的列表。类似地,宏是可重用的条件块。为了完整说明,下面是在“Write below binary dir”这条规则中键condition使用的两个宏(bin_dir和open_write):
![](https://epubservercos.yuewen.com/AD974B/29863515404397606/epubprivate/OEBPS/Images/0036-01.jpg?sign=1739306951-m7GGmHMy3JbaxNSnTLC9UU16bvYKI1DC-0-9d0b96e29b3cfd8ed3f9a4af7836a8d3)
在运行时,当加载规则时,宏会被展开。因此,我们可以想象最终的规则条件将类似于:
![](https://epubservercos.yuewen.com/AD974B/29863515404397606/epubprivate/OEBPS/Images/0036-02.jpg?sign=1739306951-n6scp5YLBiA09apWjTQgnoEEzCpnZe1G-0-76d3ff04fabf5c94060d01f87eecd6b6)
条件判断广泛地利用了字段。在这个例子中,你可以很容易地识别条件中的字段(例如,evt.type、evt.is_open_write、fd.typechar、evt.dir、fd.num和fd.directory),因为它们后面通常跟着一个比较操作符(例如,=、>=、in)。字段名包含一个点(.),因为具有相似上下文的字段被分组到类中,其中点之前的部分表示类(例如,evt和fd)。
尽管你可能还没有完全理解条件的语法,但没有关系,你现在需要知道的是,在条件中列出的目录之一(如/bin)中创建一个文件(这意味着打开一个文件并进行写入)就可以触发规则中的条件,让我们试试看。
首先,启动Falco并加载目标规则。规则“Write below binary dir”包含在文件/etc/falco/falco_rules.yaml中,在启动时默认加载,所以你不需要手动复制它,只需打开一个终端并执行命令:
![](https://epubservercos.yuewen.com/AD974B/29863515404397606/epubprivate/OEBPS/Images/0037-01.jpg?sign=1739306951-h18ww42ALRVxC80EFBS88mWIzclr4Zwy-0-d8e1eea71d2d6bef01bbdc22537e01fc)
然后,通过在/bin目录中创建一个文件来触发规则,一种直接的方法是打开另一个终端窗口并输入:
![](https://epubservercos.yuewen.com/AD974B/29863515404397606/epubprivate/OEBPS/Images/0037-02.jpg?sign=1739306951-EoXO5NRyLQmBpvb3mXNOh8uITtuUfyrQ-0-273b12293e0ee134f94fdc67377ed78b)
现在,如果回到第一个终端,Falco正在运行,你应该会发现一行日志(即由Falco发出的警报),看起来如下所示:
![](https://epubservercos.yuewen.com/AD974B/29863515404397606/epubprivate/OEBPS/Images/0037-03.jpg?sign=1739306951-3exMuFP9FQmrGorNGM2DYBjU51KMPhoy-0-8b908088f6acdb04902b0a063432ff60)
我们被Falco发现了!幸运的是,这正是我们想要实现的。我们将在下一节更详细地查看输出。
规则告诉Falco我们想要执行哪些安全策略(由条件键condition指定),以及违反策略时想要接收哪些信息(由输出键output指定)。每当事件满足规则定义的条件时,Falco就会发出警报(输出一行文本),因此如果我们再次运行上面创建文件的命令,就会触发一个新的警报。
在学习了上面这个例子之后,你自己也可以试着验证一些其他的规则。为了帮助实现这个目标,Falcosecurity组织提供了一种称为事件生成器event-generator的工具。这是一个简单的命令行工具,不需要任何特殊的安装步骤。你可以访问https://oreil.ly/CZGpM下载最新版本,然后在任何你喜欢的地方解压并使用它。它提供了一个事件集合,与默认Falco规则集中包含的许多规则相匹配。例如,要生成符合规则“Read sensitive file untrusted”中条件的事件,你可以在终端窗口中执行以下命令:
![](https://epubservercos.yuewen.com/AD974B/29863515404397606/epubprivate/OEBPS/Images/0038-01.jpg?sign=1739306951-L6XQU8fpd3Pfejv4WeG8QY17QFmBmXAI-0-7a023f7fcf94f9b8cbe2c913736564ba)
需要注意的是,这个工具可能会对你的系统做出一些变更。例如,由于该工具的目的是重现真正的恶意行为,因此一些操作会修改/bin、/etc和/dev等文件和目录。在使用该工具之前,请确保你已经完全理解了其用途及选项。正如在线文档https://oreil.ly/dL8gV所建议的,在容器中运行事件生成器event-generator更安全。