Oskiir23/veredictum

GitHub: Oskiir23/veredictum

一款将恶意邮件静态取证分析与 LLM 推理相结合、自动生成 Word 格式鉴定意见书草稿的 DFIR 自主代理。

Stars: 0 | Forks: 0

# Veredictum **自主 DFIR Agent:恶意邮件分流 → 鉴定意见书草稿生成。** 你只需传入一封邮件(`.eml`)。Veredictum 会使用取证工具对其进行静态分析,LLM agent 会对事实进行推理,并生成一份 **Word 格式的鉴定意见书草稿** —— 它会标记出**无法**确认的内容以便人类鉴定专家进行验证,而不是凭空捏造结论。 ## 目录 1. [特性](#características) 2. [架构](#arquitectura) 3. [要求](#requisitos) 4. [安装](#instalación) 5. [API 密钥(免费)](#claves-de-api-gratis) 6. [使用 — 直接模式](#uso--modo-directo) 7. [使用 — VM 隔离模式(真实恶意软件)](#uso--modo-aislado-en-vm-malware-real) 8. [安全模型](#modelo-de-seguridad) 9. [项目结构](#estructura-del-proyecto) 10. [限制与法律声明](#limitaciones-y-aviso-legal) 11. [路线图](#roadmap) 12. [作者与许可证](#autor-y-licencia) ## 特性 - **邮件解析**:邮件头、SPF/DKIM/DMARC 身份验证、正文、附件。 - **IOC 提取**:URL、IP、域名、邮箱和哈希值(以 *defang* 格式呈现)。 - **静态附件分析**:哈希值(MD5/SHA-1/SHA-256)、通过 *magic bytes* 识别真实文件类型(检测伪装成 `.zip` 的 `.exe`),以及使用 `olevba` 分析 VBA 宏。 - **VirusTotal**:通过哈希值查询(从不上传文件)。 - **Word 鉴定意见书**采用鉴定模板:包含 TLP 封面、宣誓声明、法规、方法论、IOC、编号结论、证据监管链。 - **不确定性标记**:将无法得出结论的内容移至“待验证的限制与要点”部分。绝不捏造结论。 - **隔离模式**:对活体样本的操控在无网络的 VM 中进行;仅向宿主机传输文本。二进制文件永远不会触及你的设备。 ## 架构 **事实**(哈希值、身份验证、IOC)由取证工具提供;**推理**(结论、判定、不确定性)由 LLM 提供。这样事实就不会被凭空捏造。 **直接模式**(良性/已知样本)—— 全部在一台机器上执行: ``` .eml → [agente LLM + herramientas] → dictamen .docx ``` **隔离模式**(真实恶意软件)—— 将危险部分隔离开来: ``` VM aislada (SIN red) │ host (con internet) ─────────────────── │ ────────────────── extraer.py │ .eml → parse + hash + olevba │ → evidencia.json ──────────────┼──► dictaminar.py (binario → /tmp, NO sale) carpeta │ LLM + VirusTotal compartida │ → dictamen .docx ``` LLM 引擎隔离在 `veredictum/llm.py` 中(目前使用 Gemini);如果要使用本地模型(例如 Ollama),只需重新实现该文件即可。 ## 要求 - **Python 3.10+** - **Node.js 18+**(鉴定意见书 `.docx` 通过 `docx-js` 生成) - 一个 **Gemini** API 密钥(免费)—— 见下文 - *(可选)* **VirusTotal** 密钥(免费) - *(可选,针对真实恶意软件)* **VirtualBox** + Linux 虚拟机(Kali/Parrot) ## 安装 ``` # 1. Clonar git clone https://github.com//veredictum.git cd veredictum # 2. Python 虚拟环境 python -m venv .venv # Windows: .\.venv\Scripts\Activate.ps1 # Linux/Mac: source .venv/bin/activate # 3. Python 依赖 pip install -r requirements.txt # 4. Node 依赖(.docx 的 renderer) npm install # 5. 配置密钥(见下一节) copy .env.example .env # Windows (Linux/Mac: cp .env.example .env) # 编辑 .env 并粘贴你的密钥 ``` ## API 密钥(免费) 密钥**不包含**在代码库中。每位用户需将自己的密钥放入 `.env` 文件中(该文件已包含在 `.gitignore` 中,从不上传)。 ### Gemini(必需,免费) 1. 访问 **https://aistudio.google.com/app/apikey**(使用 Google 账号)。 2. 点击 **创建 API 密钥**(如果要求提供项目,请新建一个)。 3. 复制密钥。 ### VirusTotal(可选,免费) 1. 在 **https://www.virustotal.com** 注册账号。 2. 访问 **https://www.virustotal.com/gui/my-apikey** 并复制你的 API key。 3. 如果没有此密钥,哈希分析将被标记为“未查询”(有待人工验证)—— 系统依然能正常运行,但缺乏多引擎扫描的判定结果。 ### 存放位置 编辑 `.env` 文件(从 `.env.example` 复制): ``` GEMINI_API_KEY=tu_clave_de_gemini VT_API_KEY=tu_clave_de_virustotal # opcional VEREDICTUM_MODEL=gemini-2.5-flash # modelo del free tier ``` ## 使用 — 直接模式 适用于**无害或已知**的样本,无需 VM。只需一步即可完成分析并生成意见书: ``` python run.py veredictum/samples/demo.eml ``` 生成的鉴定意见书会保存在 `salida/dictamen_.docx` 中。 ## 使用 — VM 隔离模式(真实恶意软件) 对于包含**潜在恶意附件**的邮件,操作需在**无互联网连接**的虚拟机中进行。二进制文件永远不会触及宿主机;仅通过 JSON 文本传递事实。 ### 1. 准备 VM 在 VirtualBox 中创建(或克隆)一台 Linux VM。建议从已安装好的 Kali/Paroot 镜像开始操作。**务必始终使用一次性的克隆副本进行操作**,不要在你主要的 VM 上操作。 ### 2. 加固 VM(需禁用的项目) 在 VM **关机**状态下,打开 **设置(Configuración)** 并应用: **a) 禁用网络**(最重要的一点 —— 否则恶意软件将能连接外网): - `设置(Configuración) → 网络(Red) → 网卡 1(Adaptador 1)` - **取消勾选“启用网卡(Habilitar adaptador de red)”**。 - 如果适配器 2–4 处于活动状态,请重复此操作。 **b) 禁用剪贴板和拖放功能**(防止污染的途径): - `设置(Configuración) → 常规(General) → 高级(Avanzado)`(或专家模式下的 *Features* 选项卡) - **共享剪贴板(Portapapeles compartido) → 禁用(Inhabilitado)** - **拖放(Arrastrar y soltar) → 禁用(Inhabilitado)** ### 3. 创建共享文件夹(传输通道) 此文件夹是 VM↔宿主机之间**唯一**的桥梁。仅共享提取器所在的文件夹 —— **绝不要**共享包含你 `.env` 的项目主文件夹。 1. 在宿主机上,生成传输文件夹(复制不包含 `.env` 的提取器,并创建 `entrada/` 和 `salida/`): python preparar_transfer.py 2. 进入 `设置(Configuración) → 共享文件夹(Carpetas compartidas) →(+ 图标)` 3. 填写以下内容: - **文件夹路径(Ruta de la carpeta)**:宿主机上 `transfer_vm/` 的路径。 - **文件夹名称(Nombre de la carpeta)**:`transfer_vm`。 - **自动挂载(Automontar)**:✅ 勾选。 - **只读(Sólo lectura)**:❌ 不勾选(VM 必须能够写入 `evidencia.json`)。 4. 点击确认。在 Kali 中,它将被挂载到 `/media/sf_transfer_vm`。 ### 4. 拍摄快照(snapshot)以保存干净状态 在植入恶意软件之前,请先建立一个还原点: - 在 VM 窗口中:`设备/计算机(Máquina) → 拍摄快照(Tomar instantánea)`(将其命名为 `limpio`)。 ### 5. 分析流程 ``` [Host] Copia el correo a analizar en transfer_vm/entrada/caso.eml [VM] Arranca la VM (login por defecto en imágenes Kali: kali / kali) [VM] En una terminal: cd /media/sf_transfer_vm bash correr_en_vm.sh entrada/caso.eml -> genera salida/evidencia.json (solo texto) -> el binario queda en /tmp/veredictum DENTRO de la VM [Host] python dictaminar.py transfer_vm/salida/evidencia.json CASO-ID -> salida/dictamen_CASO-ID.docx ``` ### 6. 清理(重要) 完成后,**恢复快照**(`设备/计算机(Máquina) → 快照(Instantáneas) → 恢复(Restaurar) 'limpio'`)。这将删除恶意二进制文件,并使 VM 恢复干净状态以备下次使用。 ## 安全模型 - **绝不执行**任何附件。仅进行静态分析。 - 附件在写入隔离文件夹时,会添加 **`.quarantine`** 后缀(不可执行,无法通过双击运行)。 - 在隔离模式下,隔离区**位于 VM 内部**(`/tmp/veredictum`);向宿主机仅传输 `evidencia.json`(文本)。 - 发送给 VirusTotal 的**仅限哈希值**,绝无文件本身。 - SHA-256 会在**触及磁盘之前在内存中完成计算**:即便杀毒软件删除了样本,意见书中依然会保留哈希值。 - 包含你密钥的 `.env` 位于 `.gitignore` 中,不会上传至代码库。 ## 项目结构 ``` veredictum/ config.py Claves, modelo, rutas (dotenv opcional) context.py Store de hechos compartido entre herramientas llm.py Capa LLM aislada (Gemini; cambiable a local) agent.py Persona del perito + orquestación (directo y split) extractor.py Extracción offline (para la VM) tools/ email_tools.py parse_email, extract_iocs attachment_tools.py analyze_attachment (olevba), vt_lookup report_tools.py write_report (invoca el renderer Node) render/ gen_dictamen.js Renderer del .docx (docx-js) con la plantilla pericial samples/demo.eml Correo de demostración (inofensivo) run.py CLI modo directo extraer.py CLI extracción (en la VM) dictaminar.py CLI dictamen desde hechos (en el host) transfer_vm/ Carpeta a compartir con la VM (extractor + entrada/salida) tests/ Pruebas de humo ``` ## 限制与法律声明 - 生成结果仅为**草稿**,需经过司法鉴定验证。它并非已签字的正式鉴定意见书,也不构成法律建议。 - 宏分析(`olevba`)需要 `oletools` 支持;在没有该工具的 VM 中将跳过此步骤(PE 文件不需要宏)。 - 支持 `.msg`(Outlook)和 YARA 规则:已列入路线图。 - 仅对你已获授权的电子证据使用本工具。 ## 路线图 - [ ] 支持 `.msg`(Outlook)格式邮件。 - [ ] 对附件应用 **YARA** 规则。 - [ ] **动态分析**(在隔离沙箱中引爆)。 - [ ] **本地 LLM**(Ollama)选项,实现 100% 离线流程。 ## 作者与许可证 **Óscar Carretero Hilillo** —— ASIR 高级技师 · 网络安全硕士。 **MIT** 许可证(详见 `LICENSE`)。
标签:LLM智能体, MITM代理, 云安全监控, 库, 应急响应, 恶意邮件分析, 数字取证, 自动化报告生成, 自动化脚本, 逆向工具, 静态分析