AnonShield/MulitaMiner

GitHub: AnonShield/MulitaMiner

一款基于 LLM 的自动化工具,用于从安全 PDF 报告中提取并结构化漏洞信息。

Stars: 4 | Forks: 0

MulitaMiner logo **Vulnerability Extraction from Security Reports using LLMs** _Automated · Structured · Multi-LLM_ ![Python](https://img.shields.io/badge/Python-3.8+-blue) ![license](https://img.shields.io/badge/license-MIT-green) ![status](https://img.shields.io/badge/status-active-orange) ![update](https://img.shields.io/badge/last%20update-Mar%202026-lightgrey)
# MulitaMiner **MulitaMiner** 是一个自动化工具,用于从安全扫描器生成的异构 PDF 报告中提取并结构化漏洞信息。其基于 LLM 的流水线结合了自适应分块和扫描器感知提示,将非结构化发现转换为一致、便于分析的漏洞记录,并提供标准化输出和质量验证。 作为一项关键贡献,提供了一个包含 **6,700 个漏洞** 的数据集,这些漏洞来自 **129 份 OpenVAS 报告**,可供未来研究参考。该数据集通过主机/IP 和漏洞名称匹配与真实记录进行对比评估,达到了 **召回率 96.18%**、**精确率 91.06%** 和 **F1 分数 0.9355**。此外,该提取工具还使用 BERTScore 和 ROUGE-L 语义相似度指标,针对 3 份报告的结构化基线进行了验证。 **使用场景:** - **安全分析**:从扫描器报告中自动提取漏洞 - **企业集成**:支持 CAIS 格式以适配企业系统 - **研究与开发**:不同 LLM 的对比评估 ## README 结构 - [参考徽章](#considered-badges) - [基本信息](#basic-information) - [依赖项](#dependencies) - [安全注意事项](#security-concerns) - [安装指南](#installation) - [最小测试](#minimum-test) - [实验说明](#experiments) - [文档资料](#documentation) - [许可证](#license) ## 参考徽章 以下徽章用于评估:**可用性**、**功能性**、**可持续性**、**可复现性**。 ## 基本信息 ### 运行环境 | 组件 | 要求 | | ------ | ----------------------------------------- | | **操作系统** | Windows 10+、Linux(Ubuntu 20.04+)、macOS 10.15+ | | **Python** | 3.8+(推荐:3.10+) | | **内存** | 4GB+(处理大型 PDF 建议 8GB) | | **磁盘** | 依赖项占用 500MB 加上输出文件空间 | | **网络** | 需要联网以调用 LLM API | ### 支持的 LLM | 提供商 | 模型 | | ------ | ------------------------- | | OpenAI | GPT-4、GPT-5 | | Groq | Llama3、Llama4、Qwen3 | | DeepSeek | deepseek-chat | ## 依赖项 ### 主要依赖 ``` langchain>=0.1.0,<0.3.0 # LLM framework langchain-openai>=0.1.0,<0.2.0 # OpenAI integration tiktoken>=0.5.1,<0.7.0 # Tokenization pdfplumber>=0.10.0,<0.12.0 # PDF extraction python-dotenv>=0.21.0 # Environment variables tqdm>=4.0.0,<5.0.0 # Progress bars pandas>=1.3.0,<3.0.0 # Data manipulation openpyxl>=3.0.0,<4.0.0 # Excel export ``` ### 指标评估(可选) ``` bert-score>=0.3.0,<0.4.0 # BERTScore rouge-score>=0.1.0 # ROUGE torch>=1.10.0,<3.0.0 # PyTorch (required for BERTScore) rapidfuzz>=3.0.0,<4.0.0 # Fuzzy matching ``` **第三方资源:** - 各提供商的 LLM API 密钥(OpenAI、Groq、DeepSeek) - 安全扫描器的样本 PDF 报告(OpenVAS、Tenable WAS) 请参阅 [docs/INSTALL.md](docs/INSTALL.md) 获取完整的依赖说明。 ## 安全注意事项 **API 密钥**:该工具需要在 `.env` 文件中配置 LLM API 密钥。请勿将该文件提交到公共仓库。 **PDF 处理**:该工具在本地处理 PDF 文件。除 LLM API 调用(用于漏洞提取的文本分块)外,不会向外部服务发送数据。 **网络**:该工具会向以下地址发起 HTTPS 请求,请确保网络允许出站连接: - `api.openai.com`(OpenAI) - `api.groq.com`(Groq) - `api.deepseek.com`(DeepSeek) ## 安装 ### 1. 克隆仓库 ``` git clone https://github.com/AnonShield/MulitaMiner.git cd MulitaMiner ``` ### 2. 创建虚拟环境 ``` # Windows python3 -m venv .venv .venv\Scripts\activate # Linux/Mac python3 -m venv .venv source .venv/bin/activate ``` ### 3. 安装依赖 ``` pip install -r requirements.txt ``` ### 4. 配置 API 密钥 创建或编辑 `.env` 文件: ``` API_KEY_GPT4 = "your-openai-api-key" API_KEY_LLAMA3 = "your-groq-api-key" API_KEY_DEEPSEEK = "your-deepseek-api-key" ``` 请参阅 [docs/CONFIG.md](docs/CONFIG.md) 了解所有配置选项。 ## 最小测试 安装完成后,运行以下最小测试以验证环境设置: ### 1. 执行提取 ``` # 使用 Groq 进行基础提取 # Windows python main.py --input test\openvas\OpenVAS_JuiceShop.pdf --llm llama3 --scanner openvas --allow-duplicates --output-file openvas_test # Linux/macOS python3 main.py --input test/openvas/OpenVAS_JuiceShop.pdf --llm llama3 --scanner openvas --allow-duplicates --output-file openvas_test ``` **预期结果**:生成 openvas_test.json(包含提取的漏洞)和 visual_layout.txt 文件 ### 2. 验证输出 检查生成的 JSON 文件中的提取漏洞: ``` # Windows python tools/summarize_vulnerabilities.py --input openvas_test.json # Linux/macOS python3 tools/summarize_vulnerabilities.py --input openvas_test.json ``` **预期结果**:终端打印以表格形式汇总所有提取的漏洞。 ## 实验 本节说明如何复现论文中的主要结论。 ### 主张 #1:多 LLM 漏洞提取 **描述**:MulitaMiner 使用多个 LLM 提供商(DeepSeek、GPT-4、LLaMa 3 等)从 PDF 报告中提取漏洞。 **配置**:在 `.env` 中填写所需提供商的 API 密钥。 **执行**: ``` # 使用 DeepSeek(论文中最佳成本效益)及其他 LLMs 进行比较提取 # Windows python main.py --input test\openvas\OpenVAS_JuiceShop.pdf --llm deepseek --scanner openvas --allow-duplicates --output-file openvas_test_deepseek python main.py --input test\openvas\OpenVAS_JuiceShop.pdf --llm gpt4 --scanner openvas --allow-duplicates --output-file openvas_test_gpt4 python main.py --input test\openvas\OpenVAS_JuiceShop.pdf --llm llama3 --scanner openvas --allow-duplicates --output-file openvas_test_llama3 # Linux/macOS python3 main.py --input test/openvas/OpenVAS_JuiceShop.pdf --llm deepseek --scanner openvas --allow-duplicates --output-file openvas_test_deepseek python3 main.py --input test/openvas/OpenVAS_JuiceShop.pdf --llm gpt4 --scanner openvas --allow-duplicates --output-file openvas_test_gpt4 python3 main.py --input test/openvas/OpenVAS_JuiceShop.pdf --llm llama3 --scanner openvas --allow-duplicates --output-file openvas_test_llama3 ``` **预计时间**:约 12 分钟完成全部提取 - Deepseek:约 6 分钟 - GPT4:约 5 分钟 - LLAMA3:约 45 秒 **预期结果**:生成 openvas_test\.json 文件,包含 `Name`、`description`、`severity`、`cvss`、`port`、`references` 等字段的提取漏洞。 ### 主张 #2:使用 BERTScore/ROUGE-L 进行质量评估 **描述**:该工具使用 BERTScore 和 ROUGE-L 指标与真实记录基线对比评估提取质量,相似度分为:高度相似(≥0.7)、中等相似(0.6–0.7)、低相似(0.4–0.6)和差异显著(<0.4)。 **执行**: ``` # 使用 BERTScore 和 ROUGE-L 进行评估 # Windows python metrics/bert/compare_extractions_bert.py --baseline-file test\openvas\OpenVAS_JuiceShop.xlsx --extraction-file openvas_test_deepseek.json --model deepseek --output-dir results_bert --allow-duplicates python metrics/rouge/compare_extractions_rouge.py --baseline-file test\openvas\OpenVAS_JuiceShop.xlsx --extraction-file openvas_test_deepseek.json --model deepseek --output-dir results_rouge --allow-duplicates # Linux/macOS python3 metrics/bert/compare_extractions_bert.py --baseline-file test/openvas/OpenVAS_JuiceShop.xlsx --extraction-file openvas_test_deepseek.json --model deepseek --output-dir results_bert --allow-duplicates python3 metrics/rouge/compare_extractions_rouge.py --baseline-file test/openvas/OpenVAS_JuiceShop.xlsx --extraction-file openvas_test_deepseek.json --model deepseek --output-dir results_rouge --allow-duplicates ``` **预计时间**:BERT 约 15 秒,ROUGE 约 3 秒 **预期结果**:在 ./results_bert 和 ./results_rouge 目录中生成包含 BERTScore 和 ROUGE-L 指标的 XLSX 文件。 ### 主张 #3:大规模可复现性 **描述**:MulitaMiner 支持跨多个报告、LLM 和运行批处理实验,并具备检查点功能以恢复中断的执行。 **执行**: ``` # 运行完整实验套件 # Windows python tools/run_experiments.py --input-dir test\openvas --llms deepseek --scanners openvas --evaluation-methods bert rouge --runs-per-model 5 --allow-duplicates true # Linux/macOS python3 tools/run_experiments.py --input-dir test/openvas --llms deepseek --scanners openvas --evaluation-methods bert rouge --runs-per-model 5 --allow-duplicates true ``` **预计时间**:约 40 分钟 **预期结果**:在 `results_runs/` 中生成结构化的结果,包含每个运行的提取漏洞(JSON/XLSX)、BERTScore 与 ROUGE-L 评估报告,以及包含 Token 使用量和成本估算的最终聚合报告。图表与可视化(热力图、堆叠相似度图)保存在 `plot_runs/` 中。 如需详细的实验配置和论文结果,请参阅 [docs/EXPERIMENTS.md](docs/EXPERIMENTS.md)。 ## 文档资料 详细文档按独立文件组织: | 文档 | 描述 | | ---------------------------------------------- | ----------------------------- | | [docs/INSTALL.md](docs/INSTALL.md) | 详细安装指南 | | [docs/USAGE.md](docs/USAGE.md) | 完整使用指南与示例 | | [docs/CONFIG.md](docs/CONFIG.md) | API 密钥与 Token 配置 | | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | 代码结构与组件说明 | | [docs/EXTENSIBILITY.md](docs/EXTENSIBILITY.md) | 添加新扫描器与 LLM 支持 | | [docs/TROUBLESHOOTING.md](<_URL_17/>) | 常见错误与优化建议 | | [docs/EXPERIMENTS.md](docs/EXPERIMENTS.md) | 实验验证细节 | | [docs/INVENTORY.md](docs/INVENTORY.md) | 容器清单与分发信息 | ## 许可证 本项目采用 [MIT 许可证](https://opensource.org/licenses/MIT)。 - **使用权限**:可免费用于学习、修改、分发及再许可(包括商业用途)。 - **免责声明**:按“原样”提供,不附带任何明示或暗示的担保。用户需自行负责数据与密钥的安全使用与配置。 请参阅 [LICENSE](LICENSE) 获取完整许可证文本。 ``` bert-score>=0.3.0,<0.4.0 # BERTScore rouge-score>=0.1.0 # ROUGE torch>=1.10.0,<3.0.0 # PyTorch (required for BERTScore) rapidfuzz>=3.0.0,<4.0.0 # Fuzzy matching ``` ``` git clone https://github.com/AnonShield/MulitaMiner.git cd MulitaMiner ``` ``` # Windows python3 -m venv .venv .venv\Scripts\activate # Linux/Mac python3 -m venv .venv source .venv/bin/activate ``` ``` pip install -r requirements.txt ``` ``` API_KEY_GPT4 = "your-openai-api-key" API_KEY_LLAMA3 = "your-groq-api-key" API_KEY_DEEPSEEK = "your-deepseek-api-key" ``` ``` # 使用 Groq 进行基础提取 # Windows python main.py --input test\openvas\OpenVAS_JuiceShop.pdf --llm llama3 --scanner openvas --allow-duplicates --output-file openvas_test # Linux/macOS python3 main.py --input test/openvas/OpenVAS_JuiceShop.pdf --llm llama3 --scanner openvas --allow-duplicates --output-file openvas_test ``` ``` # Windows python tools/summarize_vulnerabilities.py --input openvas_test.json # Linux/macOS python3 tools/summarize_vulnerabilities.py --input openvas_test.json ``` ``` # 使用 DeepSeek(论文中最佳成本效益)及其他 LLMs 进行比较提取 # Windows python main.py --input test\openvas\OpenVAS_JuiceShop.pdf --llm deepseek --scanner openvas --allow-duplicates --output-file openvas_test_deepseek python main.py --input test\openvas\OpenVAS_JuiceShop.pdf --llm gpt4 --scanner openvas --allow-duplicates --output-file openvas_test_gpt4 python main.py --input test\openvas\OpenVAS_JuiceShop.pdf --llm llama3 --scanner openvas --allow-duplicates --output-file openvas_test_llama3 # Linux/macOS python3 main.py --input test/openvas/OpenVAS_JuiceShop.pdf --llm deepseek --scanner openvas --allow-duplicates --output-file openvas_test_deepseek python3 main.py --input test/openvas/OpenVAS_JuiceShop.pdf --llm gpt4 --scanner openvas --allow-duplicates --output-file openvas_test_gpt4 python3 main.py --input test/openvas/OpenVAS_JuiceShop.pdf --llm llama3 --scanner openvas --allow-duplicates --output-file openvas_test_llama3 ``` ``` # 使用 BERTScore 和 ROUGE-L 进行评估 # Windows python metrics/bert/compare_extractions_bert.py --baseline-file test\openvas\OpenVAS_JuiceShop.xlsx --extraction-file openvas_test_deepseek.json --model deepseek --output-dir results_bert --allow-duplicates python metrics/rouge/compare_extractions_rouge.py --baseline-file test\openvas\OpenVAS_JuiceShop.xlsx --extraction-file openvas_test_deepseek.json --model deepseek --output-dir results_rouge --allow-duplicates # Linux/macOS python3 metrics/bert/compare_extractions_bert.py --baseline-file test/openvas/OpenVAS_JuiceShop.xlsx --extraction-file openvas_test_deepseek.json --model deepseek --output-dir results_bert --allow-duplicates python3 metrics/rouge/compare_extractions_rouge.py --baseline-file test/openvas/OpenVAS_JuiceShop.xlsx --extraction-file openvas_test_deepseek.json --model deepseek --output-dir results_rouge --allow-duplicates ``` ``` # 运行完整实验套件 # Windows python tools/run_experiments.py --input-dir test\openvas --llms deepseek --scanners openvas --evaluation-methods bert rouge --runs-per-model 5 --allow-duplicates true # Linux/macOS python3 tools/run_experiments.py --input-dir test/openvas --llms deepseek --scanners openvas --evaluation-methods bert rouge --runs-per-model 5 --allow-duplicates true ```
标签:BERTScore, CAIS格式, DLL 劫持, F1-score, GPT, LLM, OpenVAS, PDF解析, PHP, Precision, Python, Recall, ROUGE-L, Unmanaged PE, 企业安全, 凭据扫描, 反取证, 多模型集成, 大语言模型, 安全报告, 安全评估, 无后门, 漏洞提取, 漏洞数据集, 漏洞管理, 结构化数据, 网络资产管理, 自动化安全分析, 自适应分块, 语义提取, 逆向工具