mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-13 22:50:24 +02:00
Add files via upload
This commit is contained in:
@@ -0,0 +1,377 @@
|
||||
---
|
||||
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安全策略
|
||||
- 启用审计日志
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 仅在授权环境中进行测试
|
||||
- 避免对生产环境造成影响
|
||||
- 注意不同容器平台的差异
|
||||
- 定期进行安全扫描
|
||||
Reference in New Issue
Block a user