k8s 的pod服务开启seccomp实验测试
最简单和最容易理解的定义可能是 “系统调用防火墙”。本质上是一种限制进程可能进行的系统调用的机制, 因此就像阻止来自某些 IP 的数据包一样,也可以阻止进程向 CPU 发送系统调用用处:Linux 内核有很多系统调用(几百个),但是任何给定进程都不需要它们中的大多数。但是,如果进程可能会受到损害并被欺骗使用其中一些系统调用,那么它可能会导致整个系统出现严重的安全问题。因此,限制哪些系统调用进程可以
·
k8s 的pod服务开启seccomp
定义:
最简单和最容易理解的定义 seccomp
可能是 “系统调用防火墙”。 seccomp
本质上是一种限制进程可能进行的系统调用的机制, 因此就像阻止来自某些 IP 的数据包一样,也可以阻止进程向 CPU 发送系统调用
用处:Linux 内核有很多系统调用(几百个),但是任何给定进程都不需要它们中的大多数。但是,如果进程可能会受到损害并被欺骗使用其中一些系统调用,那么它可能会导致整个系统出现严重的安全问题。因此,限制哪些系统调用进程可以大大减少内核的攻击面。
前提:
系统内核是否开启seccomp
功能:
grep SECCOMP /boot/config-$(uname -r)
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECCOMP=y
docker是否开启seccomp
功能
如果您正在运行任何最新版本的 Docker(1.10 或更高版本),那么您已经在使用 seccomp
. 您可以使用 docker info
或通过查看
docker info
Security Options:
seccomp
Profile: default
seccomp 的相关参数
#SCMP_ACT_KILL_THREAD (or SCMP_ACT_KILL)
Does not execute the syscall and terminate the thread that attempted making the call. Note that depending on the application being enforced (i.e. multi-threading) and its error handling, syscalls blocked using this action may do so silently which may result in side effects on the overall application.
#####
不执行系统调用并终止尝试进行调用的线程。 请注意,根据正在实施的应用程序(即多线程)及其错误处理,使用此操作阻止的系统调用可能会静默执行,这可能会对整个应用程序产生副作用。
#SCMP_ACT_TRAP
Does not execute the syscall. The kernel will send a thread-directed SIGSYS signal to the thread that attempted making the call.
#####
不执行系统调用。 内核将向试图进行调用的线程发送一个线程导向的 SIGSYS 信号。
#SCMP_ACT_ERRNO
Does not execute the syscall, returns error instead. Note that depending on the error handling of the application being enforced, syscalls blocked using this action may do so silently which may result in side effects on the overall application.
#####
不执行系统调用,而是返回错误。 请注意,根据正在执行的应用程序的错误处理,使用此操作阻止的系统调用可能会静默执行,这可能会对整个应用程序产生副作用。
#SCMP_ACT_TRACE
The decision on whether or not to execute the syscall will come from a tracer. If no tracer is present behaves like SECCOMP_RET_ERRNO.
This can be used to automate profile generation and also can be used to change the syscall being made. Not recommended when trying to enforce seccomp to line of business applications.
#####
是否执行系统调用的决定将来自跟踪器。 如果不存在跟踪器,则行为类似于 SECCOMP_RET_ERRNO。
这可用于自动生成配置文件,也可用于更改正在进行的系统调用。 尝试将 seccomp 强制执行到业务线应用程序时不推荐使用。
#SCMP_ACT_ALLOW
Executes the syscall.
#####
执行系统调用。
#SCMP_ACT_LOG (since Linux 4.14)
Executes the syscall. Useful for running seccomp in "complain-mode", logging the syscalls that are mapped (or catch-all) and not blocking their execution. It can be used together with other action types to provide an allow and deny list approach.
#####
执行系统调用。 对于在“投诉模式”下运行 seccomp、记录映射(或全部捕获)的系统调用并且不阻止它们的执行很有用。 它可以与其他操作类型一起使用,以提供允许和拒绝列表方法。
#SCMP_ACT_KILL_PROCESS (since Linux 4.14)
Does not execute the syscall and terminates the entire process with a core dump. Very useful when automating the profile generation.
#####
不执行系统调用并使用核心转储终止整个进程。 在自动生成配置文件时非常有用。
pod调用seccomp
选择的seccomp 方式
k8s默认情况下不使用系统调用,并且上方seccomp 参数中多个参数需要linux4.14以上的内核版本,故针对此漏洞推荐以下两种seccomp配置。
1、SCMP_ACT_ALLOW
不阻止任何系统调用
2、 RuntimeDefault
使用docker的默认seccomp 配置
调用方式
(pod调用外挂seccomp文件时会默认到pod容器的/var/lib/kubelet/seccomp/寻找改外挂文件 )
1、SCMP_ACT_ALLOW
#在所有节点创建外挂seccomp配置文件
vim /var/lib/kubelet/seccomp/audit.json
{
"defaultAction": "SCMP_ACT_LOG"
}
#在pod yaml文件中添加挂载和seccomp配置内容
##示例:
apiVersion: v1
kind: Pod
metadata:
namespace: szxc
name: default-seccomp
labels:
app: default-seccomp
spec:
securityContext: #
seccompProfile: #
type: Localhost #
localhostProfile: audit.json #
containers:
- name: test-container
image: r.j3ss.co/amicontained
command: [ "/bin/sh", "-c", "--" ]
args: [ "amicontained" ]
securityContext:
allowPrivilegeEscalation: false
volumeMounts: #
- name: seccomp #
mountPath: /var/lib/kubelet/seccomp/ #
volumes: #
- name: seccomp #
hostPath: #
path: /var/lib/kubelet/seccomp/ #
2、 RuntimeDefault
apiVersion: v1
kind: Pod
metadata:
namespace: szxc
name: default-seccomp
labels:
app: default-seccomp
spec:
securityContext:
seccompProfile:
type: RuntimeDefault
containers:
- name: test-container
image: r.j3ss.co/amicontained
command: [ "/bin/sh", "-c", "--" ]
args: [ "amicontained" ]
securityContext:
allowPrivilegeEscalation: false
volumeMounts:
- name: seccomp
mountPath: /var/lib/kubelet/seccomp/
volumes:
- name: seccomp
hostPath:
path: /var/lib/kubelet/seccomp/
更多推荐
已为社区贡献4条内容
所有评论(0)