yyc556/multi-agent-llm-soc-analyst

GitHub: yyc556/multi-agent-llm-soc-analyst

基于LangGraph构建的多代理LLM SOC系统,利用LoRA微调的Qwen2.5模型实现网络流量威胁分类、MITRE ATT&CK映射与自动化事件响应报告生成。

Stars: 0 | Forks: 0

# 多代理 LLM SOC 分析师 以 LangGraph 为核心的多代理入侵检测与事件响应系统,整合 Qwen2.5-7B-Instruct LoRA 微调模型,针对 UNSW-NB15 网络流量数据集(10 类攻击标签)进行多类别威胁分类,并串接 MITRE ATT&CK 战术映射与结构化事件响应建议生成,实现从原始日志输入到 IR 报告输出的完整端到端 SOC 自动化流程。 ## 系统架构 ``` Raw Log (原始數值) ↓ LogParser (rule-based + scaler.pkl 正規化) ↓ ThreatClassifierAgent (微調 Qwen2.5-7B + LoRA) ↓ Sequence Log Probability 信心分數 ├── Benign → END (短路) ├── confidence < 0.6 → HumanReview → END └── 其他 → MITREMapper → IRGenerator → END ``` ### 四个 Agent | Agent | 模型 | 说明 | |---|---|---| | LogParser | 无模型(rule-based) | 字符串格式化 + scaler.pkl 归一化 | | ThreatClassifierAgent | 微调 Qwen2.5-7B + LoRA | Sequence Log Probability 置信度分数 | | MITREMapperAgent | Base Qwen2.5-7B | Rule-based 查找表 + LLM 说明 | | IRGeneratorAgent | Base Qwen2.5-7B | 四区块结构化输出 + 后处理验证 | ## 消融实验结果 | 模型 | 训练样本 | Accuracy | Weighted F1 | Macro F1 | |---|---|---|---|---| | Base(未微调) | 0 | 10.91% | 0.098 | 0.033 | | Scarce | 100 条 | 31.31% | 0.169 | 0.061 | | Full-Unbalanced | 7,500 条 | **77.78%** | 0.754 | 0.391 | | Full-Balanced | 10,000 条 | 74.14% | **0.776** | **0.549** | Full-Balanced 模型通过 per-class oversampling(每类 1,000 条)大幅改善稀有类别识别能力: - Worms F1:0.000 → **0.500** - Shellcode F1:0.000 → **0.444** ## 模型 Adapter 下载 所有 LoRA adapter 存放于 HuggingFace: **[yyc556/llm-soc-analyst](https://huggingface.co/yyc556/llm-soc-analyst)** | 模型 | 路径 | |---|---| | Full-Unbalanced(7,500 条) | [soc_full_data/](https://huggingface.co/yyc556/llm-soc-analyst/tree/main/soc_full_data) | | Scarce(100 条) | [soc_scarce_data/](https://huggingface.co/yyc556/llm-soc-analyst/tree/main/soc_scarce_data) | | Full-Balanced(10,000 条) | [soc_balance_data/](https://huggingface.co/yyc556/llm-soc-analyst/tree/main/soc_balance_data) | Base model:`Qwen/Qwen2.5-7B-Instruct`(由 HuggingFace 自动下载) ## 项目结构 ``` multi-agent-llm-soc-analyst/ ├── README.md ├── requirements.txt ├── scaler.pkl # MinMaxScaler(balanced 訓練用) │ ├── src/ │ ├── soc_pipeline.py # LangGraph Pipeline(主程式) │ ├── preprocess.py # 原版前處理(Full-Unbalanced) │ ├── preprocess_balanced.py # 平衡版前處理(Full-Balanced) │ ├── evaluate.py # 四模型評估腳本 │ └── analyze_v2.py # F1 + loss curve 分析 │ ├── data/ │ ├── train_scarce.json # 100 筆訓練資料 │ ├── train_full.json # 7,500 筆訓練資料 │ └── train_full_balanced.json # 10,000 筆訓練資料 │ └── results/ ├── eval_base.csv ├── eval_scarce.csv ├── eval_full.csv ├── eval_balanced.csv ├── soc_full-trainer_log.jsonl ├── soc_scarce-trainer_log.jsonl ├── soc-balance-trainer_log.jsonl ├── loss_comparison.png ├── f1_heatmap.png └── f1_summary.png ``` ## 环境需求 - Python 3.11 - GPU 训练:NVIDIA RTX 4090(24GB VRAM,glows.ai) - 本机推理:8GB VRAM + 4-bit 量化 ``` pip install -r requirements.txt ``` 训练框架(LlamaFactory,需另行安装): ``` git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory && pip install -e . ``` ## 使用方式 ### 1. 下载 Adapter ``` # 從 HuggingFace 下載(以 Full-Balanced 為例) git clone https://huggingface.co/yyc556/llm-soc-analyst ``` 或直接在网页下载 `adapter_config.json` 和 `adapter_model.safetensors`。 ### 2. 数据前处理 ``` # Full-Unbalanced(分層抽樣 7,500 筆) python src/preprocess.py # Full-Balanced(每類 1,000 筆,oversampling) python src/preprocess_balanced.py ``` ### 3. 模型训练(glows.ai / LlamaFactory) ``` llamafactory-cli train \ --model_name_or_path Qwen/Qwen2.5-7B-Instruct \ --finetuning_type lora \ --dataset unsw_nb15_balanced \ --learning_rate 2e-4 \ --num_train_epochs 3 \ --output_dir saves/Qwen2.5-7B-Instruct/lora/soc_balanced_data ``` ### 4. 评估 ``` # 完全 Unbalanced python src/evaluate.py \ --adapter path/to/soc_full_data \ --output results/eval_full.csv # Full-Balanced(--balanced flag 切換 instruction) python src/evaluate.py \ --adapter path/to/soc_balance_data \ --output results/eval_balanced.csv \ --balanced ``` ### 5. 运行 SOC Pipeline ``` # 修改 soc_pipeline.py 中的 ADAPTER_PATH 和 SCALER_PATH python src/soc_pipeline.py ``` ### 6. 生成分析图表 ``` python src/analyze_v2.py ``` ## 训练设置 | 参数 | 值 | |---|---| | Base Model | Qwen/Qwen2.5-7B-Instruct | | Fine-tuning | LoRA(rank=8, alpha=16, dropout=0.05) | | Learning Rate | 2e-4 | | Epochs | 3 | | Effective Batch Size | 4 × 4 = 16 | | Cutoff Length | 512 tokens | | Compute Type | bf16 | ## 数据集 **UNSW-NB15**(Kaggle:[mrwellsdavid/unsw-nb15](https://www.kaggle.com/datasets/mrwellsdavid/unsw-nb15)) 10 个标签:Benign、Fuzzers、Analysis、Backdoor、DoS、Exploits、Generic、Reconnaissance、Shellcode、Worms ## 已知限制 - **类别不平衡**:Worms(原始 130 条)、Shellcode(44 条)即使 oversampling 后效能仍有限 - **推理效率**:每条样本需调用 LLM 2–3 次,RTX 4090 上约 30–60 秒/条 - **LLM 幻觉**:IRGenerator 输出偶有简體字混入,已加后处理过滤 - **Scaler 版本**:`scaler.pkl` 以 scikit-learn 1.9.0 产出,建议使用相同版本
标签:DLL 劫持, LangGraph, LoRA微调, 多代理系统, 大语言模型, 安全运营, 扫描框架, 网络威胁检测, 逆向工具