icepaule/IcePorge-Malware-RAG

GitHub: icepaule/IcePorge-Malware-RAG

基于 RAG 与本地 LLM 的恶意软件分析问答系统,将专业知识库与语义检索结合,为安全分析提供上下文丰富的 AI 辅助。

Stars: 1 | Forks: 0

# IcePorge 恶意软件 RAG **结合检索增强生成的 AI 驱动恶意软件分析** [IcePorge](https://github.com/icepaule/IcePorge) 恶意软件分析栈的一部分。 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ## 概述 Malware RAG 通过将精选的知识库(SANS FOR610/SEC504)与基于 Ollama 的本地 LLM 推理相结合,为恶意软件分析提供上下文丰富的 AI 响应。它使用 ChromaDB 进行向量存储和语义搜索。 ### 核心功能 - **RAG Pipeline** - 用于准确响应的检索增强生成 - **FOR610 知识库** - SANS 恶意软件分析课程资料 - **本地 LLM** - 通过 Ollama 进行注重隐私的推理(无云 API) - **向量搜索** - 基于 ChromaDB 的语义相似度搜索 - **REST API** - 易于与分析工具集成 ## 架构 ``` +--------------------------------------------------+ | Malware RAG (ki01) | | | | +--------------------------------------------+ | | | rag_api.py | | | | Flask REST API (:5001) | | | +--------------------------------------------+ | | | | | | v v | | +-------------+ +-------------+ | | | ChromaDB | | Ollama | | | | (Vectors) | | (qwen2.5) | | | +-------------+ +-------------+ | | ^ | | | | | +-------------+ | | | FOR610/SEC | | | | 504 PDFs | | | +-------------+ | +--------------------------------------------------+ Query Flow: 1. User query received 2. Query embedded via SentenceTransformer 3. Similar chunks retrieved from ChromaDB 4. Context + Query sent to Ollama 5. Enriched response returned ``` ## 组件 | 文件 | 描述 | |------|-------------| | `rag_api.py` | 包含 RAG pipeline 的 Flask REST API | | `ingest_documents.py` | PDF 摄取与分块 | ## 安装说明 ### 前置条件 - Python 3.10+ - 包含 `qwen2.5-coder:14b` 模型的 Ollama - 16GB+ RAM(用于 embeddings 和 LLM) ### 设置 ``` # 克隆 repository git clone https://github.com/icepaule/IcePorge-Malware-RAG.git cd IcePorge-Malware-RAG # 创建虚拟环境 python3 -m venv venv source venv/bin/activate # 安装依赖 pip install flask flask-cors chromadb sentence-transformers requests langchain langchain-community pypdf # 导入文档(将 PDF 放入 documents/ 文件夹) python ingest_documents.py /path/to/FOR610.pdf /path/to/SEC504.pdf # 启动 API 服务器 python rag_api.py ``` ## API 端点 ### 健康检查 ``` curl http://localhost:5001/health ``` 响应: ``` { "status": "healthy", "service": "malware-rag", "collections": ["for610"], "ollama_available": true } ``` ### 结合 RAG 上下文的查询 ``` curl -X POST http://localhost:5001/query \ -H "Content-Type: application/json" \ -d '{"query": "How do I identify process injection techniques?", "collection": "for610"}' ``` 响应: ``` { "response": "Process injection can be identified by...", "sources": [ {"content": "...", "source": "FOR610-book1.pdf", "page": 45, "relevance": 0.89} ], "model": "qwen2.5-coder:14b" } ``` ### 直接 LLM 查询(无 RAG) ``` curl -X POST http://localhost:5001/llm \ -H "Content-Type: application/json" \ -d '{"prompt": "Explain RC4 encryption in malware"}' ``` ## 文档摄取 ### 支持的格式 - PDF(通过 PyPDF) - 文本文件 ### 摄取流程 ``` # 单个文档 python ingest_documents.py /path/to/document.pdf # 多个文档 python ingest_documents.py /path/to/doc1.pdf /path/to/doc2.pdf # 自定义 collection 名称 python ingest_documents.py --collection sec504 /path/to/SEC504.pdf ``` ### 分块配置 | 参数 | 默认值 | 描述 | |-----------|---------|-------------| | `chunk_size` | 1000 | 每个 chunk 的字符数 | | `chunk_overlap` | 200 | chunk 之间的重叠量 | | `embedding_model` | `all-MiniLM-L6-v2` | SentenceTransformer 模型 | ## 配置 ### 环境变量 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `CHROMA_PATH` | `/opt/malware-rag/chroma_db` | ChromaDB 存储路径 | | `OLLAMA_URL` | `http://localhost:11434` | Ollama API endpoint | | `DEFAULT_MODEL` | `qwen2.5-coder:14b` | 默认 LLM 模型 | ## 集成示例 ### Python 客户端 ``` import requests def analyze_with_context(query): response = requests.post( "http://ki01:5001/query", json={"query": query, "collection": "for610"} ) return response.json() # 示例:获取上下文感知分析 result = analyze_with_context("What APIs are commonly used for keylogging?") print(result["response"]) ``` ### 命令行 ``` # 快速查询 curl -s http://ki01:5001/query \ -H "Content-Type: application/json" \ -d '{"query": "Explain API hashing"}' | jq .response ``` ## 知识库集合 | 集合 | 内容 | 文档 | |------------|---------|-----------| | `for610` | SANS FOR610 - 恶意软件逆向工程 | 课程 PDF | | `sec504` | SANS SEC504 - 事件响应 | 课程 PDF | ## 服务管理 ``` # 作为 systemd 服务启动 sudo systemctl start malware-rag # 查看日志 sudo journalctl -u malware-rag -f # 检查状态 sudo systemctl status malware-rag ``` ## 性能调优 ### GPU 加速 为了获得更快的 LLM 推理速度,请确保 Ollama 使用 GPU: ``` # 检查 GPU 使用情况 nvidia-smi # Ollama 会在可用时自动使用 GPU ollama run qwen2.5-coder:14b ``` ### 内存优化 - 减少查询中的 `n_results` 以获取更少的上下文 - 使用更小的 embedding 模型以加快搜索速度 - 调整 Ollama 中的 `num_ctx` 以改变上下文窗口大小 ## 许可证 MIT 许可证 - 参见 [LICENSE](LICENSE) **作者:** Michael Pauli - GitHub: [@icepaule](https://github.com/icepaule) - 邮箱:info@mpauli.de
标签:AI风险缓解, DAST, DLL 劫持, Ruby, 向量数据库, 大语言模型, 恶意软件分析, 本地推理, 检索增强生成, 知识库, 逆向工具