19.8.9 安全测试与持续加固流程
安全测试与持续加固流程应覆盖平台、主机、容器、应用与中间件全栈,形成“发现—评估—修复—验证—复盘”的闭环,确保漏洞可追踪、可度量、可验证,最终降低暴露面、缩短修复周期、减少重复问题并保障业务连续性。
流程原理草图(闭环)
测试范围与频率
- 主机与基础设施:OS基线、内核/组件漏洞、端口暴露、弱口令与配置缺陷。
- 中间件:MySQL/Nginx/Redis/Nacos/Kafka/ZooKeeper/Keepalived/HAProxy/ProxySQL 安全配置、版本漏洞、权限隔离。
- 容器与编排:Docker镜像依赖漏洞、K8s API安全、RBAC、Admission 控制、运行时防护。
- 平台与业务:SSO、API、管理后台、配置中心、发布系统、监控平台鉴权与审计。
- 频率:日常自动扫描 + 季度深度渗透测试 + 重大变更前后验证。
1. 资产识别与自动化扫描(含安装与命令)#
1)主机基线扫描(Lynis)
安装与执行:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y lynis
# 扫描并生成报告
sudo lynis audit system --quick --report-file /var/log/lynis-report.dat
# 查看高危建议
grep -n "warning" /var/log/lynis-report.dat | head
预期效果:生成主机基线建议与扣分项,形成修复清单。
2)端口与弱口令排查(Nmap)
# 扫描常见端口与服务版本
sudo nmap -sS -sV -O -p 1-1024 10.0.0.10 -oN /var/log/nmap-host.txt
# 针对暴露的管理端口进行复核
grep "open" /var/log/nmap-host.txt
3)容器与镜像漏洞扫描(Trivy)
安装与扫描:
# 安装(Linux)
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh
sudo mv ./bin/trivy /usr/local/bin/
# 扫描镜像(示例)
trivy image --severity HIGH,CRITICAL --format table nginx:1.20
# 扫描本地文件系统依赖(SCA)
trivy fs --severity HIGH,CRITICAL /srv/app
预期效果:输出高危/严重漏洞及CVE列表。
4)K8s 基线检查(kube-bench)
# 安装(Docker方式)
docker run --rm -v /etc:/etc -v /var:/var \
--net host --pid host --user root \
aquasec/kube-bench:latest --version 1.25
# 输出结果包含PASS/FAIL/INFO
2. 人工验证与风险分级(示例)#
高危项复现流程(示例:Redis 未授权)
# 远程尝试连接
redis-cli -h 10.0.0.20 -p 6379 ping
# 若返回 PONG 则存在未授权风险
# 评估影响:是否能写入恶意数据、是否外网可达
风险分级建议
- 严重:可直接拿到数据/权限(CVSS ≥ 9.0)
- 高危:可远程利用或影响核心业务
- 中低危:配置缺陷/信息泄露但影响有限
3. 修复与加固(含配置示例)#
1)Linux SSH 加固
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers ops admin
# 生效
sudo systemctl restart sshd
预期效果:禁止root直登、关闭密码认证、限定用户。
2)MySQL 权限与远程访问限制
-- 禁止root远程访问,仅允许本机
UPDATE mysql.user SET Host='localhost' WHERE User='root';
FLUSH PRIVILEGES;
-- 创建最小权限账户
CREATE USER 'appuser'@'10.0.%' IDENTIFIED BY 'StrongPass!2024';
GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO 'appuser'@'10.0.%';
3)Nginx 管理接口隔离与TLS加固
# /etc/nginx/conf.d/admin.conf
server {
listen 443 ssl;
server_name admin.example.com;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
allow 10.0.0.0/24;
deny all;
proxy_pass http://127.0.0.1:8080;
}
}
重载:
sudo nginx -t && sudo systemctl reload nginx
4)K8s RBAC 约束(示例)
# /etc/k8s/rbac-readonly.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: prod
name: readonly
rules:
- apiGroups: ["", "apps"]
resources: ["pods","deployments","services"]
verbs: ["get","list","watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: readonly-bind
namespace: prod
subjects:
- kind: User
name: devuser
roleRef:
kind: Role
name: readonly
apiGroup: rbac.authorization.k8s.io
应用:
kubectl apply -f /etc/k8s/rbac-readonly.yaml
4. 验证与回归(含命令)#
复测示例:端口与权限
# 复扫端口
nmap -sS -p 1-1024 10.0.0.10 -oN /var/log/nmap-retest.txt
# 验证SSH禁止root与密码登录
ssh root@10.0.0.10
# 预期:拒绝登录
# 验证MySQL权限
mysql -u appuser -p -h 10.0.0.30 -e "SHOW DATABASES;"
# 预期:仅能访问授权库
5. CI/CD 安全门禁示例(Jenkins Pipeline)#
pipeline {
agent any
stages {
stage('Build') { steps { sh 'docker build -t app:1.0 .' } }
stage('Scan') {
steps {
sh 'trivy image --exit-code 1 --severity HIGH,CRITICAL app:1.0'
}
}
stage('Deploy') { steps { sh 'kubectl apply -f k8s/deploy.yaml' } }
}
}
预期效果:若出现高危漏洞,流水线失败并阻断发布。
6. 常见故障与排错#
1)Trivy 扫描失败(DB更新错误)
排错:
# 手动更新数据库
trivy --download-db-only
# 设置代理
export HTTPS_PROXY=http://proxy:3128
2)kube-bench 报错“Not a master node”
排错:
# 指定版本与模式
docker run --rm --net host aquasec/kube-bench:latest --version 1.25 --benchmark cis-1.6
3)SSH 加固后无法登录
排错步骤:
1. 保留一个已登录会话
2. 检查 /etc/ssh/sshd_config 配置
3. 使用 sshd -T 验证配置
sshd -T | grep -E "permitrootlogin|passwordauthentication"
7. 练习与验收#
练习
1. 使用 Lynis 扫描一台主机并输出前三条高危建议。
2. 通过 Trivy 扫描一个镜像并修复一个高危 CVE。
3. 为 K8s 创建只读角色并验证权限限制。
验收指标
- 漏洞修复 SLA 达标率、误报率、复现率、重复问题占比
- 关键系统高危漏洞清零时长、发布门禁拦截率
- 合规检查覆盖率与基线一致性
通过标准化流程、自动化测试与持续加固,形成可持续、可审计的安全能力。