国庆重保红蓝演练六红队全链路攻击报告复盘与短板修补在国庆重保进入战备倒计时阶段安全红队展开了为期 72 小时的无限制全链路实战渗透演习。演练目标设定为获取核心交易数据库的只读权限及内网域控制器的企业管理员凭据。红队最终在演练第 46 小时完成了目标突破。演练结束后红蓝双方召开了联合复盘会。本文公布本次全链路攻击的完整渗透路径对照 ATTCK 框架复盘蓝队防御盲区并给出重保前必须完成的五大短板加固措施。红队攻击全链路复盘与 ATTCK 映射本次演练中红队未采用任何“正面强攻公网 WAF 保护下的主站”的低效策略而是通过边缘资产打点与供应链系统协同突破[外网打点] 边缘子公司遗留 Jenkins 弱口令 (T1190) │ ▼ [沙箱逃逸与初始立足] 容器特权挂载 /var/run/docker.sock 逃逸至宿主机 (T1611) │ ▼ [凭据收割] 宿主机配置扫描获取内网 GitLab 部署公钥与只读 Token (T1552) │ ▼ [横向移动] 利用内网跳板机 SSH 密钥复用横向移动至测试环境网段 (T1021.004) │ ▼ [权限提升与跨域突破] 测试环境 Redis 未授权访问 计划任务反弹 Root Shell (T1053) │ ▼ [核心目标突破] 内存提取运维人员全局 SSH 代理 (SSH Agent Forwarding)登陆核心 DB 生产从库 (T1555)--------------------------------------------------------------------------------------- | 攻击阶段 | ATTCK 技术编号 | 现场攻击手法与载荷特征 | --------------------------------------------------------------------------------------- | 1. 初始访问 | T1190 (Exploit Public-Facing)| 扫描发现未纳入资产管理的测试 Jenkins | | 2. 执行与逃逸 | T1611 (Escape to Host) | 利用 Docker Socket 启动特权容器挂载 / | | 3. 凭据访问 | T1552 (Unsecured Credentials)| 提取环境变量与历史命令中的 Git Token | | 4. 横向移动 | T1021 (Remote Services) | 利用 SSH Agent Forwarding 劫持通道 | | 5. 影响与目标 | T1530 (Data from Cloud Repo) | 导出脱敏配置库与数据库连接池明文凭据 | ---------------------------------------------------------------------------------------蓝队暴露的四大核心短板分析1. 资产盲区边缘子公司与测试集群成为“阿喀琉斯之踵”安全运营中心SOC的 EDR 和 NTA 探针覆盖率在核心生产网达到了 99.5%但在收购的边缘子公司和内网测试网段探针覆盖率不足 40%。红队正是利用这一未受监控的灰色地带建立了长期 C2 隧道。2. 容器特权配置泛滥开发团队为了在 CI/CD 中快速构建镜像违规将宿主机的/var/run/docker.sock挂载入容器内部且赋予了privileged: true权限。攻击者只需一条命令即可从容器逃逸至宿主机底层# 红队实操容器逃逸指令 docker run -it --rm -v /:/host_root alpine chroot /host_root /bin/bash3. SSH 代理转发Agent Forwarding滥用运维人员为了登录跳板机后再跳转到内部多台服务器在~/.ssh/config中全局配置了ForwardAgent yes。当攻击者以 Root 权限控制了跳板机后直接通过SSH_AUTH_SOCK劫持了管理员的 SSH 密钥认证会话无需密码即可登录所有被管节点。重保前短板修补与加固实施针对演练暴露的断层问题蓝队在 24 小时内实施了如下强硬加固措施1. 禁用全局 SSH 代理转发与强制双因子认证在所有跳板机与服务器的/etc/ssh/sshd_config中强制关闭 Agent 转发并配置 PAM 模块结合 Google Authenticator 强制二次确认# /etc/ssh/sshd_config 加固配置 AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 22. Kubernetes / Docker 准入控制器OPA Gatekeeper卡点部署准入安全策略彻底封死特权容器与危险目录挂载apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPContainerLimits metadata: name: block-privileged-and-docker-sock spec: match: kinds: - apiGroups: [] kinds: [Pod] parameters: privileged: false forbiddenHostPaths: - /var/run/docker.sock - /var/run/containerd/containerd.sock - /3. 自动化网络微隔离与异常 SSH 劫持检测脚本在各 Linux 主机上部署实时检查脚本定时排查异常未授权 Socket 挂载与特权容器逃逸迹象import os import subprocess import json def inspect_host_security(): anomalies [] # 1. 检查是否存在泄漏的 SSH_AUTH_SOCK 并尝试权限探测 auth_sock os.environ.get(SSH_AUTH_SOCK) if auth_sock and os.path.exists(auth_sock): anomalies.append({ type: SSH_AGENT_EXPOSURE, path: auth_sock, severity: HIGH, desc: Active SSH agent forwarding socket detected in environment. }) # 2. 检查 Docker socket 权限 sock_path /var/run/docker.sock if os.path.exists(sock_path): stat_info os.stat(sock_path) # 检查是否对普通用户具有写权限 if stat_info.st_mode 0o002 or stat_info.st_mode 0o020: anomalies.append({ type: DOCKER_SOCK_PERMISSIVE, severity: CRITICAL, desc: Docker socket has dangerous group/other write permissions. }) return anomalies if __name__ __main__: findings inspect_host_security() if findings: print([!] SECURITY ALERTS FOUND:) print(json.dumps(findings, indent2)) exit(1) else: print([] Host baseline check passed.)通过这一轮实战复盘与紧急收敛我们在封网前消除了 37 处容器高危配置和 84 个无主测试账号使整个攻击面缩减了 80% 以上为重保平稳过渡奠定了坚实基础。
