檢查項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'
|