Falco

简要概述

TODO;

规则

falco rules 使用 yaml 格式编写,有 “Rules”、“Lists”、“Macros” 三种类型:

Rules

在什么条件下会生成一个警报。一条规则通常伴随着一个描述性的输出字符串,该字符串会随着警报一起发送,示例规则如下:

- rule: shell_in_container
  desc: notice shell activity within a container
  condition: >
    evt.type = execve and 
    evt.dir = < and 
    container.id != host and 
    (proc.name = bash or
     proc.name = ksh)        
  output: >
    shell in a container
    (user=%user.name container_id=%container.id container_name=%container.name 
    shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline)        
  priority: WARNING
参数 必须 默认值 描述
rule - 规则名称,全局唯一
condition - 应用于事件的过滤表达式,用于检查它们是否与规则匹配
desc - 这个规则用途描述
output - 如果匹配到该规则,则对外输出内容
priority - 告警级别取值:emergency, alert, critical, error, warning, notice, informational, debug
exceptions - TODO;
enabled true 是否启用规则,默认启用
tags - 关联到该规则的标签
warn_evttypes true 如果设置为 false 将抑制与规则没有事件类型相关的警告
skip-if-unknown-filter false 如果设置为true,如果规则条件包含一个过滤检查,例如fd.some_new_field,而该版本的Falco不知道这个字段,Falco会默默接受这条规则但不执行它;如果设置为false,Falco在发现未知的过滤检查时会报告错误并退出。
source syscall 这个规则应该被评估的事件来源。典型的值包括syscall、k8s_audit,或者由源插件提供的来源。

Macros

宏提供了一种以可重用的方式定义规则常见子部分的方法,可以在规则内部甚至其他宏中重复使用。

参数 必须 默认值 描述
macro - 规则名称,全局唯一
condition - 应用于事件的过滤表达式,用于检查它们是否与规则匹配

如上 “Rules” 的 “condition” 示例中以下两个语句,被大量使用:

evt.type = execve and evt.dir = <

container.id != host

这两个条件将被许多其他规则频繁使用,因此为了简化工作,我们可以为它们分别定义宏:

- macro: container
  condition: container.id != host

- macro: spawned_process
  condition: evt.type = execve and evt.dir = <

此时更改后的规则如下:

- rule: shell_in_container
  desc: notice shell activity within a container
  condition: >
    spawned_process and 
    container and 
    proc.name = bash        
  output: >
    shell in a container
    (user=%user.name container_id=%container.id container_name=%container.name 
    shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline)        
  priority: WARNING

Lists

列表是命名的项目集合,你可以在规则、宏,甚至其他列表中使用这些项目,与规则和宏不同,列表不能被解析为过滤表达式。

参数 必须 默认值 描述
list - 规则名称,全局唯一
items - 数组格式,列表的值
- list: shell_binaries
  items: [bash, csh, ksh, sh, tcsh, zsh, dash]

- list: userexec_binaries
  items: [sudo, su]

- list: known_binaries
  items: [shell_binaries, userexec_binaries]

- macro: safe_procs
  condition: proc.name in (known_binaries)



最后修改 2024.01.05: docs: add falco (74e143a)