使用 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 策略。这是一个禁止 execveexecveatforkvfork 系统调用的示例黑名单策略。

seccomp:
  default_action: allow 
  syscalls:
  - action: errno 
    names: 
    - 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,并且事件将包含有关进程和系统调用的信息。