🛡️ Wazuh AI分析师–通过MCP集成实现GenAI SOC
硕士论文原型\ 学生: 努诺·马丁斯\ 监督人: 努诺·洛佩斯教授/Rui Fernandes\ 机构: 高等 技术 学院
______________________________________________________________________
🎯 项目概述
该项目展示了一种智能SOC助手,该助手将SIEM(Wazuh)和MITRE ATT&CK知识库与大型语言模型(Llama 3.2)集成在一起,使用 模型上下文协议(MCP)该系统自动进行警报分类,并提供情境感知的缓解建议,减少分析师疲劳,并将人工智能响应纳入官方安全框架。
✨ 主要特点
- 双模式UI调查:\
Streamlit客户端(app.py)提供了两个通过UI动态切换的不同工作流:
- RAG机构(自治): A. 受约束的再行动 LangGraph代理以编程方式编排工具调用。它使用严格的图形路由,以确保在恢复到2/3级缓解措施之前检查1级剧本。它还具有 自校正(反射)循环 它在LLM工具调用幻觉导致UI崩溃之前拦截并修复这些幻觉。 - 静态RAG(交互式): 一个结构化的、循序渐进的管道,其中上下文是预先加载的,为加载的警报呈现一个交互式聊天机器人。
- 自动评估流程:
- 包括程序化评分脚本(evaluate_agent.py)能够在大批量数据集中自主运行代理。 - 伴随着 generate_safe_scenarios.py 为了合成数百个AV安全警报,MITRE绘制了模拟警报,用于强大的LLM评估和性能导出到Pandas/Excel。
- 多服务器MCP编排:\
应用程序通过以下方式连接到两个MCP服务器 stdio:
- wazuh_server.py:从模拟Wazuh数据和实时Wazuh API中检索安全警报。 - mitre_server.py:实现a 三层混合架构 威胁情报。
- 三层混合智能架构:\
革命性的智能系统提供优雅的AI降级:
- 第1层(剧本): 硬编码SOC响应程序,用于立即采取可信的本地行动 - 第2级(MITRE数据): 通过MCP动态检索的MITRE官方描述、战术和缓解措施 - 第3级(生成回退): 当外部工具发生故障时,LLM潜在知识会有条件地自动激活(在报告中明确标记)。 - 混合模式: 结合第1层和第2层,以实现完整的运营环境
- MITRE ATT&CK实时集成:\
在服务器启动时,将MITRE ATT&CK STIX官方数据下载并缓存在内存中,以零延迟提供对600多种技术的即时访问。
- 检索增强生成(RAG):\
在将警报发送给LLM之前,将其与MITRE缓解措施进行交叉引用,确保响应在上下文中准确且可操作。
- 攻击场景模拟器:\
注入5种不同的攻击场景(SSH暴力、网络扫描、命令执行、SQL注入、计划任务)来测试系统的响应能力,包括代理在缺少自定义剧本时如何自主旋转!
- Docker化部署:\
使用Docker Compose完成容器化,以实现轻松部署和一致的环境。
- 模块化和可扩展:\
通过MCP协议轻松添加新工具、数据源或攻击场景。
______________________________________________________________________
🏗️ 建筑
graph TD
User[SOC Analyst] -->|Interacts & Toggles Mode| Client[Streamlit Client / UI]
Client |Instantiates| Agent[Constrained LangGraph ReAct Agent]
Agent |Self-Correction Loop| Reflection[Correction Node]
Agent |Directs Tools via MCP| Wazuh["Wazuh MCP Server"]
Agent |Directs Tools via MCP| MITRE["MITRE MCP Server"]
Wazuh |Reads| Alerts[alert.json / Synthetic Scenarios]
Wazuh |Queries| WazuhManager[Live Wazuh Manager API]
MITRE |Queries| KB[MITRE ATT&CK Knowledge Base]
Agent |Reasoning & Action| LLM["Llama 3.2 / 3.1 via Ollama"]
subgraph Docker Environment
Client
Agent
LLM
Wazuh
MITRE
end______________________________________________________________________
🚀 入门指南
选项1:Docker部署(推荐)
先决条件
- 已安装Docker和Docker Compose
- 至少8GB RAM可用
快速开始
选项A:自动部署(推荐)
# 1. Clone the repository
git clone https://github.com/tabs11/GenAI-Enabled-SOCs-via-MCP-Integration.git
cd GenAI-Enabled-SOCs-via-MCP-Integration
# 2. Run the automated deployment script
.\deploy.ps1
# The script will automatically:
# - Configure WSL2 settings (Windows only)
# - Generate SSL certificates
# - Start all services
# - Initialize security plugin
# - Display access URLs选项B:手动部署
- 克隆存储库:
git clone https://github.com/tabs11/GenAI-Enabled-SOCs-via-MCP-Integration.git
cd GenAI-Enabled-SOCs-via-MCP-Integration- 配置WSL2(仅限Windows,一次性):
wsl -d docker-desktop sysctl -w vm.max_map_count=262144- 生成SSL证书:
docker-compose -f generate-indexer-certs.yml run --rm generator- 启动所有服务:
docker-compose up -d- 等待服务初始化(45秒):
Start-Sleep -Seconds 45- 初始化Wazuh安全插件:
docker exec wazuh-indexer bash -c 'export OPENSEARCH_JAVA_HOME=/usr/share/wazuh-indexer/jdk && /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh -cd /usr/share/wazuh-indexer/opensearch-security/ -icl -key /usr/share/wazuh-indexer/certs/admin-key.pem -cert /usr/share/wazuh-indexer/certs/admin.pem -cacert /usr/share/wazuh-indexer/certs/root-ca.pem -h 127.0.0.1 -nhnv'- 拉动Llama 3.2型号(仅限首次):
docker exec -it ollama-service ollama pull llama3.2- 访问服务:
- SOC助理: http://localhost:8501 - Wazuh仪表板: https://localhost:443(管理员/密码) - 瓦祖赫API: https://localhost:55000 - Kali Linux攻击者: docker exec -it kali-attacker bash - Metasploitable 2易受攻击的目标: - SSH: ssh -oHostKeyAlgorithms=+ssh-rsa msfadmin@localhost -p 2222 - FTP: localhost:21 - 电话网: localhost:23 - HTTP: localhost:8080
警告: Metasploitable2故意易受攻击。切勿将这些端口暴露于互联网。
- 进行第一次攻击(可选):
# Access Kali container
docker exec -it kali-attacker bash
# Navigate to attack scripts
cd /root/attacks
# Run SSH brute force attack
bash ssh_brute_force.sh
# Check Wazuh Dashboard for alerts (wait 1-2 minutes)
# Open: https://localhost:443- 停止/重新启动所有服务:
docker-compose down
docker-compose up -d注: 初始设置后,您可以重新启动,而无需重新运行证书生成或安全初始化。
选项2:本地安装
先决条件
- Python 3.10+
- Ollama在当地安装
安装步骤
- 安装Python依赖项:
pip install -r requirements.txt- 安装并配置Ollama:
# Download from https://ollama.com/
ollama pull llama3.2- 运行应用程序:
streamlit run app.py该应用程序将:
- 自动启动
wazuh_server.py和mitre_server.pyMCP服务器 - 通过MCP协议连接到两台服务器
- 展示一个带有实时警报和AI聊天界面的仪表板
______________________________________________________________________
📂 项目结构
GenAI-Enabled-SOCs-via-MCP-Integration/
├── app.py # Main Streamlit application (MCP client)
├── agent.py # LangGraph ReAct agent architecture
├── wazuh_server.py # MCP server for Wazuh alerts
├── mitre_server.py # MCP server for MITRE ATT&CK knowledge
├── test_connection.py # MCP connection testing utility
├── alert.json # Current active alert
├── alert_Orig.json # Original alert backup
├── mcp_config.json # MCP configuration file
├── requirements.txt # Python dependencies
├── Dockerfile # Container image definition
├── docker-compose.yml # Full stack orchestration (with Wazuh)
├── docker-compose-simple.yml # Simple mode (without Wazuh)
├── generate-indexer-certs.yml # SSL certificate generator
├── deploy.ps1 # Automated deployment script
├── .gitignore # Git ignore rules
├── .dockerignore # Docker ignore rules (optional)
├── config/ # Configuration files
│ ├── certs.yml # Certificate generation config
│ ├── wazuh_indexer/ # Indexer configuration
│ ├── wazuh_dashboard/ # Dashboard configuration
│ └── wazuh_cluster/ # Manager configuration
├── scenarios/ # Attack scenario templates
│ ├── alert_brute.json # SSH Brute Force (T1110)
│ ├── alert_scan.json # Network Scanning (T1595)
│ ├── alert_exec.json # Command Execution (T1059)
│ ├── alert_sqli.json # SQL Injection (T1190)
│ └── alert_scheduled_task.json # Scheduled Task (T1053.005)
├── scripts/ # Utility and attack scripts
│ └── attacks/ # Kali Linux attack scripts
│ ├── README.md # Attack scripts documentation
│ ├── ssh_brute_force.sh # SSH brute force (T1110)
│ ├── network_scan.sh # Network scanning (T1595)
│ ├── exploit_vsftpd.sh # FTP exploit (T1190)
│ └── web_attack.sh # Web app attacks (T1190)
├── documentation/ # Additional documentation
└── readme.md # This file______________________________________________________________________
⚔️ Kali Linux攻击实验室
该项目包括 Kali Linux 容器预先配置了渗透测试工具,用于生成真实的安全警报。
🚀 快速开始
# Access Kali Linux container
docker exec -it kali-attacker bash
# Navigate to attack scripts
cd /root/attacks
# Run an attack
bash ssh_brute_force.sh🔧 预装工具
- 扫描器 -网络扫描与侦察
- 九头蛇 -密码暴力破解
- Metasploit框架 -开发框架
- curl/wget -Web应用程序测试
- iputils-ping -网络连接测试
📋 可用攻击脚本
| 脚本 | 攻击类型 | MITRE技术 | 描述 |
|---|---|---|---|
ssh_brute_force.sh | 凭证访问 | T1110 | SSH密码暴力破解 |
network_scan.sh | 侦察 | T1595 | 端口扫描和业务检测 |
exploit_vsftpd.sh | 初始访问 | T1190 | 利用易受攻击的FTP服务 |
web_attack.sh | 初始访问 | T1190 | Web漏洞测试 |
🎯 攻击工作流程
- 执行攻击:
docker exec -it kali-attacker bash
cd /root/attacks
bash network_scan.sh- 等待警报: Wazuh在1-5分钟内处理日志
- 仪表板中的视图: https://localhost:443 → 安全事件
- 人工智能分析: 让SOC助手分析警报
💡 自定义攻击
您可以将自己的脚本添加到 scripts/attacks/ -它们将自动挂载到 /root/attacks 在卡利集装箱中。
⚠️ 重要说明
- 首次启动: 容器安装工具需要2-3分钟
- 目标访问: Metasploitable可通过主机名访问
metasploitable或其Docker IP - 仅限实验室: 切勿在隔离的实验室环境之外运行这些攻击
______________________________________________________________________
🎮 使用攻击场景
侧边栏中的Lab Controller动态列出了 scenarios/ 文件夹。这意味着您可以随时删除新的JSON模拟警报,UI将自动解析选择框的内部详细信息!当前的标准场景包括:
- SSH暴力(T1110):\
模拟来自单个IP的多次失败的身份验证尝试
- 网络扫描(T1595):\
通过端口扫描模拟侦察活动
- 命令执行(T1059):\
模拟初始访问后可疑命令的执行
- SQL注入(T1190):\
模拟web应用程序SQL注入漏洞利用。
- 计划任务(T1053.005):\
模拟持久性。 *注意:由于此场景没有硬编码的剧本,测试它完美地展示了ReAct代理自主转向MITRE数据库的能力!*
点击“触发警报”加载场景,查看AI分析师的反应。
______________________________________________________________________
🎯 三层优雅降级架构
该系统实现了一个复杂的 三层情报框架 实施信任的操作层次结构:
📋 第1级:剧本(最高信任度)
目的: 即时响应程序\ 它提供了什么:
- 本地维护的自定义硬编码SOC剧本。
- 根据您的基础设施量身定制的可操作命令和调查步骤。
📊 第2层:MCP外部数据(MITRE ATT&CK基础)
目的: 官方网络安全框架指南 它提供了什么:
- 如果没有剧本,人工智能会自动查询MITRE的官方描述、平台、数据源和杀戮链阶段。
- 通过FastMCP从内存中的STIX 2.0数据库中动态检索。
🧠 第3级:LLM参数回退(最低信任度)
目的: 本地和外部工具失败时的生成推理 它提供了什么:
- 如果技术ID完全未知或工具返回错误,则模型依赖于潜在知识(其训练数据)。
- 最终报告向用户发出了严格的警告,声称数据是通过人工智能专业知识生成的,而不是基于RAG的背景。
______________________________________________________________________
🧠 运作原理
数据流
路径1:代理RAG(自主模式)
- LLM调用: 用户触发分诊。LangGraph代理(
agent.py)进入ReAct循环。 - 警报检索: 代理人自主决定呼叫
fetch_wazuh_alerts通过MCP。 - 数据透视和发现: 代理识别MITRE技术(例如T1053)并调用
get_tier1_playbook. - 自适应响应: 如果剧本存在,代理会收集知识。如果收到“未找到”错误,代理 *自主旋转* 和查询
get_tier3_mitre_deep_dive相反。 - 合成: 代理根据其自主执行的工具在本地生成全面的响应。
路径2:静态RAG(交互模式)
- 预取: 客户来电
wazuh_server.py加载后立即获取警报。 - 知识检索: 客户端自动从以下位置检索上下文
mitre_server.py对应于用户的手动单选按钮选择(级别1、级别2等)。 - 聊天响应: 上下文以批量系统提示的形式发送到Llama 3.2,为用户提供传统的对话式AI循环。
RAG 流程
该系统通过以下方式实现检索增强生成(RAG):
- 检索 来自多个来源的相关安全数据(Wazuh警报+MITRE情报)
- 增强 带有此外部上下文的LLM提示符
- 生成 基于官方安全框架的真实回应
这种方法减少了幻觉,并确保建议具有可操作性,符合行业最佳实践。
MITRE ATT&CK数据管理
这 mitre_server.py 服务器启动时自动处理MITRE ATT&CK数据:
- 下载: 从官方获取STIX 2.0 JSON MITRE ATT&CK STIX存储库
- 内存缓存: 在RAM中存储600多种技术以实现即时访问(无磁盘I/O)
- 解析: 提取技术细节,包括描述、战术、平台、数据源和杀伤链
- 启动初始化: 服务器启动时自动加载数据
- 手动刷新: 可以使用以下方式触发
refresh_mitre_data()MCP工具
______________________________________________________________________
🔧 技术细节
MCP服务器配置
两台服务器均以如下方式启动 StdioServerParameters 在 app.py:
wazuh_server = StdioServerParameters(
command=sys.executable,
args=["wazuh_server.py"]
)
mitre_server = StdioServerParameters(
command=sys.executable,
args=["mitre_server.py"]
)MITRE服务器工具
这 mitre_server.py 展示了实施运营架构的整合MCP工具:
get_tier1_playbook(technique_id)- 第1级: 使用硬编码的响应过程检索自定义SOC剧本。get_tier2_mitre_data(technique_id)- 第2级: 获取MITRE STIX的全面情报(描述、平台、数据源)。get_full_context(technique_id)- 静态RAG模式: 将第1层剧本+第2层MITRE数据组合到单个上下文中。refresh_mitre_data()-强制从官方STIX存储库下载最新的MITRE ATT&CK数据。
Docker服务
docker-compose.yml在共享网络中编排7个服务:
- soc助理: 带有MCP客户端编排的Streamlit应用程序
- 奥拉马: 本地LLM运行时(Llama 3.2)
- kali linux: 具有Nmap、Hydra、Metasploit的渗透测试平台
- 可元打印: 故意易受攻击的Linux服务器(Metasploitable2)模拟跨SSH、FTP、Telnet和HTTP服务的基础设施攻击场景
- wazuh索引器: 基于Elasticsearch的存储后端(OpenSearch)
- wazuh经理: SIEM核心-处理日志、生成警报、公开API
- wazuh仪表板: 用于可视化和管理的Web UI
Wazuh Stack集成
该项目现在包括一个完整的 Wazuh SIEM堆栈 用于真实世界的安全监控:
🔧 建筑
┌─────────────────────────────────────────────────────┐
│ SOC Network (172.20.0.0/16) │
├─────────────────────────────────────────────────────┤
│ App → Wazuh Manager → Wazuh Indexer ← Dashboard │
│ ↑ │
│ └─ Agents (Metasploitable, future targets) │
└─────────────────────────────────────────────────────┘🚀 快速开始
# Deploy the full stack (use deploy.ps1 for automated setup)
.\deploy.ps1
# OR manually:
# 1. Configure WSL2
wsl -d docker-desktop sysctl -w vm.max_map_count=262144
# 2. Generate certificates
docker-compose -f generate-indexer-certs.yml run --rm generator
# 3. Start services
docker-compose up -d
# 4. Wait 45 seconds, then initialize security
docker exec wazuh-indexer bash -c 'export OPENSEARCH_JAVA_HOME=/usr/share/wazuh-indexer/jdk && /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh -cd /usr/share/wazuh-indexer/opensearch-security/ -icl -key /usr/share/wazuh-indexer/certs/admin-key.pem -cert /usr/share/wazuh-indexer/certs/admin.pem -cacert /usr/share/wazuh-indexer/certs/root-ca.pem -h 127.0.0.1 -nhnv'
# Access Wazuh Dashboard
# Open: https://localhost:443
# Login: admin / SecretPassword
# Test the API
curl -k -u wazuh-wui:MyS3cr37P450r.*- https://localhost:55000/🔗 关键端口
- 1514: Wazuh代理连接(syslog/TCP)
- 1515: Wazuh代理商注册
- 55000: Wazuh REST API(由您的应用程序使用)
- 9200: Wazuh索引器(Elasticsearch)
- 443: Wazuh仪表板(HTTPS)
📡 MCP集成
这 wazuh_server.py 现在包括真正的API工具:
get_latest_alerts()-JSON模拟警报(用于测试)get_real_wazuh_alerts()-Wazuh Manager的实时提醒get_wazuh_agents()-列出已注册的监控代理
🎯 部署代理
要监控Metasploitable并生成真实警报:
# See detailed guide
cat scripts/setup_wazuh.md
# Or use automated script
bash scripts/deploy_agent_to_metasploitable.sh📚 文档
- 完整设置指南: 脚本/setup_wazuh.md
- PowerShell部署:
scripts/deploy_wazuh_stack.ps1 - 连接测试:
scripts/test_wazuh_connection.ps1
环境变量
OLLAMA_HOST:Ollama服务的URL(默认值:http://ollama:11434在Docker中)WAZUH_MANAGER_IP:Wazuh管理器主机名(默认值:wazuh-manager)WAZUH_API_PORT:Wazuh API端口(默认值:55000)WAZUH_API_USER:API身份验证用户名(默认值:wazuh-wui)WAZUH_API_PASSWORD:API身份验证密码(默认值:MyS3cr37P450r.*-)
添加新的攻击场景
在中创建一个新的JSON文件 scenarios/ 文件夹遵循此结构:
{
"rule": {
"level": 10,
"description": "Your attack description",
"mitre": {
"id": ["T1234"],
"tactic": ["Tactic Name"],
"technique": ["Technique Name"]
}
},
"data": {
"srcip": "192.168.1.100"
}
}扩展MITRE知识库
编辑 mitre_server.py 并向中添加新条目 KNOWLEDGE_BASE 词典(第1层剧本):
KNOWLEDGE_BASE = {
"T1234": """### MITRE T1234: Your Technique
**Description:** Technique description
**Mitigation / Playbook:**
1. **Detection:** What to look for in logs
2. **Containment:** Immediate actions to stop the threat
3. **Remediation:** Steps to recover and prevent recurrence"""
}注: MITRE官方数据(2级和3级)可自动用于所有600多种技术,无需手动配置。
______________________________________________________________________
🎯 用例
- 警报分类: 使用MITRE上下文以通俗易懂的语言自动解释安全警报
- 事故调查: 询问“我接下来应该检查什么?”并获得基于MITRE的指导
- 剧本辅助: 检索检测到的技术的逐步缓解程序
- 培训和教育: 帮助初级分析师了解攻击模式和响应策略
- 威胁狩猎: 探索不同的攻击场景及其防御措施
- 基础设施攻击模拟: 针对Metasploitable2目标测试SSH暴力破解、网络扫描和利用技术
______________________________________________________________________
🧪 测试SSH蛮力(T1110)
使用传统SSH算法连接到Metasploitable2目标:
ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-rsa,ssh-dss msfadmin@localhost -p 2222默认凭据:
- 用户名:
msfadmin - 密码:
msfadmin
为什么需要传统算法:\ Metasploitable2使用过时的加密算法,现代SSH客户端默认情况下会拒绝这些算法。这 -o 选项允许这些已弃用的算法用于实验室测试。
______________________________________________________________________
🐛 故障排除
Docker问题
问题: 容器无法启动\ 解决方案: 检查Docker日志: docker-compose logs
问题: 找不到Ollama模型\ 解决方案: 手动拉动模型:
docker exec -it ollama-service ollama pull llama3.2问题: 端口已在使用中(8501)\ 解决方案: 停止冲突的服务或更改中的端口 docker-compose.yml
本地安装问题
问题: MCP服务器无法连接\ 解决方案: 确保Python路径正确,服务器具有执行权限
问题: Ollama连接失败\ 解决方案: 确认Ollama正在运行: ollama list
问题: MITRE服务器启动时无法下载数据\ 解决方案: 检查互联网连接并验证MITRE STIX存储库是否可访问:https://github.com/mitre-attack/attack-stix-data
问题: 第2/3层显示“未找到技术”\ 解决方案: 重新启动mitre_server.py以重新加载mitre数据,或使用 refresh_mitre_data() 工具
______________________________________________________________________
📊 性能注意事项
- 内存: Llama 3.2需要约8GB RAM;MITRE缓存增加了约50MB的内存
- 储存: 模型文件~4GB;MITRE数据不需要磁盘存储(内存缓存中)
- 网络: 初始MITRE下载~15MB;之后不需要互联网
- 启动时间: 服务器初始化时MITRE数据加载时间约为10-15秒
- 响应时间: 第1层(即时),第2/3层(距离缓存亚毫秒)
______________________________________________________________________
🔒 安全须知
- 这是一个 用于教育目的的原型
- Metasploitable 2易受攻击的目标应该 永远不要接触互联网
- Metasploitable2包含跨多个服务(SSH、FTP、Telnet、HTTP)的故意漏洞
- 仅在隔离的实验室环境中使用-断开与公共网络的连接
- 使用模拟数据而不是真实的安全警报
______________________________________________________________________
📖 参考文献和资源
- Wazuh SIEM –开源安全监控和威胁检测平台
- MITRE ATT&CK 公司 –全球可访问的敌方战术和技术知识库
- MITRE ATT&CK STIX 数据 –本项目使用的官方STIX 2.0存储库
- 奥拉玛 –在本地运行大型语言模型
- 模型上下文协议(MCP) –LLM工具集成的开放协议
- 溪流 –用于构建数据应用程序的Python框架
- FastMCP –用于构建MCP服务器的Python框架
- 码头工人 –集装箱化平台
______________________________________________________________________
🚧 未来的增强功能
- \[\]实时Wazuh API集成
- \[\]多个LLM模型比较(Mistral、Gemma等)
- \[\]用于跨技术语义搜索的向量嵌入
- \[\]多个事件之间的警报相关性
- \[\]将事件报告导出为PDF/JSON格式,并包含选定的层数据
- \[\]多语言支持
- \[\]与票务系统(Jira、ServiceNow)集成
- \[\]MITRE子技术支持(例如T1110.001、T1110.002)
- \[\]实时MITRE数据源监控和警报
- \[\]自定义级别组合(例如,仅限级别1+2)
______________________________________________________________________
📝 许可证
该项目是Escola Superior de Tecnologia硕士论文的一部分。\ 仅供学术和教育使用。
______________________________________________________________________
👤 作者
努诺·马丁斯\ 人工智能硕士\ 高等 技术 学院
论文导师:
- 努诺·洛佩斯教授
- 博士生Rui Fernandes
______________________________________________________________________
🙏 致谢
特别感谢教授和机构支持将GenAI应用于网络安全运营的这项研究。
______________________________________________________________________
如有疑问或合作机会,请通过机构渠道联系。
