项目起因
某天,某位同学在群里扔了一个PoC的github仓库,里面有很多PoC的markdown文档,我顺手就收藏了。最近向量数据库构建知识库很方便,于是我就想,为什么不直接使用AnythingLLM这种工具,直接构造知识库呢?AnythingLLM竟然还支持直接从github仓库创建文档。
效果如下: 某某OA漏洞有哪些? 回答:
**PAC名称:** oa-l329158
**漏洞描述:**
该漏洞利用Java Encoder库进行文件隐藏和恶意编码的攻击。当用户上传一个特定类型的文件时, attacker 可以生成一个带有恶意代码的文件来触发DoS攻击。
省略 很多内容
这个确实能达到一部分效果,但是大部分的时候,我查找这个文档,是希望直接给我PoC的。于是,干脆自己做一个吧。
系统设计思路
核心功能设计
智能搜索:基于向量相似度的语义搜索,不再局限于关键词匹配 AI辅助PoC生成:输入漏洞描述,AI帮助生成初版PoC代码,有了文档,那么PoC生成是肯定要有的。 知识图谱:建立漏洞、技术、工具之间的关联关系 多平台支持:支持Nuclei、Pocsuite3、Python等多种PoC格式
技术选型
考虑到开发效率和维护成本,我们选择了相对成熟的技术栈: 后端架构:
- FastAPI:构建REST API,集成AI模型调用。主要是python方便
- PostgreSQL + pgvector:存储数据并支持向量检索。因为pg存万物。😂
- Redis:缓存热点数据。
前端界面:
- Vue3 + Taildwind CSS:构建用户界面
- ECharts:数据可视化,
- 前端都是AI生成的。
AI能力:
- 本地LLM:本地部署的ollama,主要用的模型如下:
- large-bge: 用来向量化,支持1024维的向量,据说效果不错吧
- gtp-oss: 用来根据文档生成向量,其实qwen的效果都还不错。
系统架构概览
整体设计
1. 漏洞管理
- 支持Markdown格式的漏洞文档导入
- 自动提取漏洞关键信息(CVE编号、CVSS评分等)
- 支持标签分类和关联关系管理
- 支持各种python脚本、Lua脚本等
- 当然nuclei的脚本也支持。
2. 智能搜索
- 基于向量相似度的语义搜索
- 支持自然语言查询
- 相关漏洞推荐
- 支持关键字搜索
3. AI辅助PoC生成
- 根据漏洞描述生成初版PoC代码
- 支持多种格式:Nuclei YAML、Python脚本、Pocsuite3等
- 代码质量评估和优化建议
1. 向量化语义搜索
不同于传统的关键词搜索,我们使用向量相似度进行语义搜索。比如搜索"SQL注入"时,也能找到相关的"数据库攻击"、“参数化查询绕过"等内容。
2. AI辅助PoC生成
这是系统的核心亮点。用户输入漏洞的Markdown描述后,AI会:
- 分析漏洞类型和攻击向量
- 检索相似的历史PoC
- 生成适合的PoC代码框架
- 提供代码优化建议
3. 多格式支持
系统支持生成多种格式的PoC:
- Nuclei YAML:用于批量扫描
- Python脚本:用于自定义验证
- Pocsuite3:集成到现有框架
- Metasploit模块:用于渗透测试
技术实现亮点
1. 向量数据库优化
使用PostgreSQL的pgvector扩展,针对安全领域的文本特点进行了索引优化。相比传统的全文搜索,向量搜索能够理解语义相关性,比如"缓冲区溢出"和"栈溢出"会被识别为相关概念。
2. AI模型集成
集成了多个AI模型来处理不同任务:
- 文本理解:使用GPT等大语言模型理解漏洞描述
- 代码生成:基于Code Llama等代码生成模型
- 向量化:使用Sentence Transformers进行文本嵌入
3. 渐进式PoC生成
AI生成PoC的过程是渐进式的:
- 首先生成基本的检测逻辑
- 然后添加具体的攻击载荷
- 最后优化代码结构和异常处理
- 提供代码质量评估和改进建议
4. 实时反馈学习
系统会收集用户对AI生成PoC的反馈,用于:
- 优化生成质量
- 调整推荐算法
- 改进搜索结果排序
未来规划
- 增强AI能力
- 训练专门的安全领域模型
- 支持更多编程语言和框架
- 提升代码生成质量
- 结合一些成熟工具,比如langgraph等相关工具
- 扩展功能
- 集成更多安全工具
- 添加漏洞趋势分析
- 支持自动化测试
关于搜索
一开始的时候,打算用向量搜索,但是向量搜索也存在很多问题,并不能解决所有的问题。向量数据库(LanceDB / Chroma / Milvus / Pinecone 等)的核心任务是:
- 把文本/数据 → 向量化 → 用余弦相似度等算法搜索。
- 它不保证结果的结构化(比如返回的“第几条 PoC”)。
如果你把 PoC 代码直接当作文本分块向量化,如果你想做一些精确搜索就比较难:
- 搜索时可能会命中代码,但上下文会不完整。
- 很难保证你搜索 “CVE-2023-xxxx” 时,能带出该漏洞对应的 PoC。
一个好的解决方案是混合检索(Hybrid Search):
- 全文检索(FTS) → 保证关键词、编号、术语、代码片段等能精确命中
- 向量检索(Vector Search) → 补充语义相似度搜索,帮助发现相关内容
总结
构建这个智能化攻防知识库是一次很有意义的实践。通过引入AI技术,我们不仅解决了传统知识管理的痛点,还为安全研究工作带来了新的可能性。
虽然系统还在不断完善中,但已经在实际工作中发挥了重要作用。希望这次分享能给有类似需求的朋友一些参考和启发。 如果你对这个项目感兴趣,欢迎交流讨论。我们也计划在适当的时候开源部分代码,与社区一起推动安全技术的发展。
文章首发于安全技术博客,转载请注明出处。