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 中存在 `