mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-05-12 12:02:03 +02:00
377 lines
6.4 KiB
Markdown
377 lines
6.4 KiB
Markdown
---
|
||
name: container-security-testing
|
||
description: 容器安全测试的专业技能和方法论
|
||
version: 1.0.0
|
||
---
|
||
|
||
# 容器安全测试
|
||
|
||
## 概述
|
||
|
||
容器安全测试是确保容器化应用安全性的重要环节。本技能提供容器安全测试的方法、工具和最佳实践,涵盖Docker、Kubernetes等容器技术。
|
||
|
||
## 测试范围
|
||
|
||
### 1. 镜像安全
|
||
|
||
**检查项目:**
|
||
- 基础镜像漏洞
|
||
- 依赖包漏洞
|
||
- 镜像配置
|
||
- 敏感信息
|
||
|
||
### 2. 运行时安全
|
||
|
||
**检查项目:**
|
||
- 容器权限
|
||
- 资源限制
|
||
- 网络隔离
|
||
- 文件系统
|
||
|
||
### 3. 编排安全
|
||
|
||
**检查项目:**
|
||
- Kubernetes配置
|
||
- 服务账户
|
||
- RBAC
|
||
- 网络策略
|
||
|
||
## Docker安全测试
|
||
|
||
### 镜像扫描
|
||
|
||
**使用Trivy:**
|
||
```bash
|
||
# 扫描镜像
|
||
trivy image nginx:latest
|
||
|
||
# 扫描本地镜像
|
||
trivy image --input nginx.tar
|
||
|
||
# 只显示高危漏洞
|
||
trivy image --severity HIGH,CRITICAL nginx:latest
|
||
```
|
||
|
||
**使用Clair:**
|
||
```bash
|
||
# 启动Clair
|
||
docker run -d --name clair clair:latest
|
||
|
||
# 扫描镜像
|
||
clair-scanner --ip 192.168.1.100 nginx:latest
|
||
```
|
||
|
||
**使用Docker Bench:**
|
||
```bash
|
||
# 运行Docker安全基准测试
|
||
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:**
|
||
```dockerfile
|
||
# 安全问题示例
|
||
FROM ubuntu:latest # 使用latest标签
|
||
RUN apt-get update && apt-get install -y curl # 未指定版本
|
||
COPY . /app # 可能包含敏感文件
|
||
ENV PASSWORD=secret # 硬编码密码
|
||
USER root # 使用root用户
|
||
```
|
||
|
||
**安全最佳实践:**
|
||
```dockerfile
|
||
# 使用特定版本
|
||
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
|
||
```
|
||
|
||
### 运行时检查
|
||
|
||
**检查容器权限:**
|
||
```bash
|
||
# 检查特权容器
|
||
docker ps --filter "label=privileged=true"
|
||
|
||
# 检查挂载的主机目录
|
||
docker inspect container_name | grep -A 10 Mounts
|
||
|
||
# 检查容器网络
|
||
docker network inspect network_name
|
||
```
|
||
|
||
**检查资源限制:**
|
||
```bash
|
||
# 检查内存限制
|
||
docker stats container_name
|
||
|
||
# 检查CPU限制
|
||
docker inspect container_name | grep -i cpu
|
||
```
|
||
|
||
## Kubernetes安全测试
|
||
|
||
### 配置检查
|
||
|
||
**使用kube-bench:**
|
||
```bash
|
||
# 运行kube-bench
|
||
kube-bench run
|
||
|
||
# 检查特定基准
|
||
kube-bench run --targets master,node,etcd
|
||
```
|
||
|
||
**使用kube-hunter:**
|
||
```bash
|
||
# 运行kube-hunter
|
||
kube-hunter --remote target-ip
|
||
|
||
# 主动模式
|
||
kube-hunter --active
|
||
```
|
||
|
||
### Pod安全
|
||
|
||
**检查Pod安全策略:**
|
||
```yaml
|
||
# 不安全的Pod配置
|
||
apiVersion: v1
|
||
kind: Pod
|
||
spec:
|
||
containers:
|
||
- name: app
|
||
image: nginx
|
||
securityContext:
|
||
privileged: true # 特权模式
|
||
runAsUser: 0 # root用户
|
||
```
|
||
|
||
**安全配置:**
|
||
```yaml
|
||
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检查
|
||
|
||
**检查角色权限:**
|
||
```bash
|
||
# 列出所有角色
|
||
kubectl get roles --all-namespaces
|
||
|
||
# 检查角色绑定
|
||
kubectl get rolebindings --all-namespaces
|
||
|
||
# 检查集群角色
|
||
kubectl get clusterroles
|
||
|
||
# 检查用户权限
|
||
kubectl auth can-i --list --as=system:serviceaccount:default:sa-name
|
||
```
|
||
|
||
**常见问题:**
|
||
- 过度权限
|
||
- 未使用的角色
|
||
- 未使用的服务账户
|
||
|
||
### 网络策略
|
||
|
||
**检查网络策略:**
|
||
```bash
|
||
# 列出所有网络策略
|
||
kubectl get networkpolicies --all-namespaces
|
||
|
||
# 检查网络策略配置
|
||
kubectl describe networkpolicy policy-name -n namespace
|
||
```
|
||
|
||
**网络策略示例:**
|
||
```yaml
|
||
apiVersion: networking.k8s.io/v1
|
||
kind: NetworkPolicy
|
||
metadata:
|
||
name: default-deny
|
||
spec:
|
||
podSelector: {}
|
||
policyTypes:
|
||
- Ingress
|
||
- Egress
|
||
```
|
||
|
||
## 工具使用
|
||
|
||
### Falco
|
||
|
||
**运行时安全监控:**
|
||
```bash
|
||
# 安装Falco
|
||
helm repo add falcosecurity https://falcosecurity.github.io/charts
|
||
helm install falco falcosecurity/falco
|
||
|
||
# 检查规则
|
||
falco -r /etc/falco/rules.d/
|
||
```
|
||
|
||
### Aqua Security
|
||
|
||
```bash
|
||
# 扫描镜像
|
||
aqua image scan nginx:latest
|
||
|
||
# 扫描Kubernetes集群
|
||
aqua k8s scan
|
||
```
|
||
|
||
### Snyk
|
||
|
||
```bash
|
||
# 扫描Dockerfile
|
||
snyk test --docker nginx:latest
|
||
|
||
# 扫描Kubernetes配置
|
||
snyk iac test k8s/
|
||
```
|
||
|
||
## 测试清单
|
||
|
||
### 镜像安全
|
||
- [ ] 扫描基础镜像漏洞
|
||
- [ ] 扫描依赖包漏洞
|
||
- [ ] 检查Dockerfile配置
|
||
- [ ] 检查敏感信息泄露
|
||
|
||
### 运行时安全
|
||
- [ ] 检查容器权限
|
||
- [ ] 检查资源限制
|
||
- [ ] 检查网络隔离
|
||
- [ ] 检查文件系统挂载
|
||
|
||
### 编排安全
|
||
- [ ] 检查Kubernetes配置
|
||
- [ ] 检查RBAC配置
|
||
- [ ] 检查网络策略
|
||
- [ ] 检查Pod安全策略
|
||
|
||
## 常见安全问题
|
||
|
||
### 1. 镜像漏洞
|
||
|
||
**问题:**
|
||
- 基础镜像包含漏洞
|
||
- 依赖包包含漏洞
|
||
- 未及时更新
|
||
|
||
**修复:**
|
||
- 定期扫描镜像
|
||
- 及时更新基础镜像
|
||
- 使用最小化镜像
|
||
|
||
### 2. 过度权限
|
||
|
||
**问题:**
|
||
- 容器以root运行
|
||
- 特权模式
|
||
- 挂载敏感目录
|
||
|
||
**修复:**
|
||
- 使用非root用户
|
||
- 禁用特权模式
|
||
- 限制文件系统访问
|
||
|
||
### 3. 配置错误
|
||
|
||
**问题:**
|
||
- 默认配置不安全
|
||
- 网络策略缺失
|
||
- RBAC配置错误
|
||
|
||
**修复:**
|
||
- 遵循安全最佳实践
|
||
- 实施网络策略
|
||
- 正确配置RBAC
|
||
|
||
### 4. 敏感信息泄露
|
||
|
||
**问题:**
|
||
- 镜像包含密钥
|
||
- 环境变量暴露
|
||
- 配置文件泄露
|
||
|
||
**修复:**
|
||
- 使用密钥管理
|
||
- 避免硬编码
|
||
- 使用Secret对象
|
||
|
||
## 最佳实践
|
||
|
||
### 1. 镜像安全
|
||
|
||
- 使用官方基础镜像
|
||
- 定期更新镜像
|
||
- 扫描镜像漏洞
|
||
- 最小化镜像大小
|
||
|
||
### 2. 运行时安全
|
||
|
||
- 使用非root用户
|
||
- 限制容器权限
|
||
- 实施资源限制
|
||
- 启用安全上下文
|
||
|
||
### 3. 编排安全
|
||
|
||
- 配置网络策略
|
||
- 实施RBAC
|
||
- 使用Pod安全策略
|
||
- 启用审计日志
|
||
|
||
## 注意事项
|
||
|
||
- 仅在授权环境中进行测试
|
||
- 避免对生产环境造成影响
|
||
- 注意不同容器平台的差异
|
||
- 定期进行安全扫描 |