INARI18/MulitaMiner2

GitHub: INARI18/MulitaMiner2

利用 LLM 和块锚定技术从多种安全扫描器的 PDF 报告中确定性提取漏洞,输出统一结构化格式并支持多平台导出与修复优先级排序。

Stars: 0 | Forks: 0

MulitaMiner logo **使用 LLM 从安全报告中提取漏洞** _块锚定 · 多扫描器 · 多 LLM_ ![Python](https://img.shields.io/badge/Python-3.11+-blue) ![License](https://img.shields.io/badge/license-MIT-green) ![Status](https://img.shields.io/badge/status-active-brightgreen)
# MulitaMiner MulitaMiner 能够将安全扫描器生成的 PDF 报告——每个报告都有各自的布局和词汇——转化为单一、结构化且具备分析条件的漏洞 schema。其 LLM pipeline 采用**块锚定**(block-anchored)技术:在进行任何模型调用*之前*,将报告确定性地拆分为多个发现项(finding),以便模型填充每个发现项的字段,而不是“发现”漏洞,从而确保输出数量始终与报告一致。 除了提取功能外,它还能在统一的记录模型下整合异构扫描器(OpenVAS/Greenbone、Tenable WAS,或通过 JSON config 自定义),导出为真实工具支持的格式(SARIF、CSAF、DefectDojo、CAIS、CSV、XLSX),将发现项排入 KEV/EPSS/SSVC 修复队列(remediation queue),并提供一个 schema 驱动的评估子系统,能够根据真实参考基准(ground-truth baselines)对提取质量进行评分。 ## Pipeline ![MulitaMiner pipeline](https://static.pigsec.cn/wp-content/uploads/repos/cas/6c/6c357a87e9364fd1ca831376877f8f1afba5de7df6b8d7b528ad5b84f703e091.svg) 1. **PDF**:输入扫描器报告。 2. **提取文本**:从 PDF 中提取纯文本。 3. **切分区块**:确定性地将文本按照每个发现项切分成一个区块,因此在调用任何 LLM 之前就能知道发现项的数量。 4. **打包切片**:将完整的区块分组为符合 token 预算的切片(区块绝不会被拆分)。 5. **LLM 提取**:连同扫描器的 prompt 一起将每个切片发送给模型,模型会填充每个区块的字段;区块 ID 确保每个发现项对应一条记录。处理失败的区块将以更小的切片形式退回到第 4 步重新处理。 6. **合并**:配对基础项(base)和实例(instances),规范化严重程度,并合并相同的记录。 7. **results.json**:结构化记录,即主要输出产物(artifact)。 8. **导出**:可选的 SARIF、CSAF、DefectDojo Generic、CAIS、CSV、XLSX。 ## 支持项 | | | | --- | --- | | 扫描器 | OpenVAS/Greenbone、Tenable WAS(通过 JSON config 自定义添加) | | 云端模型 | DeepSeek、OpenAI (gpt-4o, gpt-4o-mini)、Groq (Llama 3.3 70B)、Claude (Haiku) | | 本地模型 | Ollama、LM Studio、任何兼容 OpenAI 的服务器。无需 API key | | 导出 | XLSX、CSV、SARIF 2.1.0、DefectDojo Generic JSON、CAIS、CSAF 2.0 | | 评估 | 覆盖率及逐字段指标(精确匹配、集合 F1、token F1、ROUGE-L,可选 BERTScore/NLI) | ## 环境要求 | 组件 | 要求 | | --- | --- | | Python | 3.11+ | | 包管理器 | [uv](https://docs.astral.sh/uv/) | | RAM | 4 GB+(大型报告需 8 GB) | | 网络 | 仅云端 LLM 调用时需要;本地模型可完全在离线状态下运行 | ## 安装说明 **1. 安装 uv**(如果尚未安装,只需执行一次): ``` # Linux / macOS curl -LsSf https://astral.sh/uv/install.sh | sh ``` ``` # Windows (PowerShell) powershell -c "irm https://astral.sh/uv/install.ps1 | iex" ``` **2. 克隆并同步:** ``` git clone https://github.com/INARI18/MulitaMiner2.git cd MulitaMiner2 uv sync ``` **3. 配置 API keys**(如果仅使用本地模型,请跳过此步): ``` # Linux / macOS cp .env.example .env ``` ``` # Windows (PowerShell) Copy-Item .env.example .env ``` 然后为您使用的服务商填入相应的 key(`.env` 文件已被 gitignore —— 切勿提交): ``` DEEPSEEK_API_KEY="..." OPENAI_API_KEY="..." GROQ_API_KEY="..." CLAUDE_API_KEY="..." ``` 可选的复杂指标(BERTScore/NLI,需要拉取 torch):`uv sync --group eval`。 ## 快速开始 使用一个免费且完全离线的命令来验证安装(无需 API key): ``` uv run mulitaminer segment resources/openvas/OpenVAS_JuiceShop.pdf --scanner openvas ``` 预期输出:`34 blocks found`。接着进行一次真正的提取(需使用您的 key): ``` # 提取并写入电子表格 uv run mulitaminer extract resources/openvas/OpenVAS_JuiceShop.pdf --scanner openvas --model deepseek --export xlsx # 在后续从同一运行生成更多导出,无需 LLM 调用 uv run mulitaminer export outputs/runs/ -e sarif -e csaf # 将发现结果排序到修复队列 (KEV/EPSS/SSVC) uv run mulitaminer sync-feeds uv run mulitaminer prioritize outputs/runs/ # 根据 ground-truth XLSX 对已完成的运行进行评分 (离线,无 LLM) uv run mulitaminer evaluate outputs/runs/ ``` 在 Linux、macOS 和 Windows 上,`uv run mulitaminer ...` 命令是完全通用的。每次运行都会创建 `outputs/runs/__/` 目录,其中包含 `results.json`(提取记录)、`run.json`(包含 config、token、成本、警告)以及每个请求导出格式所对应的文件。 ## 评估 `mulitaminer evaluate ` 会将某次运行的记录与基准 XLSX 文件(自动在源 PDF 旁边发现,或通过 `--baseline` 指定)进行对齐,并在运行目录中写入 `evaluation.json` + `evaluation.md`:包含覆盖率(recall/precision,遗漏/误报的发现项)以及逐字段评分。各项指标均源自记录的 schema —— 数值/分类字段采用精确匹配,参考列表采用集合 F1,文本字段采用 token F1 + ROUGE-L(使用 `--metrics` 进行选择,使用 `--list-metrics` 查看列表)。BERTScore 和 NLI 矛盾检查属于可选且资源消耗较大的功能:`uv sync --group eval`。 ## 实验 `mulitaminer experiment --models deepseek,ollama --runs 5` 会对指定目录下的 PDF 针对每种(模型,报告)组合运行 X 次提取(系统会为每个文件自动检测扫描器),并根据其对应的基准进行评估。本地模型和云端模型会**并行**运行(通过强制执行速率限制的凭证/服务器进行分组);已完成的运行会被设置检查点(checkpoint),因此中断的批次任务可以从上次停止的地方恢复。输出结果将保存在 `output_experiments///run_/` 目录下。 ## 安全事项 - **API keys** 保存在一个已被 gitignore 的 `.env` 文件中。切勿提交。 - **哪些数据会离开您的机器**:仅包含报告的文本切片(chunk),且会发送给您选择的 LLM 服务商。如果使用本地模型(Ollama、LM Studio),数据完全不会离开您的机器。系统不收集任何遥测数据。 - **网络出站** 仅限于您配置的服务商端点(例如 `api.deepseek.com`、`api.openai.com`、`api.groq.com`、`api.anthropic.com`)。本地模型仅与 `localhost` 通信。 - **敏感输出**:提取出的记录包含主机、端口及漏洞详情。虽然 `outputs/` 目录下的运行产物已被 gitignore,但您仍需自行负责其安全存储与共享方式。 ## 文档 | 文档 | 描述 | | --- | --- | | [docs/USAGE.md](docs/USAGE.md) | 所有命令、标志、运行产物及示例 | | [docs/CONFIG.md](docs/CONFIG.md) | API keys、模型配置及可调参数 | | [docs/ADDING_A_MODEL.md](docs/ADDING_A_MODEL.md) | 接入新的 LLM(云端或本地) | | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | Pipeline 阶段、模块及设计规则 | | [docs/SCANNER_CONFIGS.md](docs/SCANNER_CONFIGS.md) | 添加扫描器的方法及内置配置说明 | | [docs/EXPORTS.md](docs/EXPORTS.md) | 导出格式、各自的消费者及字段映射 | | [docs/PRIORITIZATION.md](docs/PRIORITIZATION.md) | 为单次运行构建 KEV/EPSS/SSVC 修复队列 | | [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) | 症状、原因及修复方法 | ## 开发 ``` uv run pytest # full suite, offline (fake LLM) ``` ## 许可证 [MIT](LICENSE)。可免费使用、修改和分发,包括用于商业用途。按“原样”提供,不提供任何担保;您需对数据和 API keys 的安全处理负责。
标签:AI风险缓解, DLL 劫持, GPT, Python, 信息抽取, 大语言模型, 文档解析, 无后门, 漏洞管理, 逆向工具