使用 Linux 安全计算模式 (seccomp)

编辑

使用 Linux 安全计算模式 (seccomp)编辑

此功能处于测试阶段,可能会发生变化。其设计和代码的成熟度低于官方 GA 功能,按原样提供,不提供任何担保。测试版功能不受官方 GA 功能的 SLA 支持。

在 Linux 3.17 及更高版本中,Filebeat 可以利用安全计算模式,也称为 seccomp。Seccomp 限制进程可以发出的系统调用。具体而言,Filebeat 可以在进程启动时加载 seccomp BPF 过滤器,以降低调用特定系统调用的权限。一旦进程加载了过滤器,就无法将其删除。

内核公开大量 Filebeat 未使用的系统调用。通过安装 seccomp 过滤器,可以限制暴露给 Filebeat 的内核总表面积(最小权限原则)。这将最大程度地减少进程中可能存在的未知漏洞的影响。

过滤器以 Berkeley Packet Filter (BPF) 程序的形式表示。BPF 程序是根据 Filebeat 定义的策略生成的。策略也可以通过配置进行自定义。

由于系统调用因体系结构而异,因此 seccomp 策略是体系结构特定的。Filebeat 包含适用于 amd64 和 386 体系结构的白名单 seccomp 策略。您可以 在此 查看这些策略。

Seccomp 策略配置编辑

可以通过配置策略自定义 seccomp 策略。这是一个禁止 execveexecveatforkvfork 系统调用的黑名单策略示例。

seccomp:
  default_action: allow 
  syscalls:
  - action: errno 
    names: 
    - execve
    - execveat
    - fork
    - vfork

如果进程调用的系统调用与以下任何名称不匹配,则将允许该调用。

如果进程调用的系统调用与以下任何名称匹配,则会向调用者返回错误。这被称为黑名单策略。

这些是被禁止的系统调用。

这些是 seccomp 策略的配置选项。

启用
在 Linux 上,默认情况下此选项已启用。要禁用 seccomp 过滤器加载,请将此选项设置为 false
默认操作
当没有定义的系统调用匹配时采取的默认操作。有关值的完整列表,请参阅 操作。这是必需的。
系统调用
此列表中的每个对象都必须包含 action 和系统调用 names 列表。该列表必须至少包含一个项目。
名称
系统调用名称列表。系统调用名称必须存在于运行时体系结构中,否则会记录错误,并且不会安装过滤器。必须定义至少一个系统调用。
操作

执行 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,并且该事件将包含有关进程和系统调用的信息。