mjay-kerberos/STEM-QUEST-2026
GitHub: mjay-kerberos/STEM-QUEST-2026
一个结合 AI 的检测工程实训项目,通过构建实时安全系统让学习者体验从攻击模拟到 AI 自动化事件分析的完整 SOC 流程。
Stars: 0 | Forks: 0
# 结合 AI 的检测工程 — 研讨会
**NYC STEM Quest 2026 · Columbia VP&S**
**演讲者:** Juliet Meza
探索检测 pipeline,并通过从零开始构建一个实时的 AI 安全系统,了解如何利用 AI 来协助分析师。你将启动 container,对一个易受攻击的 Web 应用发起真实攻击,并观察 Random Forest 模型对每个请求进行实时评分。然后,一个本地语言模型 (Mistral 7B) 会为每个高风险警报编写一份通俗易懂的事件简报——就像 SOC 分析师所做的那样。
## 你将构建什么
```
[ You, running curl ] ──▶ [ DVWA web app :8080 ]
│
Apache access.log
│ │
[ Promtail ] [ AI Analyst :8000 ]
│ │
[ Loki :3100 ] [ Ollama + Mistral 7B ]
│
[ Grafana :3000 ]
(live dashboards)
```
**7 个 container,全部在你的机器上本地运行。** 无需云。无需 API key。
| Container | 它的功能 |
|---|---|
| `workshop-dvwa` | (Damn Vulnerable Web App) 蓄意留有漏洞的 Web 应用 — 你的攻击目标 |
| `workshop-dvwa-db` | 支持 DVWA 的 MariaDB 数据库 |
| `workshop-ai-analyst` | FastAPI 服务器 — 运行 Random Forest 并编写事件简报 |
| `workshop-ollama` | 本地 LLM runtime (Mistral 7B) |
| `workshop-loki` | 日志存储(接收来自 Promtail 的日志) |
| `workshop-promtail` | 日志收集器(追踪 Apache 日志 → Loki) |
| `workshop-grafana` | 实时 SIEM dashboard |
## 前置条件
- **Docker Desktop** — 在 [docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop) 下载
- 安装完成后:打开 Docker Desktop → **Settings -> Resources** -> 将 **Memory 设置为 8 GB**,**Disk 设置为 25 GB**
- macOS、Windows 10/11 或 Linux 均可
## 步骤 1 — 获取代码仓库
打开终端 (macOS/Linux) 或 PowerShell (Windows) 并运行:
```
git clone https://github.com/mjay-kerberos/STEM-QUEST-2026
cd STEM-QUEST-2026
```
## 步骤 2 — 构建 container 镜像
这将编译 DVWA 包装镜像和 AI 分析师镜像。你只需执行一次此操作。
```
docker compose build dvwa ai-analyst
```
你应该会看到每个镜像都有类似 `=> exporting layers` 的输出。这需要 1-3 分钟。
## 步骤 3 — 拉取基础镜像
这将从 Docker Hub 下载 MariaDB 和 Ollama 的预构建镜像。
```
docker compose pull dvwa-db ollama
```
## 步骤 4 — 启动主 stack
```
docker compose up -d
```
这将启动 4 个 container:DVWA、MariaDB、AI 分析师和 Ollama。`-d` 标志让它们在后台运行。
**验证它们是否正在运行:**
```
docker compose ps
```
四个 container 都应该显示 **Up**(或 **healthy**)。如果有显示 **Exit** 的,检查其日志:
```
docker compose logs dvwa
docker compose logs ai-analyst
```
## 步骤 5 — 启动 Grafana SIEM 覆盖层
Grafana、Loki 和 Promtail 位于单独的 compose 文件中。在主 stack 之上启动它们:
```
docker compose -f docker-compose.yml -f docker-compose.loki.yml up -d
```
再次使用 `docker compose ps` 验证 — 你现在应该总共看到 7 个 container,全部显示为 **Up**。
## 步骤 6 — 拉取 Mistral 7B 语言模型
Mistral 7B 是编写事件简报的本地 LLM。这将下载约 4 GB 的数据,并且只需执行一次 — 权重将保存在 Docker volume 中。
```
docker exec workshop-ollama ollama pull mistral:7b-instruct-q4_K_M
```
在典型的网络连接下,这需要 5-10 分钟。你会看到一个进度条。
## 步骤 7 — 打开 dashboard
| Dashboard | URL | 登录 |
|---|---|---|
| DVWA(目标应用) | http://localhost:8080 | `admin` / `password` |
| AI 分析师 | http://localhost:8000 | 无 |
| Grafana — 攻击 Pipeline | http://localhost:3000 | `admin` / `admin` |
| Ollama API | http://localhost:11434 | 无 |
**首次设置 DVWA:**
1. 访问 http://localhost:8080/setup.php
2. 点击 **Create / Reset Database**
3. 使用 `admin` / `password` 登录
4. 进入 **DVWA Security** 并将安全级别设置为 **Low**
## 步骤 8 — 运行攻击
下面的每个脚本都会针对 DVWA 发起不同类型的攻击。请在 `ai-threat-workshop` 目录下运行它们。
首先使脚本可执行 (macOS/Linux):
```
chmod +x scripts/*.sh
```
### SQL 注入
SQL 注入诱骗数据库泄露其应该保护的数据。Payload `1' UNION SELECT user,password FROM users-- -` 要求数据库导出其整个用户表。
```
./scripts/attack-sqli.sh
```
逐步执行的操作说明:
1. 向 `http://localhost:8080/vulnerabilities/sqli/` 发送 HTTP GET 请求
2. 对每个 SQL payload 进行 URL 编码,并将其作为 `id` 参数传递
3. 使用 `sqlmap/1.8` user-agent,以便 AI 可以对该工具进行指纹识别
4. 触发 4 个 payload:`OR 1=1`、`UNION SELECT`、`SLEEP(2)` 和注释绕过
### 暴力破解
暴力破解登录会自动尝试常见密码。没有锁定机制 + 没有 CAPTCHA = 无限次尝试。
```
./scripts/attack-brute.sh
```
逐步执行的操作说明:
1. 向 `http://localhost:8080/vulnerabilities/brute/` 发送 60 个 HTTP GET 请求
2. 从列表中尝试密码:`admin`、`password`、`123456`、`letmein` 等
3. 使用 `Hydra/9.5` user-agent — Hydra 是一个真实的渗透测试工具
4. 每个请求都包含 `username=admin&password=&Login=Login`
### 跨站脚本攻击 (XSS)
XSS 将 JavaScript 注入到 Web 页面中。当其他用户访问时,他们的浏览器会运行你的代码。
```
./scripts/attack-xss.sh
```
逐步执行的操作说明:
1. 向 `http://localhost:8080/vulnerabilities/xss_r/` 发送 GET 请求
2. 对每个 JavaScript payload 进行 URL 编码,并将其作为 `name` 参数传递
3. Payload 包括:``、`
`、SVG onload
4. 使用 `python-requests/2.31.0` 作为 user-agent
### OS 命令注入
命令注入通过 Web 表单将 shell 命令直接传递给服务器的操作系统。
```
./scripts/attack-cmdi.sh
```
逐步执行的操作说明:
1. 向 `http://localhost:8080/vulnerabilities/exec/` 发送请求
2. DVWA 的 ping 表单将输入直接传递给 `ping` 而不进行验证
3. Payload 使用 `;`、`&&`、`|`、子 shell 和反引号来链接命令
4. 示例:`127.0.0.1; id`、`127.0.0.1 | cat /etc/passwd`、`\`whoami\``
## 步骤 9 — 观察 AI 的行为
运行攻击后,请访问:
- **http://localhost:8000** — AI 分析师:查看风险评分并点击任何警报以获取 Mistral 7B 事件简报
- **http://localhost:3000** — Grafana:实时攻击 pipeline、风险评分分布、事件简报
### Random Forest 如何对每个请求进行评分
AI 模型不阅读句子,它阅读数字。每一行 Apache 日志都会被转换为约 15 个特征:
| 特征 | 示例值 | 它捕获的内容 |
|---|---|---|
| `has_union` | 1 或 0 | 存在 SQL UNION 关键字 |
| `has_select` | 1 或 0 | SQL SELECT 关键字 |
| `has_script_tag` | 1 或 0 | URL 中存在 `