allsmog/VolatilityAI

GitHub: allsmog/VolatilityAI

将 Volatility3 内存取证与 LLM 结合的 AI 驱动取证助手,支持自动化分类分析、证据依据验证和交互式调查聊天。

Stars: 0 | Forks: 0

# VolatilityAI **AI 驱动的 Volatility3 内存取证助手** VolatilityAI 将 [Volatility3](https://github.com/volatilityfoundation/volatility3) 内存取证与 LLM 相结合,以自动化分类分析并支持对内存转储的交互式调查。与普通的 LLM 封装器不同,VolAI 根据真实证据验证 LLM 输出,运行确定性检测规则,并持久化会话以便随时间推移进行比较。 ## 功能特性 - **自动化分类** (`volai analyze`) — 并行运行 Volatility3 插件,将结果发送给 LLM,并生成结构化的 JSON 取证报告,其中包含发现、严重性评级、MITRE ATT&CK 映射和建议 - **依据与验证** — 每个 LLM 发现都会根据实际的插件数据(PID、进程名、IP、路径)进行检查,并根据静态查找表验证 MITRE ID。每个发现都会获得一个 `grounded` 标志和 `confidence` 分数,以便您了解哪些是真实的 - **行为检测规则** — 10 条内置确定性规则(可疑的 svchost 父进程、域名仿冒、C2 端口、malfind 命中、隐藏进程等),无论 LLM 质量如何都能可靠触发。规则发现会被输入到 LLM 提示中,并单独出现在报告中 - **交互式聊天** (`volai chat`) — 基于 REPL 的调查会话,您可以即时运行插件并与 AI 取证分析师讨论发现 - **会话持久化** — 分析和聊天会话保存到 SQLite。恢复聊天、比较报告、将会话导出为 JSON - **时间线提取** (`volai timeline`) — 从插件数据(进程创建、网络连接、bash 命令)构建按时间顺序排列的事件视图,无需 LLM - **报告差异比对** (`volai diff`) — 比较两个分类报告以查看变化:新增/已解决的发现、风险分数增量、新 PID、新网络连接 - **可插拔 LLM 后端** — Claude (Anthropic)、OpenAI 或任何 OpenAI 兼容端点(Ollama、vLLM、llama.cpp 等)。自注册:添加新的提供者类,它就会自动出现在 CLI 中 - **优雅降级** — 如果 LLM 失败或返回垃圾数据,行为规则仍然会产生可操作的发现并强制执行风险分数下限 ## 安装 需要 **Python 3.11+**。 ``` pip install . ``` 用于开发: ``` pip install -e ".[dev]" ``` ## 快速开始 ### 自动化分类 ``` # 使用 Claude volai analyze memory.dmp --provider claude # 使用 OpenAI volai analyze memory.dmp --provider openai --model gpt-4o # 使用本地模型 (Ollama) volai analyze memory.dmp --provider local --model llama3 # 保存报告到文件 volai analyze memory.dmp --provider claude -o report.json # 指定 OS 配置文件和自定义插件 volai analyze memory.dmp --provider openai --os-profile windows \ --plugins "windows.pslist.PsList,windows.netscan.NetScan,windows.malfind.Malfind" # 禁用行为规则或会话保存 volai analyze memory.dmp --provider claude --no-rules --no-save # 调整 LLM 参数 volai analyze memory.dmp --provider local --temperature 0.8 --max-tokens 8192 # 强制开启/关闭 JSON 模式(默认根据 Provider 自动检测) volai analyze memory.dmp --provider claude --json-mode ``` ### 交互式聊天 ``` volai chat memory.dmp --provider claude # 恢复之前的会话 volai chat memory.dmp --provider claude --resume abc12345 # 使用自定义 LLM 设置 volai chat memory.dmp --provider local --temperature 0.5 --max-tokens 16384 ``` 聊天命令: | 命令 | 描述 | |---|---| | `/run ` | 运行 Volatility3 插件并将输出添加到上下文 | | `/plugins` | 列出所有可用的 Volatility3 插件 | | `/rules` | 对收集到的插件数据运行行为检测规则 | | `/timeline` | 从收集到的插件数据中提取时间线 | | `/report` | 生成当前会话的摘要报告 | | `/sessions` | 显示当前会话 ID | | `/save` | 手动保存会话检查点 | | `/help` | 显示可用命令 | | `/quit` | 退出聊天会话 | ### 时间线 ``` volai timeline memory.dmp --provider local --model llama3 --format text volai timeline memory.dmp --provider local --model llama3 --format json volai timeline memory.dmp --provider local --model llama3 --format csv ``` ### 会话管理 ``` volai sessions list # List all saved sessions volai sessions list --type triage # Filter by type volai sessions show abc12345 # Show session detail volai sessions show abc12345 --messages # Include chat history volai sessions export abc12345 # Export as JSON to stdout volai sessions export abc12345 -o session.json volai sessions delete abc12345 --force ``` ### 报告差异比对 ``` volai diff volai diff --format json ``` ## 配置 ### LLM 提供者(必需) 通过 CLI 标志或环境变量设置: | 方法 | 示例 | |---|---| | CLI 标志 | `--provider claude` | | 环境变量 | `VOLAI_PROVIDER=claude` | ### API Keys 密钥按以下顺序解析:`--api-key` 标志 > `VOLAI_API_KEY` 环境变量 > 提供者特定的环境变量。 | 提供者 | 提供者特定的环境变量 | 默认模型 | |---|---|---| | `claude` | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514` | | `openai` | `OPENAI_API_KEY` | `gpt-4o` | | `local` | 不需要 | `llama3` | ### 本地模型 将 `--base-url` 指向任何 OpenAI 兼容端点: ``` # Ollama (默认: http://localhost:11434/v1) volai analyze memory.dmp --provider local --model llama3 # 自定义端点 volai analyze memory.dmp --provider local \ --base-url http://localhost:8080/v1 --model my-model ``` ### 所有环境变量 | 变量 | 描述 | |---|---| | `VOLAI_PROVIDER` | LLM 提供者 (`claude`, `openai`, `local`) | | `VOLAI_MODEL` | 模型名称/ID | | `VOLAI_API_KEY` | API 密钥(覆盖提供者特定的变量) | | `VOLAI_BASE_URL` | 本地/自定义端点的基础 URL | | `VOLAI_DB_PATH` | SQLite 数据库路径(默认:`~/.volai/volai.db`) | ### LLM 调优选项 | 标志 | 描述 | 默认值 | |---|---|---| | `--temperature` | 采样温度 | `0.2` | | `--max-tokens` | LLM 响应中的最大 token 数 | `4096` | | `--json-mode` / `--no-json-mode` | 强制 JSON 约束输出 | 根据提供者自动设置 | 省略时,每个提供者使用合理的默认值。JSON 模式对于支持它的提供者(OpenAI、local/Ollama)会自动启用,对于不支持的提供者则会禁用。 ## 工作原理 ### 分析流水线 ``` Memory Dump | v VolatilityRunner.run_plugins_async() -- plugins run in parallel | v Plugin Results (structured dicts) | +---> Behavioral Rules Engine -- 10 deterministic checks | | | v | Rule Findings (B001-B010) | +---> build_triage_prompt() -- plugin data + rule findings | v LLM Backend.send() -- Claude / OpenAI / local | v _parse_report() -- JSON parse with fallback | v Grounding & Validation -- evidence vs. plugin data, | MITRE ID validation v Risk Score Floor -- max(llm_score, rule_floor) | v TriageReport (JSON) -- findings, rule_findings, | grounding_summary, etc. v SessionStore.save() -- persisted to SQLite ``` ### 行为检测规则 针对插件数据确定性触发的 10 条捆绑规则: | ID | 规则 | 严重性 | MITRE | |---|---|---|---| | B001 | svchost.exe 父进程不是 services.exe | high | T1036.005 | | B002 | 进程从 Temp 目录运行 | medium | T1204 | | B003 | 进程名域名仿冒 (scvhost, csrsss 等) | high | T1036.005 | | B004 | 隐藏进程 (在 pslist 但不在 pstree 中,反之亦然) | critical | T1564.001 | | B005 | 常见 C2 端口上的连接 (4444, 5555, 1337 等) | medium | T1571 | | B006 | Malfind 命中 (代码注入指示符) | high | T1055 | | B007 | 具有异常父进程的 cmd.exe/powershell.exe | medium | T1059 | | B008 | 从非 system32 路径加载的内核模块 | medium | T1547.006 | | B009 | 3 个以上同名进程(不包括正常重复项) | low | T1055.012 | | B010 | temp/user 目录中的服务二进制文件 | high | T1543.003 | 规则发现设定风险分数下限:critical=80, high=60, medium=40, low=20。 ### 依据 每个 LLM 生成的发现都经过验证: - **证据** 根据从插件输出中提取的实际 PID、进程名、IP 和文件路径进行检查 - **MITRE ATT&CK IDs** 会验证格式 (`T####.###`) 并对照约 130 个已知技术 ID 进行检查 - 计算一个 `confidence` 分数:`(grounded_evidence + valid_mitre) / total_checks` - confidence < 0.5 的发现被标记为 `grounded: false` ### 报告结构 ``` { "dump_path": "/path/to/memory.dmp", "analysis_timestamp": "2025-01-15T10:30:00Z", "os_detected": "Windows 10 x64", "llm_provider": "claude", "llm_model": "claude-sonnet-4-20250514", "summary": "Executive summary...", "findings": [ { "title": "Suspicious Process Injection", "severity": "critical", "description": "Detailed explanation...", "evidence": ["PID 1234", "svchost.exe"], "mitre_attack": ["T1055"], "grounded": true, "confidence": 1.0, "grounding_details": { "evidence": [ {"value": "PID 1234", "grounded": true, "match_type": "pid"} ], "mitre": [ {"id": "T1055", "status": "valid"} ] } } ], "rule_findings": [ { "title": "[VOLAI-B001] Suspicious svchost parent", "severity": "high", "evidence": ["PID 2048", "PPID 1024"], "mitre_attack": ["T1036.005"] } ], "risk_score": 85, "grounding_summary": { "total_findings": 4, "grounded_findings": 3, "ungrounded_findings": 1, "grounding_rate": 0.75 }, "recommendations": ["Isolate the host"], "plugin_outputs": [...], "errors": [...] } ``` ## 项目结构 ``` src/volai/ ├── cli.py # Click CLI (analyze, chat, timeline, diff, sessions) ├── config.py # Configuration resolution ├── llm/ │ ├── base.py # LLMBackend ABC + self-registering backend registry │ ├── claude.py # Anthropic SDK backend │ ├── openai.py # OpenAI SDK backend │ └── local.py # Generic OpenAI-compatible backend ├── volatility/ │ ├── runner.py # Plugin execution + async parallel │ ├── plugins.py # Triage plugin sets per OS │ └── formatter.py # TreeGrid -> dict conversion ├── analysis/ │ ├── triage.py # Automated triage orchestrator │ ├── chat.py # Interactive chat REPL │ ├── grounding.py # Evidence & MITRE validation │ ├── mitre_data.py # Static MITRE ATT&CK technique IDs │ ├── timeline.py # Timeline extraction │ └── diff.py # Report diffing ├── rules/ │ ├── models.py # RuleFinding model │ └── behavioral.py # Rule engine + 10 bundled rules ├── storage/ │ ├── database.py # SQLite schema + connection │ └── store.py # SessionStore CRUD ├── prompts/ │ ├── system.py # System prompt constants │ └── templates.py # Prompt formatting └── report/ └── models.py # Pydantic models (report, timeline, diff) ``` ## 默认分类插件 插件根据 OS 配置文件选择。如果未指定配置文件,则尝试所有插件(错误 OS 的失败会被优雅处理)。 **Windows:** `Info`, `PsList`, `PsTree`, `CmdLine`, `NetScan`, `Malfind`, `DllList`, `Handles`, `FileScan`, `SvcScan`, `Modules` **Linux:** `PsList`, `PsTree`, `Bash`, `Lsof`, `Lsmod`, `Malfind`, `Sockstat`, `Elfs`, `Maps` **macOS:** `PsList`, `PsTree`, `Bash`, `Lsof`, `Lsmod`, `Malfind`, `Netstat`, `Mount` ## 测试 ``` # 运行所有测试 (235 项测试) pytest tests/ -v # Lint ruff check src/ tests/ # 运行 E2E 功能演示(无需 LLM key — 使用 fake HTTP server) python -m tests.demo_e2e_features ``` ## 许可证 MIT
标签:AI风险缓解, Claude, Cloudflare, CVE检测, DAST, DLL 劫持, Incident Response, IP 地址批量处理, LLM, LLM评估, Memory Forensics, MITRE ATT&CK, Mr. Robot, Ollama, OpenAI, Python, SecList, SecOps, Threat Intelligence, Unmanaged PE, Volatility3, 主机取证, 云安全架构, 交互式聊天, 人工智能, 内存取证, 内存规避, 后渗透, 大语言模型, 安全报告生成, 安全运营, 库, 应急响应, 恶意软件分析, 扫描框架, 数字取证, 无后门, 用户模式Hook绕过, 网络安全, 网络安全审计, 自动化分析, 自动化脚本, 行为检测, 跨站脚本, 逆向工具, 隐私保护