使用 Linux 安全计算模式 (seccomp)
编辑使用 Linux 安全计算模式 (seccomp)
编辑此功能为 Beta 版,可能会发生更改。设计和代码不如官方 GA 功能成熟,按“原样”提供,不提供任何保证。Beta 版功能不受官方 GA 功能的支持 SLA 的约束。
在 Linux 3.17 及更高版本中,Metricbeat 可以利用安全计算模式,也称为 seccomp。Seccomp 限制进程可以发出的系统调用。具体来说,Metricbeat 可以在进程启动时加载 seccomp BPF 过滤器,该过滤器会降低调用特定系统调用的权限。一旦进程加载了过滤器,就无法将其删除。
内核公开了大量 Metricbeat 不使用的系统调用。通过安装 seccomp 过滤器,您可以限制暴露给 Metricbeat 的内核表面总数(最小特权原则)。这最大限度地减少了进程中可能发现的未知漏洞的影响。
该过滤器以伯克利数据包过滤器 (BPF) 程序的形式表示。BPF 程序是基于 Metricbeat 定义的策略生成的。策略也可以通过配置进行自定义。
由于系统调用因架构而异,因此 seccomp 策略是特定于架构的。Metricbeat 包括用于 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
,并且该事件将包含有关进程和系统调用的信息。