rahilmadoune/Hacker_vs_Defender

GitHub: rahilmadoune/Hacker_vs_Defender

一款基于 Python 和 Pygame 开发的网络安全防御模拟游戏,让玩家通过实际防御操作抵御模拟的 AI 攻击者来学习网络安全原理。

Stars: 0 | Forks: 0

# 🛡️ Hacker vs Defender — 网络安全模拟 [![CI Status](https://github.com/rahilmadoune/hacker-vs-defender/actions/workflows/ci.yml/badge.svg)](https://github.com/rahilmadoune/hacker-vs-defender/actions) [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ## 📸 游戏截图 ![Main Menu](https://static.pigsec.cn/wp-content/uploads/repos/cas/66/661a8004eb717c0ed0a7f3316da69218a5092d0f11b02b814c8fd475aaeced00.png) *图 1:包含难度选择、游戏指南访问和持久化排行榜的主菜单。* ![Active Gameplay](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/999b0146cd5e23885d72502c178bd2245b309f49b56e6dc69f68eea1670c3c64.png) *图 2:显示数据包流、节点状态警报和防火墙激活状态的模拟画面。* ## 📋 目录 - [项目概述](#-project-overview) - [游戏概念](#-game-concept) - [网络安全学习目标](#-cybersecurity-learning-objectives) - [使用的技术](#️-technologies-used) - [项目结构](#-project-structure) - [如何运行](#-how-to-run) - [游戏指南](#-gameplay-guide) - [游戏机制](#️-game-mechanics) - [难度系统](#-difficulty-system) - [测试与 CI](#-testing--ci) - [未来改进](#-future-improvements) ## 📌 项目概述 **Hacker vs Defender** 是一个学术级的网络安全模拟游戏,玩家将扮演一名网络安全分析师,负责保护企业网络免受持续的 AI 驱动的攻击者的攻击。 该模拟模拟了真实的攻击生命周期——从前期的侦察和端口扫描,到主动利用,再到横向移动和服务器攻陷——并要求玩家使用真实的防御技术进行应对。 本项目作为 **Python 大学课程作业** 开发,旨在展示对以下方面的实际理解: - 网络安全原则 - 攻击模拟与建模 - 防御对策 - 入侵检测系统 它也被构建为一个合格的 **独立软件工程项目**:代码库经过了完整的单元测试,并在每次 push 时运行持续集成,而不仅仅是一个课程作业演示。 ## 🎮 游戏概念 网络包含: - **7 个节点** — 工作站和数据库服务器 - **1 个中央服务器** — 主要目标(必须受到保护) - **一个可配置的防火墙** — 可以阻止攻击者流量 - **模拟的网络端口** — SSH、HTTP、FTP、MySQL、Telnet、SMB 等 **AI 攻击者** 遵循 **Cyber Kill Chain**: 1. 🔍 **侦察** — 通过 ping 扫描发现存活主机 2. 🔎 **扫描** — 枚举开放端口(模拟 TCP SYN 扫描) 3. 💥 **利用** — 基于概率对开放端口进行漏洞利用尝试 4. 🔗 **持久化 / 横向移动** — 通过被攻陷的节点向服务器跳板渗透 **玩家(Defender)** 必须: - 使用 IDS 日志检测可疑活动 - 在易受攻击的端口被利用之前将其关闭 - 激活防火墙以阻止攻击者的 IP - 修复受损节点以恢复健康度 - 使用蜜罐和紧急封锁等战略工具 - 坚持生存指定的攻击波数以获得胜利 ## 🎓 网络安全学习目标 | 概念 | 实现 | |--------|---------------| | **Cyber Kill Chain** | AI 攻击者阶段(侦察 → 扫描 → 利用 → 持久化) | | **端口安全** | 开放/关闭/过滤的端口状态,服务枚举 | | **防火墙管理** | 带有 IP 封锁规则的可切换防火墙 | | **入侵检测** | 带有基于严重程度的警报和扫描计数器的 IDS | | **漏洞修补** | 恢复健康度,端口加固操作 | | **欺骗技术** | 部署蜜罐以误导攻击者 | | **攻击概率建模** | 漏洞利用成功概率随时间升级 | | **事件响应** | 玩家必须在时间压力下优先采取行动 | | **网络拓扑** | 节点、连接和信任区域的可视化表示 | ## 🛠️ 使用的技术 | 技术 | 用途 | |-----------|---------| | **Python 3.9+** | 核心语言 | | **Pygame 2.x** | 2D 渲染、事件处理、动画 | | **dataclasses** | 网络实体的整洁、类型化数据模型 | | **enum** | 类型安全的状态机 | | **random** | 蒙特卡洛漏洞利用概率模拟 | | **time** | 冷却管理,IDS 时间戳 | | **pytest** | 单元测试套件 | | **GitHub Actions** | 跨 Python 3.9–3.12 的持续集成 | ## 📁 项目结构 ``` hacker-vs-defender/ │ ├── main.py # Entry point, game loop & state machine ├── network.py # Network topology, nodes, ports, firewall, IDS ├── attacker_ai.py # AI hacker — kill chain phases, packet animation ├── defender_actions.py # Player actions, scoring system, cooldowns ├── ui.py # Pygame rendering — diagram, HUD, log panel, tutorial ├── high_scores.py # Persistent leaderboard & tutorial-seen flag (scores.json) ├── assets/ # Screenshots and future image/sound assets ├── tests/ # pytest unit test suite │ ├── test_network.py │ ├── test_attacker.py │ ├── test_defender.py │ └── test_high_scores.py ├── pytest.ini # pytest configuration ├── requirements.txt # Runtime dependencies ├── requirements-dev.txt # Development/test dependencies ├── .gitignore ├── LICENSE # MIT License └── README.md # This file ``` ### 模块职责 **`network.py`** 定义了核心模拟实体:`NetworkNode`、`Port`、`Firewall` 和 `IDS`。提供 `build_network()` 工厂来构建初始拓扑。 **`attacker_ai.py`** 将 `AttackerAI` 类实现为在 kill chain 各个阶段循环的有限状态机。包含用于动画流量可视化的 `Packet` 类、三个可配置的难度配置文件,以及用于蜜罐减速效果的 `speed_multiplier` 钩子。 **`defender_actions.py`** 提供带有六个防御者动作的 `DefenderController`,每个动作都有自己的冷却时间。`ScoreTracker` 会根据玩家的动作和网络事件增加/扣除分数,并评估输/赢条件。 **`ui.py`** 整个 Pygame 渲染引擎。绘制网络图、HUD、带冷却条的动作栏、IDS 警报日志、主菜单(含排行榜)、游戏结束界面以及多页的 How to Play 教程。 **`high_scores.py`** 轻量级的 JSON 持久化层(`scores.json`),存储前 5 名最高分数以及玩家是否完成了首次运行教程。 **`main.py`** 顶层 `HackerVsDefender` 类通过 `MENU → HOW_TO_PLAY → PLAYING → GAME_OVER` 状态机协调所有系统。 ## 🚀 如何运行 ### 前置条件 - Python 3.9 或更高版本 - pip ### 安装 ``` # 1. Clone the repository git clone https://github.com/your-username/hacker-vs-defender.git cd hacker-vs-defender # 2. (Optional) Create a virtual environment python -m venv venv source venv/bin/activate # Linux / macOS venv\Scripts\activate.bat # Windows # 3. Install dependencies pip install -r requirements.txt # (Optional) Install development dependencies for testing pip install -r requirements-dev.txt # 4. Run the game python main.py # 5. Run the test suite python -m pytest ``` ### 控制 | 按键 | 动作 | |-----|--------| | `S` | 扫描网络 | | `C` | 关闭端口(在选中的节点上) | | `F` | 切换防火墙 | | `P` | 修复节点 | | `H` | 部署蜜罐 | | `L` | 紧急封锁 | | `ESC` | 返回菜单(或跳过教程) | | `←` / `→` | 导航 How to Play 页面 | | `Enter` | How to Play 中的 下一步 / 完成 | | **鼠标点击(节点)** | 选择节点作为目标 | | **鼠标点击(按钮)** | 执行动作 | ## 🎮 游戏指南 1. 从主菜单**选择难度**(Easy / Medium / Hard)。 2. **网络图**显示所有节点当前的安全状态。 3. 查看 **IDS 日志**(右侧面板)以获取警报——CRITICAL 警报需要立即处理。 4. **端口徽章**(节点上的带编号圆圈)显示攻击者可以利用多少个开放端口。 5. **关闭端口**并**修复节点**以减少攻击面。 6. 尽早**激活防火墙**——它会阻止攻击者的 IP 并显著减缓其进度。 7. 坚持生存**攻击波数**以获得奖励分数。 8. 当您在不让服务器被攻陷的情况下撑过目标波数(Easy = 3,Medium = 5,Hard = 7)时,游戏将以**胜利**告终;如果服务器的健康度降至 0%,则以**失败**告终。 9. 分数会自动保存到本地排行榜(前 5 名),并显示在主菜单和游戏结束界面上。 ### 节点颜色指南 | 颜色 | 含义 | |--------|---------| | 🟢 绿色 | 安全 | | 🟡 黄色 | 正在被攻击者扫描 | | 🟠 橙色 | 脆弱(发现开放端口) | | 🔴 红橙色 | 遭到主动攻击 | | ❤️ 绯红色 | 已被攻陷 | | 🔵 青色 | 已修复 | ## ⚙️ 游戏机制 ### 攻击者 AI — Kill Chain AI 循环经历四个阶段: | 阶段 | 行为 | |-------|-----------| | 侦察 | 发现节点(模拟 ping 扫描) | | 端口扫描 | 枚举已知节点上的开放端口 | | 漏洞利用 | 基于概率对开放端口进行漏洞利用尝试 | | 持久化 | 通过被攻陷的节点向服务器进行横向移动 | **升级**:攻击者的漏洞利用成功概率会随着时间的推移而增加,模拟了一个更有经验或更坚决的对手。 ### 计分 | 事件 | 分数 | |-------|--------| | 关闭端口 | +50 | | 修复节点 | +75 | | 阻挡攻击 | +30 | | 激活防火墙 | +40 | | 网络扫描 | +20 | | 部署蜜罐 | +60 | | 紧急封锁 | +80 | | 坚持一波 | +100 | | 游戏获胜 | +300 | | 节点被攻陷 | −150 | | 服务器受损 | −50 | | 服务器被攻陷 | −500 | ### 防御者冷却时间 | 动作 | 冷却时间 | |--------|----------| | 扫描网络 | 8s | | 关闭端口 | 5s | | 切换防火墙 | 15s | | 修复节点 | 12s | | 部署蜜罐 | 25s | | 紧急封锁 | 40s | ## 🎚️ 难度系统 | 设置 | 扫描间隔 | 攻击间隔 | 利用几率 | 最大目标数 | 波数间隔 | 获胜波数 | |---------|--------------|-----------------|---------------|-------------|---------------|---------------| | **Easy** | 4.0s | 6.0s | 25% | 1 | 45s | 3 | | **Medium** | 2.5s | 3.5s | 40% | 2 | 30s | 5 | | **Hard** | 1.0s | 1.8s | 60% | 3 | 20s | 7 | ## 🧪 测试与 CI 核心模拟逻辑——网络状态、攻击者 AI、防御者动作、计分和高分持久化——由 `tests/` 中的 `pytest` 套件覆盖。UI 渲染(`ui.py`)被有意排除在单元测试之外,因为它是最好通过实际玩游戏来验证的 Pygame 绘制代码。 ``` pip install -r requirements-dev.txt python -m pytest ``` 每次 push 和 pull request 都会自动通过 GitHub Actions(`.github/workflows/ci.yml`)在 **Python 3.9、3.10、3.11 和 3.12** 环境下运行完整的测试套件,因此本 README 中的兼容性声明是经过持续验证的,而不仅仅是口头声明。 ## 🔮 未来改进 - [x] **保存高分** — 通过 JSON 实现持久化排行榜 - [x] **游戏内引导** — 首次运行的 How to Play 教程 - [ ] **多种攻击媒介** — DDoS 模拟、SQL 注入、网络钓鱼 - [ ] **网络流量可视化** — 数据包图表 / 流向图 - [ ] **节点角色** — 添加路由器、VPN 网关、DMZ 区段 - [ ] **攻击者档案** — 脚本小子、国家级黑客、内部威胁 - [ ] **事件回放** — 游戏后查看完整的攻击时间线 - [ ] **音效** — 警报声,防火墙激活音效 - [ ] **可在网页游玩的版本** — 导出 pygbag/WASM 以在浏览器中游玩 - [ ] **多人游戏模式** — 两名玩家,一名攻击者和一名防御者 ## 📚 学术参考 本模拟借鉴了以下网络安全框架: - **Lockheed Martin Cyber Kill Chain** — 7 阶段入侵模型 - **MITRE ATT&CK 框架** — 对手的战术、技术和程序 - **NIST SP 800-61** — 计算机安全事件处理指南 - **CIS Controls** — 优先的防御性安全行动 ## 👤 作者 **Rahil Aya Soulaf MADOUNE** ## 📄 许可证 在 [MIT 许可证](LICENSE) 下发布——可免费使用、修改和分发,但需注明出处。 *作为一个网络安全项目的测试游戏开发。所有攻击模拟均为虚构,仅供教育目的。*
标签:安全规则引擎, 底层分析