vietk5/NIRO_agent
GitHub: vietk5/NIRO_agent
基于 LLM 与 PI 框架的自动化网络安全事件响应编排系统,通过多阶段 Pipeline 实现告警分析、威胁侦察、MITRE 映射与响应处置。
Stars: 0 | Forks: 0
# NIRO-PI — 网络事件响应编排器
使用 LLM 的自动化网络安全事件分析与响应系统。
基于 **PI framework** 运行
## 快速开始
### 1. 安装
```
pip install -r requirements.txt
```
### 2. 配置 API key
在根目录创建 `.env` 文件(仓库中暂不提供 `.env.example`)。`get_llm_client()` 会根据存在的 key 自动选择 backend — 优先使用 Anthropic:
```
# 使用 Claude(如果同时有两个 key 则优先使用)
ANTHROPIC_API_KEY=sk-ant-...
ANTHROPIC_MODEL=claude-sonnet-4-5 # optional, đây là default
# 或者使用 OpenAI-compatible(OpenAI, DeepSeek, ...)
OPENAI_API_KEY=sk-...
OPENAI_BASE_URL=https://api.deepseek.com # optional, default là api.openai.com/v1
OPENAI_MODEL=deepseek-chat # optional, default là gpt-4o
```
### 3. 添加数据到 data/input/
```
data/input/
├── alerts/ ← Đặt file JSON alert từ IDS/SIEM vào đây
├── logs/ ← Đặt auth.log, firewall.log, syslog.log vào đây
└── pcap/ ← Đặt file PCAP vào đây (optional)
```
### 4. 通过 PI skills 运行
在 `niro-pi/` 目录下打开 Claude Code,输入:
| 命令 | 功能 |
|------|-----------|
| `/run-pipeline` | 通过完整 pipeline 处理 `data/input/alerts/` 中的告警 |
| `/analyze-logs` | 分析来自 `data/input/logs/` 的日志,寻找攻击证据 |
| `/run-batch` | 批量处理所有告警 |
| `/triage-alert` | 快速对一个告警进行分类 |
## Pipeline 架构
```
Alert → Stage 0: Triage (serial, 20s timeout)
↓ (action != close_fp)
Stage 1: Scatter × 3 (parallel, 30s timeout mỗi task)
├── 1A Recon (AbuseIPDB + VirusTotal + port scan + whois — LLM tool-loop)
├── 1B Log Collection (data/input/logs/ → auth/fw/syslog, rule-based)
└── 1C PCAP Analysis (scapy / metadata fallback, rule-based)
↓
Stage 2: Scatter × 2 (parallel, 60s timeout mỗi task)
├── 2A ML Classifier (LLM phân loại + MITRE_KB containment playbook)
└── 2B MITRE Mapper (RandomForest/cosine similarity + IsolationForest anomaly check)
↓
Stage 2C: Orchestrator + Investigator Subagents (sequential, 120s timeout)
├── So sánh 2A vs 2B → AGREE (xác nhận) hay CONFLICT (cần giải quyết)
├── spawn_subagent() → bruteforce / ddos / portscan / general investigator
└── finalize_investigation() → verdict cuối cùng (ưu tiên cao nhất)
↓
Stage 3A: Response (conditional — human approval cho block_ip/isolate_host)
Stage 3B: Report (always runs → reports/ + results/ folder)
```
整个 pipeline 均在 **`pipeline.yaml`** 中声明,可以直接在此修改(开启/关闭特定 stage 或 agent,切换 parallel ↔ sequential 模式,设置每个 stage 的 timeout)。
## 环境变量
| 变量 | 默认值 (代码中) | 说明 |
|------|----------|---------|
| `ANTHROPIC_API_KEY` | — | 使用 Claude backend,如果存在则优先使用 |
| `ANTHROPIC_MODEL` | `claude-sonnet-4-5` | Claude 模型 |
| `OPENAI_API_KEY` | — | 如果没有 ANTHROPIC_API_KEY,则使用 OpenAI-compatible backend (OpenAI, DeepSeek, ...) |
| `OPENAI_BASE_URL` | `https://api.openai.com/v1` | 修改为 `https://api.deepseek.com` 以使用 DeepSeek |
| `OPENAI_MODEL` | `gpt-4o` | 如果使用 DeepSeek,请修改为 `deepseek-chat` |
| `STAGE1_TIMEOUT_SEC` | `30` | Stage 1 的超时时间(秒) |
| `STAGE2_TIMEOUT_SEC` | `60` | Stage 2 的超时时间(秒) |
| `APPROVAL_TIMEOUT_SEC` | `120` | 人工审批超时时间 |
| `NIRO_AUTO_APPROVE` | `0` | 设为 `1` 以自动批准(实验室模式) |
## 人工审批
当响应代理需要封锁 IP 或隔离主机时:
1. 写入 `logs/pending_approval.json` — 包含需要批准的操作
2. 等待用户创建包含 `APPROVED` 或 `REJECTED` 内容的 `logs/approval_response.txt`
3. 超时 → 操作将被跳过
**实验室模式**(跳过审批):`NIRO_AUTO_APPROVE=1 python3 scripts/full_pipeline.py ...`
## 直接运行(不通过 PI)
```
# 来自 file 的单个 alert
PYTHONIOENCODING=utf-8 python3 scripts/full_pipeline.py --alert data/input/alerts/bruteforce.json --save
# Auto approve + quiet
NIRO_AUTO_APPROVE=1 PYTHONIOENCODING=utf-8 python3 scripts/full_pipeline.py --alert data/input/alerts/bruteforce.json --save --quiet
# 在 approve 后 resume(仅重新运行 Stage 3A+3B,使用 state cache)
PYTHONIOENCODING=utf-8 python3 scripts/full_pipeline.py --alert data/input/alerts/bruteforce.json --save --resume
# Batch(多个 alerts 并行)
PYTHONIOENCODING=utf-8 python3 scripts/batch_parallel.py --dir data/input/alerts/ --max-concurrent 3
```
## 输出
- **报告**:`reports/{ip}_{timestamp}_incident.md` — Markdown IR 报告(使用 `--save` 时生成)
- **Pipeline 结果**:`results/{ip}_{timestamp}_pipeline.json` — 原始输出,可用作未来的训练数据
- **审计日志**:`logs/audit.jsonl` — 防篡改的操作执行链条
- **Pipeline 缓存**:`logs/pipeline_cache/{alert_id}.json` — Stage 3A 之前的状态,用于 `--resume`
- **审批**:`logs/pending_approval.json` — 待执行的操作(如果有)
## 重要文件
- `scripts/full_pipeline.py` — 入口点,使用 asyncio scatter/gather 汇总全部 6 个 stage
- `src/agents/ml_classifier.py` — Stage 2A:LLM 分类 + 查询 `MITRE_KB` 获取遏制步骤
- `src/agents/mitre_mapper.py` — Stage 2B:RandomForest/cosine similarity → MITRE ATT&CK + IsolationForest 异常检测
- `src/agents/orchestrator_agent.py` — Stage 2C:Orchestrator LLM 协调 Investigator 子代理
- `src/agents/investigators/` — 4 个 investigator 子代理 (bruteforce, ddos, portscan, general)
- `src/agents/response_agent.py` — Stage 3A:human-in-the-loop 审批
- `src/agents/log_collector.py` — Stage 1B:从 `data/input/logs/` 读取
- `scripts/train_sklearn.py` / `scripts/train_isolation.py` — 为 Stage 2B 训练模型(参见 `data/training/README.md`)
- `pipeline.yaml` — 开启/关闭 stage、agent,切换 parallel/sequential,设置 timeout
- `.pi/chains/niro_pipeline_chain.md` — PI chain 定义(完整描述了 6 个 stage)
- `.pi/skills/` — 4 个 PI skills:run-pipeline, analyze-logs, run-batch, triage-alert
## 目录结构
```
niro-pi/
├── .pi/
│ ├── agents/ ← PI agent docs (1 file mô tả mỗi agent)
│ ├── chains/ ← Pipeline chain config (niro_pipeline_chain.md)
│ ├── prompts/ ← LLM system prompts
│ └── skills/ ← PI skills (run-pipeline, analyze-logs, run-batch, triage-alert)
├── src/
│ ├── agents/ ← Python agent implementations (kể cả investigators/)
│ ├── tools/ ← Network + threat-intel + response tools
│ └── utils/ ← Logger, safety, agent_loop (LLM tool-call loop), pipeline_config
├── scripts/ ← full_pipeline.py, batch_parallel.py, các script train_*.py
├── data/
│ ├── input/ ← ĐẶT DỮ LIỆU THỰC TẾ VÀO ĐÂY (alerts/ logs/ pcap/)
│ └── training/ ← labeled.jsonl + sklearn_model.pkl + isolation_model.pkl
├── logs/ ← Runtime logs, pipeline_cache/, approval files
├── reports/ ← Generated IR reports (.md)
├── results/ ← Raw pipeline JSON (nguồn dữ liệu training)
├── pipeline.yaml ← Config bật/tắt stage + parallel/sequential
└── requirements.txt
```
标签:Petitpotam, Python, 安全运营, 库, 应急响应, 扫描框架, 无后门, 自动化编排, 计算机取证, 逆向工具