opandey1/AI-SOC-Assistant

GitHub: opandey1/AI-SOC-Assistant

一个使用本地 LLM 和双 ML 检测的端到端 SOC 自动化威胁狩猎管道,解决数据隐私与可解释性问题。

Stars: 0 | Forks: 0

# 驱动 AI 的 SOC 助手 一个可解释的 AI 分诊管道,可将 NSL-KDD 网络连接分类到特定的攻击家族中,融合有监督和无监督的异常信号,并利用 GenAI 生成可供分析师直接使用的 SOC 事件工单。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/opandey1/AI-SOC-Assistant/actions/workflows/ci.yml) [![Python](https://img.shields.io/badge/python-3.10%2B-blue)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![Dataset](https://img.shields.io/badge/dataset-NSL--KDD-purple)](https://www.unb.ca/cic/datasets/nsl.html) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/opandey1/AI-SOC-Assistant/blob/main/notebooks/AI_Powered_SOC_Assistant.ipynb) ![系统架构](https://static.pigsec.cn/wp-content/uploads/repos/cas/4e/4e518bfdf16f34deeb2ef9a3f286e4a1aa5f7307203f65e7b04bbbb19dc997b7.svg) ## 查看运行情况 ![管道演示](https://static.pigsec.cn/wp-content/uploads/repos/cas/03/039132a31d172b588a10203f033d7627f519980da9566400b116e4a461365e5e.svg) ## 优势与独特之处 - **原生多类 SOC 检测:** 区分特定的攻击家族(Normal, DoS, Probe, R2L, U2R),而不是仅输出单一的二元异常标志。 - **双模型分诊:** 使用 Random Forest 预测攻击家族,同时利用 Isolation Forest 为可疑流量模式增加无监督的异常信号。 - **可解释的证据:** SHAP 识别出驱动每个被标记连接的最强特征,并将分析师可读的数值传递到工单中。 - **本地优先的 GenAI:** 支持 Ollama,允许助手在生成工单时无需将原始网络遥测数据发送到外部 LLM API。 - **可操作的输出:** 最终响应是一份结构化的事件工单,包含遏制步骤和可直接复制粘贴的 Splunk SPL 查询。 ## 结果与指标 基于 **`KDDTrain+` 的分层 80/20 留出划分**进行评估(SMOTE 仅应用于训练折)。使用 `python -m src.evaluate` 重新生成以下所有内容。 | 攻击家族 | Precision | Recall | F1-score | Support | | --- | --- | --- | --- | --- | | `normal` | 0.999 | 0.999 | 0.999 | 13,469 | | `dos` | 1.000 | 1.000 | 1.000 | 9,186 | | `probe` | 0.998 | 0.997 | 0.998 | 2,331 | | `r2l` | 0.985 | 0.970 | 0.977 | 199 | | `u2r` | 0.818 | 0.900 | 0.857 | 10 | **总体准确率:99.90% · Macro F1:0.966 · Weighted F1:0.999** ![混淆矩阵](https://raw.githubusercontent.com/opandey1/AI-SOC-Assistant/main/docs/confusion_matrix.png) ## 可解释性实战 对于每个被标记的连接,SHAP 会对驱动预测的特征进行排序,并且管道会将它们的**真实的、未缩放的网络数值**(而非 z-scores)转发到工单中。下面的示例是一个典型的半开 SYN 洪水攻击:`flag_S0` 处于活动状态,且 SYN 错误率为 100%。 ![被标记的 DoS 连接的 SHAP 驱动因素](https://raw.githubusercontent.com/opandey1/AI-SOC-Assistant/main/docs/shap_drivers.png) 这些驱动因素在生成的工单中变成了通俗易懂的证据: ``` 3. Why Flagged - Evidence - flag_S0 was active, meaning connections were initiated but never acknowledged - the classic signature of a half-open SYN flood. - serror_rate was 1.0, so every recent connection ended in a SYN error. - dst_host_serror_rate / dst_host_srv_serror_rate were both 1.0 ... ``` 请查看完整的[样本工单](docs/sample_ticket.md)和底层的[SHAP 证据包](docs/shap_example_output.json)。 ## MITRE ATT&CK 映射 每个检测到的攻击家族都映射到一种 MITRE ATT&CK 战术,为分析师提供了一个用于分诊和升级的共享参考框架。 | 攻击家族 | MITRE ATT&CK 战术 | 战术 ID | 代表性技术 | | --- | --- | --- | --- | | `dos` | Impact | [TA0040](https://attack.mitre.org/tactics/TA0040/) | Network Denial of Service (T1498), Endpoint DoS (T1499) | | `probe` | Discovery | [TA0007](https://attack.mitre.org/tactics/TA0007/) | Network Service Scanning (T1046), System Network Discovery (T1016) | | `r2l` | Initial Access | [TA0001](https://attack.mitre.org/tactics/TA0001/) | Valid Accounts (T1078), Exploit Public-Facing Application (T1190) | | `u2r` | Privilege Escalation | [TA0004](https://attack.mitre.org/tactics/TA0004/) | Exploitation for Privilege Escalation (T1068), Abuse Elevation Control (T1548) | | `normal` | — | — | 良性基线流量 | ## 快速开始 ``` git clone https://github.com/opandey1/AI-SOC-Assistant.git cd AI-SOC-Assistant python -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` 将 `KDDTrain+.txt` 和 `KDDTest+.txt` 放在仓库根目录或 `data/` 下,然后运行一个无 LLM 的冒烟测试: ``` python src/pipeline.py --no-llm ``` 使用本地 Ollama 模型生成工单: ``` ollama pull mistral SOC_LLM_PROVIDER=ollama python src/pipeline.py ``` PowerShell 用户可以这样设置 provider: ``` $env:SOC_LLM_PROVIDER = "ollama" python src/pipeline.py ``` 重新生成指标、混淆矩阵和 SHAP 产物: ``` python -m src.evaluate ``` ### 使用 Docker 运行 一个双容器堆栈在与本地 Ollama 服务器一起运行管道,因此原始遥测数据永远不会离开主机: ``` # 离线 template path(无需 model): docker compose run --rm soc-assistant python src/pipeline.py --no-llm # 带有本地 model 的完整 GenAI path: docker compose up -d ollama docker compose exec ollama ollama pull mistral docker compose run --rm soc-assistant ``` ### 测试 ``` pip install pytest pytest ``` ## 仓库结构 ``` src/ ingest.py NSL-KDD loading and attack-family mapping preprocess.py one-hot encoding, scaling, and SMOTE balancing train.py Random Forest, Isolation Forest, and fused scoring explain.py SHAP explanation bundle generation agent.py LangGraph SOC analyst agent and threat-intel tools evaluate.py metrics, confusion matrix, and SHAP artifact generation pipeline.py runnable command-line pipeline tests/ pytest unit tests for ingestion, preprocessing, SHAP, tickets notebooks/ AI_Powered_SOC_Assistant.ipynb docs/ architecture, metrics, plots, and sample artifacts .github/workflows/ci.yml black + flake8 + pytest on every push Dockerfile, docker-compose.yml ``` ## 演示产物 - [架构图](docs/soc_architecture.svg) - [动画管道演示](docs/demo.svg) - [混淆矩阵](docs/confusion_matrix.png)和[各类指标](docs/metrics.md) - [SHAP 驱动因素图](docs/shap_drivers.png)和[SHAP 证据包](docs/shap_example_output.json) - [生成的样本工单](docs/sample_ticket.md) - [演进简报](docs/SOC_Assistant_Evolution.pdf) - [Colab notebook](notebooks/AI_Powered_SOC_Assistant.ipynb) ## 演进与成果 ### 1. 特征工程:稳健的分类编码 **初始状态:** 管道对网络分类特征(如 protocol, service 和 flag)使用 `LabelEncoder`。 **挑战:** `LabelEncoder` 会产生虚假的数学序数关系,并且当实时流量引入了训练期间未见的类别时可能会崩溃。 **修复:** 预处理管道现在使用 `OneHotEncoder(handle_unknown="ignore")`。 **成果:** 特征表示在数学上更加合理,并且对新的服务值具有鲁棒性。 ### 2. Agent 编排:迁移到 LangGraph **初始状态:** 助手逻辑依赖于较旧的 LangChain agent 模式。 **挑战:** 现代的工具调用工作流受益于更清晰的状态处理和更可靠的 agent 执行。 **修复:** Agent 层使用 `langgraph.prebuilt.create_react_agent`。 **成果:** 编排层更易于维护,并且更好地与当前的 LangChain/LangGraph 模式保持一致。 ### 3. 环境限制:物理隔离的 LLM 执行 **初始状态:** LLM 的使用与云服务提供商的调用绑定。 **挑战:** SOC 环境通常会限制将原始遥测数据、内部 IP 和安全日志传输到外部 API。 **修复:** `initialize_llm` 支持一个包含 Ollama, OpenAI, Anthropic 和模板模式的 provider 工厂,并且重量级的 LLM 依赖项采用延迟加载,这样离线的 `--no-llm` 路径就不需要它们。 **成果:** 管道可以使用 Ollama 在本地运行,适用于注重隐私的演示和受限环境。 ### 4. 威胁情报集成:容错的 API 工具 **初始状态:** 威胁情报工具只是占位符。 **挑战:** 真实的 API 可能会失败、受到速率限制,或者返回大量淹没 LLM 上下文的冗长嵌套 payload。 **修复:** AbuseIPDB 和 NVD 查询使用超时、显式错误处理和紧凑的响应格式。 **成果:** API 失败变成了工单上下文,而不是 Python 进程崩溃。 ### 5. 可解释 AI:跨版本的 SHAP 兼容性 **初始状态:** SHAP 提取假设为单一的输出形状。 **挑战:** SHAP 在不同版本中改变了多类输出的格式。 **修复:** 解释层同时处理传统的列表输出和较新的 3D 数组输出。 **成果:** 代码在不同的依赖版本之间具有更好的可移植性。 ### 6. 取证准确性:真实世界的指标 **初始状态:** 证据包存在将缩放后的 z-score 值暴露给 LLM 的风险。 **挑战:** SOC 分析师需要真实的数据包、字节、计数和速率值,而不是标准化的模型输入。 **修复:** 模型推理仍然使用缩放后的值,而 SHAP 证据包含未缩放的处理特征值。 **成果:** 生成的工单读起来像分析师的证据,而不是模型的内部数据。 ### 7. GenAI 护栏:消除幻觉和过度生成 **初始状态:** 较小的本地模型可能会偏题生成代码片段或原始的浮点 SHAP 值。 **挑战:** 助手必须生成简洁的事件工单,而不是通用的解释或脚本。 **修复:** 系统 prompt 强制仅输出工单、结构化的章节、精确的 Splunk SPL 代码块,并禁止泄露原始的 SHAP 浮点数。 **成果:** GenAI 层将模型证据转化为可操作的 SOC 工作流输出。
标签:AI安全运营, Apex, DLL 劫持, Python, 入侵检测, 大语言模型, 威胁狩猎, 无后门, 机器学习