使用 Linux 安全计算模式 (seccomp)
编辑使用 Linux 安全计算模式 (seccomp)
编辑此功能处于测试阶段,可能随时更改。其设计和代码不如正式 GA 功能成熟,按现状提供,不提供任何担保。测试版功能不受正式 GA 功能支持 SLA 的约束。
在 Linux 3.17 及更高版本上,Auditbeat 可以利用安全计算模式,也称为 seccomp。Seccomp 限制进程可以发出的系统调用。具体来说,Auditbeat 可以在进程启动时加载 seccomp BPF 过滤器,从而降低调用特定系统调用的权限。进程加载过滤器后,就无法将其删除。
内核公开大量 Auditbeat 未使用的系统调用。通过安装 seccomp 过滤器,您可以限制向 Auditbeat 公开的内核总表面积(最小权限原则)。这最大限度地减少了在进程中可能发现的未知漏洞的影响。
过滤器表示为 Berkeley Packet Filter (BPF) 程序。BPF 程序是根据 Auditbeat 定义的策略生成的。策略也可以通过配置进行自定义。
由于系统调用因体系结构而异,因此 seccomp 策略是特定于体系结构的。Auditbeat 包含针对 amd64 和 386 体系结构的白名单 seccomp 策略。您可以在此处查看这些策略。
Seccomp 策略配置
编辑可以通过配置策略自定义 seccomp 策略。这是一个禁止 execve
、execveat
、fork
和 vfork
系统调用的示例黑名单策略。
这些是 seccomp 策略的配置选项。
-
enabled
- 在 Linux 上,此选项默认启用。要禁用 seccomp 过滤器的加载,请将此选项设置为
false
。 -
default_action
- 当没有定义的系统调用匹配时要采取的默认操作。有关值的完整列表,请参见 action。这是必需的。
-
syscalls
- 此列表中的每个对象都必须包含一个
action
和一个系统调用names
列表。该列表必须至少包含一个项目。 -
names
- 系统调用名称列表。系统调用名称必须存在于运行时体系结构中,否则将记录错误并且不会安装过滤器。必须定义至少一个系统调用。
-
action
-
执行
names
中列出的任何系统调用时要采取的操作。这是必需的。这些是可用的操作值。可用的操作取决于内核版本。-
errno
- 系统调用将向调用方返回EPERM
(权限被拒绝)。 -
trace
- 内核将通知ptrace
追踪器。如果没有追踪器,则系统调用将失败并返回ENOSYS
(未实现的功能)。 -
trap
- 内核将向调用线程发送SIGSYS
信号,而不执行系统调用。Go 运行时将退出。 -
kill_thread
- 内核将立即终止线程。其他线程将继续执行。 -
kill_process
- 内核将终止进程。在 Linux 4.14 及更高版本中可用。 -
log
- 内核将在执行系统调用之前记录该调用。在 Linux 4.14 及更高版本中可用。(这不会记录到 Beat 的日志中。) -
allow
- 内核将允许执行系统调用。
-
Auditbeat 报告 Seccomp 违规
编辑您可以使用 Auditbeat 来报告系统上发生的任何 seccomp 违规情况。内核会为每个违规情况生成一个事件,Auditbeat 会报告该事件。event.action
值将为 violated-seccomp-policy
,并且事件将包含有关进程和系统调用的信息。