| name | container-security-testing |
| description | 容器安全测试的专业技能和方法论 |
| version | 1.0.0 |
容器安全测试
概述
容器安全测试是确保容器化应用安全性的重要环节。本技能提供容器安全测试的方法、工具和最佳实践,涵盖Docker、Kubernetes等容器技术。
测试范围
1. 镜像安全
检查项目:
2. 运行时安全
检查项目:
3. 编排安全
检查项目:
- Kubernetes配置
- 服务账户
- RBAC
- 网络策略
Docker安全测试
镜像扫描
使用Trivy:
trivy image nginx:latest
trivy image --input nginx.tar
trivy image --severity HIGH,CRITICAL nginx:latest
使用Clair:
docker run -d --name clair clair:latest
clair-scanner --ip 192.168.1.100 nginx:latest
使用Docker Bench:
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker/docker-bench-security
容器配置检查
检查Dockerfile:
# 安全问题示例
FROM ubuntu:latest # 使用latest标签
RUN apt-get update && apt-get install -y curl # 未指定版本
COPY . /app # 可能包含敏感文件
ENV PASSWORD=secret # 硬编码密码
USER root # 使用root用户
安全最佳实践:
# 使用特定版本
FROM ubuntu:20.04
# 指定包版本
RUN apt-get update && apt-get install -y curl=7.68.0-1ubuntu2.7
# 使用非root用户
RUN useradd -m appuser
USER appuser
# 最小化镜像
FROM alpine:3.15
# 多阶段构建
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN go build -o app
FROM alpine:3.15
COPY --from=builder /app/app /app
运行时检查
检查容器权限:
docker ps --filter "label=privileged=true"
docker inspect container_name | grep -A 10 Mounts
docker network inspect network_name
检查资源限制:
docker stats container_name
docker inspect container_name | grep -i cpu
Kubernetes安全测试
配置检查
使用kube-bench:
kube-bench run
kube-bench run --targets master,node,etcd
使用kube-hunter:
kube-hunter --remote target-ip
kube-hunter --active
Pod安全
检查Pod安全策略:
apiVersion: v1
kind: Pod
spec:
containers:
- name: app
image: nginx
securityContext:
privileged: true
runAsUser: 0
安全配置:
apiVersion: v1
kind: Pod
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: app
image: nginx
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
RBAC检查
检查角色权限:
kubectl get roles --all-namespaces
kubectl get rolebindings --all-namespaces
kubectl get clusterroles
kubectl auth can-i --list --as=system:serviceaccount:default:sa-name
常见问题:
网络策略
检查网络策略:
kubectl get networkpolicies --all-namespaces
kubectl describe networkpolicy policy-name -n namespace
网络策略示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
工具使用
Falco
运行时安全监控:
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm install falco falcosecurity/falco
falco -r /etc/falco/rules.d/
Aqua Security
aqua image scan nginx:latest
aqua k8s scan
Snyk
snyk test --docker nginx:latest
snyk iac test k8s/
测试清单
镜像安全
运行时安全
编排安全
常见安全问题
1. 镜像漏洞
问题:
修复:
2. 过度权限
问题:
修复:
- 使用非root用户
- 禁用特权模式
- 限制文件系统访问
3. 配置错误
问题:
修复:
4. 敏感信息泄露
问题:
修复:
最佳实践
1. 镜像安全
- 使用官方基础镜像
- 定期更新镜像
- 扫描镜像漏洞
- 最小化镜像大小
2. 运行时安全
- 使用非root用户
- 限制容器权限
- 实施资源限制
- 启用安全上下文
3. 编排安全
- 配置网络策略
- 实施RBAC
- 使用Pod安全策略
- 启用审计日志
注意事项