hubertwojcik/redteam-vs-blueteam-lab

GitHub: hubertwojcik/redteam-vs-blueteam-lab

一个分三个阶段记录红蓝对抗实战的安全实验室,通过加固前后的实证对比展示系统性防御与实时检测的实际效果。

Stars: 0 | Forks: 0

# 红队对蓝队实验室 一个实践安全实验室,记录了跨三个阶段的完整红队对蓝队模拟——加固前、加固过程本身以及加固后。旨在展示实证安全思维:不仅是理论,而是可衡量的加固前后影响。 ## 本项目展示的内容 - 在未加固 Linux 系统上的侦察和攻击技术 - 使用 Ansible 进行系统性加固(SSH 密钥、Fail2ban、UFW、AppArmor) - 加固后重新执行相同的攻击,并记录其失败模式 - 使用 Wazuh 进行实时检测——自定义规则在攻击模式发生时触发告警 - 蓝队思维:运行手册、检查清单、日志分析、威胁建模 目标不是展示攻击命令——而是展示**它们带来的改变**,以及防御者如何思考以消除这一差距。 ## 实验室架构 ``` ┌─────────────────────┐ ┌──────────────────────────┐ │ Kali Linux (VM2) │ │ Ubuntu 22.04 (VM1) │ │ Red Team / Attack │ ───────► │ Target + Wazuh Agent │ │ │ │ 192.168.x.x │ └─────────────────────┘ └──────────┬───────────────┘ │ agent → manager ┌──────────▼───────────────┐ │ Wazuh Manager (VM3) │ │ SIEM / Alert console │ └──────────────────────────┘ Host-only network (isolated, no internet access) ``` ## 阶段结构 ### 第一阶段 —— 对未加固系统的攻击 **目标:** 建立基线。攻击者能在针对默认 Ubuntu 安装的攻击中了解并执行什么? 使用的工具: - `nmap` —— 端口扫描、服务指纹识别、OS 检测 - `hydra` —— 针对默认凭据的 SSH 暴力破解 - `nikto` —— Web 服务扫描(如适用) **记录的结果:** 开放端口、发现的服务、成功的暴力破解、信息泄露。 → 参见 [`rounds/round1-pre-hardening/findings.md`](rounds/round1-pre-hardening/findings.md) ### 第二阶段 —— 使用 Ansible 进行加固 **目标:** 对 VM1 应用可重现的加固基线。无需手动更改——一切皆代码化。 应用的加固: | 控制 | 实现 | |---|---| | 禁用 SSH root 登录 | 在 sshd_config 中设置 `PermitRootLogin no` | | 禁用密码认证 | 仅限 SSH 密钥 | | 暴力破解防护 | 设置了激进阈值的 Fail2ban | | 防火墙 | UFW —— 拒绝除 SSH 外的所有入站流量 | | 进程隔离 | 强制执行 AppArmor 配置文件 | | 检测代理 | 安装并注册 Wazuh Agent | 变量(端口、用户、阈值)集中在 `ansible/group_vars/all.yml` 中——角色中没有硬编码。 → 参见 [`ansible/playbooks/hardening.yml`](ansible/playbooks/hardening.yml) ### 第三阶段 —— 相同的攻击,在加固 + Wazuh 监控之后 **目标:** 重新执行第一阶段的攻击,记录哪些失败了、为什么失败,以及 Wazuh 实时检测到了什么。 **记录的结果:** 被拦截的 SSH 暴力破解(Fail2ban 封禁 + `/var/log/auth.log` 证据)、减小的攻击面、失败的凭据重用、针对攻击模式触发的 Wazuh 告警。 → 参见 [`rounds/round3-post-hardening/findings.md`](rounds/round3-post-hardening/findings.md) → 参见 [`rounds/round3-post-hardening/wazuh-alerts.md`](rounds/round3-post-hardening/wazuh-alerts.md) ## 仓库结构 ``` redteam-vs-blueteam-lab/ │ ├── environment/ │ ├── diagram.png # Network topology │ ├── lab-setup.md # VM config, network mode, OS versions │ ├── vm-specs.md # Hardware specs (anonymized IPs) │ ├── baseline-state.md # What the target looks like before any changes │ └── threat-model.md # Attacker profile, goals, assumptions — read first │ ├── ansible/ │ ├── inventory.ini │ ├── group_vars/ │ │ └── all.yml # Central variables: ports, users, thresholds │ ├── playbooks/ │ │ └── hardening.yml # Full hardening playbook │ └── roles/ │ ├── ssh-hardening/ │ ├── fail2ban/ │ ├── firewall/ │ └── wazuh-agent/ # Installs and enrolls the Wazuh agent │ ├── wazuh/ │ ├── setup.md # How to stand up Wazuh Manager │ ├── custom-rules/ │ │ └── ssh-bruteforce.xml # Custom detection rule for Hydra-style attacks │ └── alerts-examples/ # Screenshots of alerts firing during Round 3 │ ├── rounds/ │ ├── round1-pre-hardening/ │ │ ├── findings.md │ │ ├── nmap-scan.txt │ │ ├── hydra-results.txt │ │ └── screenshots/ │ ├── round2-hardening/ │ │ ├── changes-applied.md │ │ ├── ansible-run-log.txt │ │ └── screenshots/ │ └── round3-post-hardening/ │ ├── findings.md │ ├── nmap-scan.txt │ ├── hydra-results.txt │ ├── auth-log-excerpt.txt │ ├── wazuh-alerts.md # What Wazuh detected, alert IDs, timeline │ └── screenshots/ │ ├── runbooks/ │ ├── ssh-bruteforce-response.md # Step-by-step IR for SSH brute-force │ ├── hardening-checklist.md # CIS Benchmark-style checklist │ └── lessons-learned.md # What surprised me, what I'd do differently │ └── docs/ └── methodology.md # Why these tools, why this order ``` ## 技术栈 | 类别 | 工具 | |---|---| | 攻击平台 | Kali Linux | | 目标平台 | Ubuntu 22.04 LTS | | 侦察 | Nmap | | 凭据攻击 | Hydra | | Web 扫描 | Nikto | | 漏洞利用(可选) | Metasploit Framework | | 基础设施即代码 | Ansible | | 入侵防御 | Fail2ban | | 防火墙 | UFW / nftables | | 强制访问控制 | AppArmor | | SIEM / 检测 | Wazuh | | 虚拟化 | VirtualBox | ## 关键发现(摘要) | 攻击向量 | 第一阶段(加固前) | 第三阶段(加固后) | |---|---|---| | SSH 端口暴露 | 开放,默认端口 | 开放,非默认端口 | | 通过 SSH 进行 Root 登录 | 允许 | 拦截 | | 密码暴力破解 | 成功 | 尝试 N 次后 IP 被 Fail2ban 封禁 | | 服务指纹识别 | 暴露完整版本信息 | 最少的 banner | | 不必要的服务 | 多个开放端口 | 减少至最低限度 | | 检测 | 无 | 首次尝试后几秒钟内产生 Wazuh 告警 | 包含日志和屏幕截图的完整详细信息位于每个 `rounds/` 目录中。 ## Wazuh:自定义检测规则 `wazuh/custom-rules/ssh-bruteforce.xml` 规则可检测来自单一来源的快速连续 SSH 失败——即 Hydra 产生的模式。这超越了默认的 Wazuh 规则集:它针对第一阶段中观察到的特定攻击签名进行了调整。 这就是蓝队思维变得清晰可见的地方:不仅是“Wazuh 正在运行”,而是“这是规则,这就是为什么阈值设置为 X 的原因,这是它产生的告警。” → 参见 [`wazuh/custom-rules/`](wazuh/custom-rules/) 和 [`rounds/round3-post-hardening/wazuh-alerts.md`](rounds/round3-post-hardening/wazuh-alerts.md) ## 我学到了什么 - Ansible 使加固变得**可审计**——任何人都可以阅读 playbook 并确切知道发生了什么改变,而且 `group_vars` 将配置集中在一处 - Fail2ban 日志是攻击发生并被拦截的最清晰证明——比任何屏幕截图都好 - 编写自定义 Wazuh 规则迫使你不仅要了解工具层面,还要在日志层面理解攻击模式 - 威胁建模决定了一切:了解假设的攻击者有助于确定哪些控制最为关键 - “默认安全”在原生 Ubuntu 上是一个神话——第一阶段和第三阶段之间的差距是巨大的 → 完整的反思见 [`runbooks/lessons-learned.md`](runbooks/lessons-learned.md) ## 自己运行该实验室 ``` # 审查基线状态(无需 playbook —— 已记录在 environment/ 中) cat environment/baseline-state.md # 从 Kali 运行第一轮攻击,记录结果 # 应用加固 + 注册 Wazuh agent ansible-playbook -i ansible/inventory.ini ansible/playbooks/hardening.yml # 重新运行攻击,观察 Wazuh 告警,比较结果 ``` 完整的 VM 设置说明请参见 [`environment/lab-setup.md`](environment/lab-setup.md),Wazuh Manager 设置请参见 [`wazuh/setup.md`](wazuh/setup.md)。 ## 作者 作为作品集项目构建,旨在展示实用的安全工程技能——攻击意识、系统性防御、基础设施即代码规范以及实时检测工程。
标签:Ansible, CTI, Wazuh, 安全实验靶场, 插件系统, 系统加固, 系统提示词