AbdaullahAG/autonomous-ai-red-blue-lab
GitHub: AbdaullahAG/autonomous-ai-red-blue-lab
一个基于多智能体的自动化网络安全实验室,利用不同 LLM 在 Docker 环境中自主完成红队攻击与蓝队补丁修复的闭环对抗。
Stars: 0 | Forks: 0
# 🤖⚔️ AI 红蓝对抗实验室
## ⚡ 关键数据
| 指标 | 阶段 1 (PoC) | 阶段 2 (自主) |
|--------|:---:|:---:|
| 🏗️ 应用构建与部署 | ~15秒 | ~15秒 |
| 💥 完整攻击周期 (nmap → SQLi → XSS) | **70秒** | **70秒** |
| 🛡️ 补丁生成与重新部署 | ~30秒 | **~30秒** |
| 🔁 验证循环 | 手动 | **自主** |
| ⏱️ **端到端总耗时** | **取决于人类速度** | **< 2 分钟** |
| 💰 **总 API 成本** | **~$0.08** | **~$0.08** |
| 👤 **人工干预** | **每个阶段都需要** | **零** |
## 🎯 项目简介
这是一个完全自主的 **AI 网络安全研究实验室**,两个不同的 AI 模型在真实的攻击-防御-修补-验证周期中展开正面交锋。
- 🔴 **红方智能体** (`GPT-4o`) 使用 `nmap`、`sqlmap` 和 `curl` 进行攻击,然后编写结构化的威胁情报报告
- 🔵 **蓝方智能体** (`gpt-5.2`) 构建目标应用,阅读攻击报告,使用纵深防御技术修补漏洞,并重新构建容器
- 🔴 **红方智能体** 对修补后的代码进行重新测试 —— 切换角色充当**中立安全审计员**
- 🧠 **编排器** (`orchestrator.py`) 将所有内容连接成一个实时的闭环流水线
**关键设计决策:** 使用两个不同的模型(GPT-4o 对决 gpt-5.2)创造了真正的不对称性 —— 每个模型为其角色带来了不同的推理模式,使得实验比单一模型扮演双方角色更具现实意义和科学严谨性。
## 🏗️ 系统架构
```
flowchart TD
O([🧠 orchestrator.py\nMaster Controller])
O -->|Phase 1: Launch attack| R
subgraph RED ["🔴 Red Agent — GPT-4o"]
R[Recon: nmap] --> R2[Exploit: SQLi + XSS\nnmap · sqlmap · curl]
R2 --> R3[Generate structured\nthreat intelligence report]
end
R3 -->|Attack report + raw logs| O
O -->|Phase 2: Report + vulnerable source code| B
subgraph BLUE ["🔵 Blue Agent — gpt-5.2"]
B[Analyze attack vectors\n& vulnerable code] --> B2[Rewrite app.py\nwith secure patterns]
B2 --> B3[Parameterized Queries\n+ html.escape + CSP Headers]
end
B3 -->|Patched app.py| O
O -->|Phase 3: Hot-reload| D
subgraph DOCKER ["🐳 Docker Container — Python 3.11 / Werkzeug 3.1.8"]
D[docker compose down\nRemove infected container] --> D2[docker compose up --build\nBuild from patched code]
D2 --> D3[Secure webapp live\nlocalhost:5000]
end
D3 -->|New container running| O
O -->|Phase 4: Send patched source for audit| R4
subgraph VERIFY ["🔴 Red Agent — Verification Mode"]
R4[Reason about patched code\nSimulate previous payloads] --> R5{Bypass\nfound?}
R5 -->|No| SEC[✅ SECURE\nPatches confirmed]
R5 -->|Yes| LOOP[🔁 Loop back\nto Blue Agent]
end
style O fill:#1a1a2e,color:#fff,stroke:#e94560
style RED fill:#2d0000,color:#fff,stroke:#ff4444
style BLUE fill:#001a2d,color:#fff,stroke:#4488ff
style DOCKER fill:#002d1a,color:#fff,stroke:#44ff88
style VERIFY fill:#2d1a00,color:#fff,stroke:#ffaa44
style SEC fill:#004400,color:#fff,stroke:#44ff44
style LOOP fill:#2d0000,color:#fff,stroke:#ff4444
```
## 🚀 快速开始
### 前置条件
- Kali Linux (预装 nmap + sqlmap)
- Docker + Docker Compose
- Azure OpenAI 资源,包含**两个部署**:GPT-4o 和 gpt-5.2
- Python 3.11+
### 1. 克隆与设置
```
git clone https://github.com/YOUR_USERNAME/ai-red-blue-lab.git
cd ai-red-blue-lab
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
```
### 2. 配置凭据
```
cp .env.example .env
nano .env # fill in your Azure keys and deployment names
python3 test_connection.py
# Expected output:
# 🔴 Red Agent (GPT-4o): ✅ Connection successful. Tokens: 15
# 🔵 Blue Agent (gpt-5.2): ✅ Connection successful. Tokens: 16
```
### 阶段 1 — 分步指南 (PoC)
```
# Deploy vulnerable target
cd webapp && docker compose up -d --build && cd ..
# Attack
python3 red_agent/red_agent.py
# Patch
python3 blue_agent/blue_agent.py
cd webapp && docker compose down && docker compose up -d --build && cd ..
# Re-test
bash red_agent/retest.sh
```
### 阶段 2 — 完全自主 (单条命令)
```
python3 orchestrator.py
```
## 📁 项目结构
```
ai-red-blue-lab/
├── 📄 README.md ← you are here (includes full write-up)
├── 📄 requirements.txt
├── 📄 .env.example
├── 📄 test_connection.py ← verify both model connections
├── 🧠 orchestrator.py ← Phase 2: single-command autonomous loop
│
├── 🌐 webapp/
│ ├── app.py ← vulnerable → patched Flask app
│ ├── app.py.backup ← auto-saved before patch
│ ├── Dockerfile ← Python 3.11-slim
│ └── docker-compose.yml
│
├── 🔴 red_agent/
│ ├── red_agent.py ← GPT-4o powered attack + analysis
│ ├── attack.sh ← nmap + sqlmap + curl pipeline
│ └── retest.sh ← post-patch verification script
│
├── 🔵 blue_agent/
│ └── blue_agent.py ← gpt-5.2 powered patch agent
│
└── 📊 logs/ ← auto-generated during run
├── red_team_report.txt ← raw attack output
├── ai_red_analysis.txt ← GPT-4o threat intelligence
├── blue_patch_report.txt ← patched source code
├── retest_report.txt ← verification results
└── sqlmap/ ← sqlmap session + dumps
```
# 📖 详述:当 AI 攻击自身
## 我脑海中挥之不去的想法
如果两个 AI 智能体相互对抗 —— 一个构建并防御 Web 应用,另一个试图攻破它会怎样?两个不同的模型。没有人工干预。无需等待。终端命令中没有拼写错误。
我运行了这个实验。结果比预期的更有趣 —— 不仅因为攻击和防御都起作用了,而是因为**一切发生得太快了**。
## 环境设置
**两个模型。两个角色。一个隔离的 Kali Linux 虚拟机。**
| 智能体 | 模型 | 角色 |
|-------|-------|------|
| 🔴 红方智能体 | GPT-4o (Azure OpenAI) | 攻击,分析发现,验证补丁 |
| 🔵 蓝方智能体 | gpt-5.2 (Azure OpenAI) | 构建目标应用,修补漏洞 |
**目标技术栈:** Flask · SQLite · Werkzeug 3.1.8 · Python 3.11.15 · Docker
**为什么用两个不同的模型?** 使用 GPT-4o 进攻和 gpt-5.2 防御创造了真正的不对称性 —— 每个模型为其角色带来了不同的推理模式。单一模型扮演双方角色会产生有偏见的结果。
**关于工具的说明:** 我们最初使用 AutoGen 进行智能体编排,但遇到了库冲突 —— AutoGen 内置的 `openai` v0.x 与现代的 `openai` v1.x SDK 发生冲突。我们废弃了它并直接调用 Azure OpenAI API。更简单,更快,没有任何魔法。
## 阶段 1:概念验证
### 第一幕 —— 蓝方智能体构建目标 ⏱️ 15秒
蓝方智能体 (`gpt-5.2`) 接到一个指令:构建一个 Flask/SQLite Web 应用,通过 Docker 部署,并为实验故意在其中留下两个漏洞。
**漏洞 1:SQL 注入**
```
# ❌ User input injected directly into SQL query
query = f"SELECT * FROM users WHERE username='{user}' AND password='{pwd}'"
cur.execute(query)
```
**漏洞 2:存储型 XSS**
```
# ❌ Raw user input stored and rendered without sanitization
comments_html = "".join(f"
两个 AI 智能体。两个不同的模型。一个攻击。一个防御。
完全自主的闭环。不到 2 分钟。约 $0.08。
{r[0]}
" for r in rows) ``` 数据库预置了两个用户:`admin:secret123` 和 `alice:pass456`。 从执行脚本到 `Container vulnerable-webapp Started`:**15 秒**。 ``` $ curl -s http://localhost:5000/login | grep -o ".*
"Login
# ✅ App is live on port 5000 ``` ### 第二幕 —— 红方智能体攻击 ⏱️ 70秒 红方智能体 (`GPT-4o`) 自动运行了四阶段的攻击脚本。 **阶段 1 —— 侦察:nmap (6.38 秒)** ``` PORT STATE SERVICE VERSION 5000/tcp open http Werkzeug httpd 3.1.8 (Python 3.11.15) ``` 框架版本指纹已识别。我们清楚自己面对的是什么了。 **阶段 2 —— 手动 SQL 注入 (< 1 秒)** ``` Payload: admin' OR '1'='1 Response: ✅ Welcome admin! ``` 第一次尝试就绕过了登录。经典的基于 OR 的注入。 **阶段 3 —— sqlmap 自动化扫描 (10 秒)** sqlmap 自动识别出后端为 SQLite,然后在同一个 `username` 参数上发现了**三种注入技术**: ``` Type: boolean-based blind Payload: username=admin' AND CASE WHEN 1348=1348 THEN 1348 ELSE JSON(CHAR(69,74,90,69)) END AND 'xgKy'='xgKy Type: time-based blind Payload: username=admin' AND 7314=LIKE(CHAR(65,66,67,68,69,70,71), UPPER(HEX(RANDOMBLOB(500000000/2)))) AND 'fesM'='fesM Type: UNION query (3 columns) Payload: username=-5323' UNION ALL SELECT NULL,CHAR(113,120,112,107,113) ||CHAR(70,109,100,...)||CHAR(113,120,118,106,113),NULL-- qZAZ ``` 然后转储了整个 users 表 —— 总共 100 个 HTTP 请求: ``` Database: SQLite_masterdb Table: users +----+-----------+----------+ | id | password | username | +----+-----------+----------+ | 1 | secret123 | admin | | 2 | pass456 | alice | +----+-----------+----------+ ``` **阶段 4 —— 存储型 XSS (< 1 秒)** ``` Payload stored: Reflected back: ✅ Script tag present — executes in any victim's browser ``` **总计:70 秒。100 个 HTTP 请求。所有凭据被盗。XSS payload 生效。** 然后 GPT-4o 分析了自己的攻击输出,并生成了一份结构化的威胁情报报告: | 漏洞 | 严重性 | 影响 | |---|---|---| | SQL 注入 | **严重** | 完全的数据库沦陷,身份验证绕过 | | 存储型 XSS | **高危** | 在所有访问者上执行任意 JavaScript | *此分析的 API 成本:4,667 个 token —— 约 $0.05。* ### 第三幕 —— 蓝方智能体修补代码 ⏱️ 30秒 GPT-4o 的威胁报告连同存在漏洞的 `app.py` 直接传给了蓝方智能体 (`gpt-5.2`)。没有人阅读报告。也没有人编写修复程序。 **修复 1:参数化查询** ``` # ✅ SQL logic and user data are now completely separated cur.execute("SELECT * FROM users WHERE username=? AND password=?", (user, pwd)) ``` 数据库驱动处理转义。用户输入始终被视为字面值 —— 绝不会被视为 SQL 语法。 **修复 2:输出编码 + CSP 标头** ``` # ✅ Special characters neutralized before rendering import html comments_html = "".join(f"{html.escape(r[0])}
" for r in rows) # + Content-Security-Policy: script-src 'self' (added to response headers) ``` 蓝方智能体自动保存了原始文件的备份 (`app.py.backup`),编写了修补后的版本,随后编排器触发了 Docker 重新构建: ``` [+] Building 1.6s (11/11) FINISHED ✔ Container vulnerable-webapp Started ✅ ``` *补丁生成的 API 成本:2,561 个 token。* ### 第四幕 —— 红方智能体验证修复 ⏱️ 3秒 相同的 payload。相同的工具。不同的结果。 **SQL 注入 —— 已拦截** ``` Payload: admin' OR '1'='1 Result: ❌ Invalid credentials ``` **sqlmap —— 全套武器库,一无所获** ``` [WARNING] POST parameter 'username' does not seem to be injectable [WARNING] POST parameter 'password' does not seem to be injectable [CRITICAL] all tested parameters do not appear to be injectable. ``` sqlmap 尝试了所有方法。基于布尔的、基于时间的、UNION —— 全部失败。 **存储型 XSS —— 已转义** ``` Input: Output: <script>alert("XSS_PWNED")</script> ``` 作为纯文本存储。浏览器渲染它,但不执行它。 **合法登录仍然有效:** ``` username=admin&password=secret123 → ✅ Welcome admin! ``` 补丁没有破坏任何功能。 | 漏洞 | 修补前 | 修补后 | |---|---|---| | SQL 注入 —— 手动 | ❌ 被利用 | ✅ 已拦截 | | SQL 注入 —— sqlmap | ❌ 数据库被完全转储 | ✅ 无法注入 | | 存储型 XSS | ❌ 脚本被执行 | ✅ 被转义为纯文本 | | 合法登录 | ✅ 有效 | ✅ 依然有效 | ## 阶段 2:完全自主的闭环 阶段 1 通过步骤之间的手动交接验证了概念。阶段 2 则彻底消除了这些步骤。 `orchestrator.py` 将两个智能体连接在一个**闭环反馈系统**中 —— 这是一个只需单条命令即可从头到尾运行的自愈式安全流水线。 **阶段 4 中关键的工程决策:** 红方智能体不仅仅是重新运行 `attack.sh`。它会接收实际的修补后的 Python 源代码,并*推理*其之前的 payload 是否能针对新逻辑成功。这是代码级别的安全分析,而不是盲目的工具重新执行。模型必须理解补丁为何有效 —— 或者在无效时找出漏洞。 ### 实时编排器输出 ``` 🚀 Starting Joint Operations Room: Red Team vs Blue Team... ================================================== 🔥 [Phase 1] Launching Red Agent (GPT-4o)... 📝 Red Agent successfully generated attack report! 🛡️ [Phase 2] Orchestrator hands report to Blue Agent (gpt-5.2)... 🛠️ Blue Agent patched the code and rewrote app.py automatically! 🐳 [Phase 3] Orchestrator rebuilds Docker with patched code... 🔄 Container updated. Secure version now live. 🎯 [Phase 4] Calling Red Agent for verification audit... ================================================== 🏁 Final Verification Report: 1. SQL Injection Analysis: Patched: cur.execute("SELECT ... WHERE username=?", (user,)) Payload: admin' OR '1'='1 Result: ❌ BLOCKED — Parameterized queries neutralize the injection. 2. Stored XSS Analysis: Patched: html.escape() + Content-Security-Policy: script-src 'self' Payload: Result: ❌ BLOCKED — Rendered as <script>. CSP blocks inline JS. System Status: SECURE 🛡️ ================================================== ``` ### 为什么 CSP 标头是有趣的部分 蓝方智能体在未被要求的情况下应用了**纵深防御**: - 第一层:`html.escape()` 在 Python 层面将 `