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微调, 多代理系统, 大语言模型, 安全运营, 扫描框架, 网络威胁检测, 逆向工具