juanmaalt/dep_shield

GitHub: juanmaalt/dep_shield

结合OSV漏洞数据库与AI影响分析的Python依赖扫描器,通过检测代码实际使用情况来评估漏洞真实风险。

Stars: 1 | Forks: 0

# dep_shield 一个 Python 依赖漏洞扫描器,使用 OSV 数据库检测项目依赖中的已知 CVE,并提供 AI 驱动的影响分析,以评估每个漏洞对您特定代码库的影响。 ## 工作原理 ``` requirements.txt ↘ dependency list → OSV API → vulnerabilities pyproject.toml ↗ ↓ Python files → import scanner → code usage ↓ (--analyze only, skipped if not imported) ↓ LLM impact analysis ↓ ChromaDB (RAG vector store) ``` 1. 发现并解析 `requirements.txt` 和/或 `pyproject.toml`(PEP 621 和 Poetry 格式)以提取包名和版本;跨文件的重复项会被去重 2. 针对每个依赖查询 OSV API 以查找已知 CVE 3. 对于每个存在漏洞的依赖,扫描所有 `.py` 文件以检测 import 语句和使用位置 4. 如果设置了 `--analyze` 且包已被导入,则从 ChromaDB 检索相似的过往 CVE,并使用 CVE 详情 + import 上下文调用 GPT-4o-mini;如果包未在任何地方导入,则跳过 LLM 调用并将风险报告为 `NONE` 5. 显示带有严重性颜色编码的结果和可选的 LLM 建议 6. 将分析过的 CVE 持久化到 ChromaDB 以用于未来的相似性查找 7. 如果发现任何漏洞则返回退出码 `1`,如果项目干净则返回 `0` ### 忽略的目录 import 扫描器会跳过 `.venv`、`venv`、`__pycache__`、`.git`、`node_modules`、`.eggs`、`build` 和 `dist`。 ### 风险等级 | Level | Meaning | |---|---| | `HIGH` | import 语句直接引用了 CVE 中指名的易受攻击函数或功能 | | `MEDIUM` | 包已被导入,但没有明确证据表明使用了易受攻击的功能 | | `LOW` | 包仅在测试、开发工具或可选依赖中被导入 | | `NONE` | 包未被导入,或者 CVE 的条件在当前代码库中不成立 | | `UNKNOWN` | API 错误或速率限制导致分析无法进行 | ## 安装要求 - Python 3.12 或更高版本 - `uv` 包管理器 - OpenAI API 密钥(`--analyze` 模式必需) ``` git clone cd dep_shield uv sync ``` ## 配置 在项目根目录的 `.env` 文件中设置以下环境变量: ``` OPENAI_API_KEY=sk-... ``` | Setting | Default | Description | |---|---|---| | `OPENAI_API_KEY` | *(`--analyze` 必需)* | OpenAI API 密钥 | | Embedding model | `text-embedding-3-small` | 用于 CVE embeddings 的 OpenAI 模型 | | Analysis model | `gpt-4o-mini` | 用于影响分析的 OpenAI 模型 | | Vector store path | `~/.dep_shield/chroma/` | 本地 ChromaDB 持久化存储路径 | | Similarity threshold | `0.35` | 检索相似过往 CVE 的最小余弦距离 | | Top-k similar CVEs | `3` | 用作上下文的过往分析数量 | ## 用法 ``` # 扫描项目目录(自动检测 requirements.txt 和/或 pyproject.toml) uv run dep_shield # 通过 AI 驱动的影响分析进行扫描 uv run dep_shield --analyze ``` **示例:** ``` uv run dep_shield . uv run dep_shield ./requirements.txt --analyze uv run dep_shield ./pyproject.toml --analyze uv run dep_shield /path/to/project -a ``` ## 项目结构 ``` src/ ├── cli.py # Typer CLI entry point ├── parsers/ │ ├── requirements.py # requirements.txt parser │ └── pyproject.py # pyproject.toml parser (PEP 621 + Poetry) ├── scanners/ │ ├── models.py # Vulnerability and CodeUsage dataclasses │ ├── osv.py # OSV API client (async httpx) │ └── code_scanner.py # Python import scanner └── rag/ ├── analyzer.py # LLM-based impact analysis ├── client.py # OpenAI client initialization ├── embeddings.py # Embedding generation ├── models.py # Pydantic models (ImpactAnalysis, SimilarCVE) └── store.py # ChromaDB store management tests/ ├── parsers/ │ ├── test_requirements.py │ └── test_pyproject.py └── scanners/ ├── test_osv.py └── test_code_scanner.py ``` ## 运行测试 ``` uv sync --group dev uv run pytest ``` ## 安全说明 * `.env` 文件已通过 `.gitignore` 从版本控制中排除。切勿将您的 `OPENAI_API_KEY` 直接提交到源文件中。 * 只有 import 语句会与 LLM 共享,而不会共享您的业务逻辑。模型看到的是类似 `import requests` 或 `from flask import Flask` 的内容,永远不会看到函数体。
标签:AI代码分析, ChromaDB, CVE, DevSecOps, DNS 解析, GPT-4o-mini, Import扫描, LLM, OSV, Petitpotam, pyproject.toml, Python, RAG, requirements.txt, Unmanaged PE, Vercel, 上游代理, 云安全监控, 代码安全, 依赖扫描, 依赖管理, 向量数据库, 对称加密, 数字签名, 文档安全, 无后门, 模型提供商, 漏洞枚举, 自动化审计, 软件开发工具包, 运行时操纵, 逆向工具, 静态分析