检查项ID | 检查项 | 检查的内容及安全风险 | 修复建议 |
hostNetworkSet | 禁止容器共享主机的网络命名空间 | 通过检查Workload的Pod spec中是否配置了hostNetwork: true,检查是否配置了共享使用主机的网络namespace。如果配置了,存在Pod中容器攻击主机网络、嗅探主机网络数据的风险。 | 修改Pod spec,删除hostNetwork字段。 示例: labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
|
hostIPCSet | 禁止容器共享主机的IPC命名空间 | 通过检查Workload的Pod spec中是否配置了hostIPC: true,检查是否配置了共享使用主机的IPC namespace。如果配置了,存在Pod中容器攻击主机上进程、嗅探主机上进程数据的风险。 | 修改Pod spec,删除hostIPC字段。 示例: labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
|
hostPIDSet | 禁止容器共享主机的PID命名空间 | 通过检查Workload的Pod spec中是否配置了hostPID: true,检查是否配置了共享使用主机的PID namespace。如果配置了,存在Pod中容器攻击主机上进程、采集主机上进程数据的风险。 | 修改Pod spec,删除hostPID字段。 示例: labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
|
hostPortSet | 禁止容器内进程监听节点主机端口 | 通过检查Workload的Pod spec中是否配置了hostPort,检查是否配置了把容器中监听的端口映射到主机指定端口上。如果配置了,存在挤占主机可用端口以及被非预期的请求方请求容器端口的风险。 | 修改Pod spec,删除hostPort字段。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
|
runAsRootAllowed | 禁止以root用户启动容器 | 通过检查Workload的Pod spec中是否未配置runAsNonRoot: true,检查是否未配置使用非root用户运行容器。如果未配置,存在被容器中的恶意进程入侵用户应用、入侵主机甚至入侵整个集群的风险。 | 修改Pod spec,增加runAsNonRoot: true。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
securityContext:
runAsNonRoot: true
|
runAsPrivileged | 禁止以特权模式启动容器 | 通过检查Workload的Pod spec中是否配置了privileged: true,检查是否配置了允许以特权模式运行容器。如果配置了,存在被容器中的恶意进程入侵用户应用、入侵主机甚至入侵集群的风险。 | 修改Pod spec,删除privileged字段。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
securityContext: {}
|
privilegeEscalationAllowed | 禁止容器内子进程拥有提升权限的能力 | 通过检查Workload的Pod spec中是否未配置allowPrivilegeEscalation: false,检查是否未配置禁止容器中的子进程拥有比父进程更高的权限。如果未配置,存在被容器中的恶意进程实现越权操作的风险。 | 修改Pod spec,增加allowPrivilegeEscalation:false字段。 示例: ports:
- containerPort: 80
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: true
volumeMounts:
|
capabilitiesAdded | 禁用非必需的Linux Capabilities | 通过检查Workload的Pod spec中的capabilities字段,检查是否配置了允许容器中的进程拥有SYS_ADMIN、NET_ADMIN、ALL等特权Linux Capabilities。如果配置了,存在被容器中的恶意进程通过这些特权入侵用户应用、入侵或破坏组件和集群的风险。 | 修改Pod spec,根据实际需求只添加必需的Linux Capabilities,删除不需要的Linux Capabilities。 不依赖额外Linux Capabilities,删除所有不需要的Linux Capabilities。示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
securityContext:
capabilities:
drop:
- ALL
只添加必需的Linux Capabilities,删除所有不需要的Linux Capabilities。示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
securityContext:
capabilities:
add:
- CHOWN
drop:
- ALL
|
notReadOnlyRootFileSystem | 开启容器内的文件系统只读功能 | 通过检查Workload的Pod spec中是否未配置readOnlyRootFilesystem: true,检查是否未配置容器中的文件系统是不可修改的。如果未配置,则存在被容器中的恶意进程恶意修改系统文件的风险。 | 修改Pod spec,增加readOnlyRootFilesystem: true,如果有需要修改某个目录下文件的需求,可以通过volumeMounts实现。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
securityContext:
readOnlyRootFilesystem: true
如果需要修改某个目录下的文件,通过volumeMounts字段实现。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
securityContext:
readOnlyRootFilesystem: true
runAsNonRoot: true
volumeMounts:
- mountPath: /path/to/write
name: writeable
volumes:
- emptyDir: {}
name: writeable
|
cpuRequestsMissing | 配置运行容器所需的最少CPU资源 | 通过检查Workload的Pod spec中是否未配置resources.requests.cpu字段,可以检查是否未配置运行容器所需的最少CPU资源。如果未配置,则Pod有被调度到资源紧张的节点上的风险,可能会出现容器内进程运行缓慢的情况。 | 修改Pod spec,增加resources.requests.cpu字段。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
resources:
requests:
cpu: 100m
|
cpuLimitsMissing | 限制运行容器可使用的最大CPU资源 | 通过检查Workload的Pod spec中是否未配置resources.limits.cpu字段,检查是否未配置运行容器所需的最大CPU资源。如果未配置,则存在被容器内的异常进程消耗大量节点资源,甚至把整个节点或集群的资源消耗殆尽的风险。 | 修改Pod spec,增加resources.limits.cpu字段。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
resources:
requests:
cpu: 100m
limits:
cpu: 100m
|
memoryRequestsMissing | 配置运行容器所需的最少内存资源 | 通过检查Workload的Pod spec中是否未配置resources.requests.memory字段,检查是否未配置运行容器所需的最少内存资源。如果未配置,Pod有被调度到资源紧张的节点上的风险,可能会出现容器内进程OOM的风险。 | 修改Pod spec,增加resources.requests.memory字段。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
resources:
requests:
cpu: 100m
memory: 128Mi
|
memoryLimitsMissing | 限制容器可使用的最大内存资源 | 通过检查Workload的Pod spec中是否未配置resources.limits.memory字段,检查是否未配置运行容器所需的最大内存资源。如果未配置,则存在被容器内的异常进程消耗大量节点资源,甚至把整个节点或集群的资源消耗殆尽的风险。 | 修改Pod spec,增加resources.limits.memory字段。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 100m
memory: 128Mi
|
readinessProbeMissing | 配置容器就绪探针 | 通过检查Workload的Pod spec中是否未配置readinessProbe字段,检查是否未配置检测容器内应用能否正常处理请求的探针。如果未配置,则存在容器内应用异常无法处理请求时仍旧有请求发送,继而导致业务异常的风险。 | 修改Pod spec,增加readinessProbe字段。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 20
|
livenessProbeMissing | 配置容器存活探针 | 通过检查Workload的Pod spec中是否未配置livenessProbe,检查是否未配置检测容器内应用是否出现异常需要重启容器的探针。如果未配置,存在容器内应用异常需要重启容器才能恢复时未及时重启导致业务异常的风险。 | 修改Pod spec,增加livenessProbe字段。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 20
|
tagNotSpecified | 容器使用明确的镜像版本 | 通过检查Workload的Pod spec中的image字段的值是否未包含镜像Tag或者使用了latest作为镜像Tag,检查是否未配置运行容器时使用指定Tag的容器镜像。如果未配置,存在运行容器时运行了非预期的容器镜像版本导致业务异常的风险。 | 修改Pod spec,修改image字段,使用指定的镜像Tag,并且不要使用latest作为镜像Tag。 示例: spec:
containers:
- name: nginx
image: nginx:1.14.2
|
anonymousUserRBACBinding | 禁止匿名用户访问集群 | 通过检查集群内的RBAC(Role-based access control)绑定找出配置了匿名用户访问权限的配置项。如果配置了允许匿名用户访问集群资源的配置项,则存在被恶意匿名用户窃取集群敏感信息、攻击和入侵集群的风险。 | 修改扫描出来的RBAC绑定,根据实际情况删除允许匿名用户访问集群资源的权限配置项。 示例: - apiGroup: rbac.authorization.k8s.io
kind: Group
name: 'foo-group'
|