AI 编包,我们蹲守。 —— 检测 AI 生成代码中的"幻觉依赖",在 pip install 之前告诉你:这个包不存在 / 刚注册 / 长得像真包。
AI 写代码很快,但快不等于可信。AI 会稳定地编造不存在的第三方包名,攻击者提前抢注这些名字,等开发者或 AI agent 执行安装命令时,就触发供应链攻击(Slopsquatting)。传统 SAST 工具(Semgrep、CodeQL、Snyk)检测不了这种 LLM 特有的错误——而这正是 AI-SecReview 的主场。
$ ai-sec-review ./your-project
| 问题 | 传统 SAST 工具 | AI-SecReview |
|---|---|---|
| 幻觉依赖(LLM 编造不存在的包) | ❌ 检测不了 | ✅ 实时查证 PyPI 注册表 |
| Slopsquatting 抢注(幻觉包名被蹲守) | ❌ 无此概念 | ✅ 注册年龄 + 下载量 + OSV 恶意库评分 |
国产云 SDK 假方法(oss2.quick_upload) |
❌ 完全没有 | ✅ 全球独有 |
中文拼音模块名(shujuku) |
❌ 完全没有 | ✅ 弱信号 + 正确库名建议 |
| C/C++ 内存安全(缓冲区溢出/UAF) | ✅ 内置检测 | |
| 跨函数注入链 | ✅ LLM 深扫辅助 |
定位:面向中国 AI 编码生态的软件供应链安全基础设施。 幻觉依赖是全新战场,中文开发者的幻觉模式被国际工具忽视——AI-SecReview 从工具走向标准。
AI 稳定地"编"出不存在的包名 → 攻击者提前注册这些名字 → 开发者 / AI agent 执行
pip install时中招。
关键事实(USENIX Security 2025 "We Have a Package for You!"):16 个大模型、57.6 万样本里 19.7% 的推荐包不存在;幻觉名 43–58% 跨运行重复(可预测 → 可被蹲守)。
三层防御,从快到慢:
- 中文 AI 幻觉模式识别(离线,毫秒级)—— 国产云 SDK 假方法 100+ 条(
import oss2是真的,假的是方法oss2.quick_upload(),IDE 不校验方法存在性,真空白);拼音模块降权为弱信号(给正确库名建议) - Typosquatting 距离引擎(离线)—— 与真实包名编辑距离 ≤1 的 import(
numpys/requets) - 实时供应链验证 + 风险评分(在线)—— PyPI 存在性、注册年龄、下载量、OSV 恶意库,多信号合成 0-100 slopsquat 风险分
# AI 编出的包名,被抢注后"成功安装"= 静默供应链攻击
from smart_validator import validate_email # 不存在 → 90 分 critical
import oss2
bucket.quick_upload('file.txt') # oss2 真、quick_upload 假 → 真空白国内 AI 编码助手(通义灵码、文心快码、DeepSeek Coder)有个特有毛病:编造国产云 SDK 不存在的方法,或把中文直译成拼音模块名。英文工具的声誉库不覆盖中文模型的幻觉模式(开源中文模型平均幻觉率 21.7%)。
gets/strcpy/sprintf 这类危险函数、格式化字符串漏洞、整数溢出、返回栈地址、use-after-free——跨行上下文也能识别。
不配 API key 也能用纯规则引擎扫。配了 DeepSeek/Claude/OpenAI 的 key 后,对可疑代码段做上下文感知的二次确认,降低误报。
git clone https://github.com/chen-longyi/ai-sec-review.git
cd ai-sec-review
pip install -e .要求 Python 3.10+。
# 扫描单个文件
ai-sec-review app.py
# 扫描整个项目目录
ai-sec-review ./my-project
# 只输出 JSON(供其他工具/Agent 消费)
ai-sec-review src/ --json
# 生成 SARIF 报告(GitHub Security 集成)
ai-sec-review src/ --format sarif -o report.sarif
# 生成 HTML 仪表盘(路演截图用)
ai-sec-review src/ --format html -o report.html
# 生成 Word 报告(汇报/存档用)
ai-sec-review src/ --format word -o report.docx
# 生成 PNG 摘要图(路演/PPT 截图用)
ai-sec-review src/ --format png -o report.png
# 显示所有级别的问题(不只 critical/high)
ai-sec-review src/ --verbose
# CI 友好:只看退出码,不输出
ai-sec-review src/ --quiet- 不存在的导入 / 假函数调用
- Slopsquatting 风险评分:PyPI 存在性 + 注册年龄 + 下载量(pypistats)+ OSV 恶意库(MAL-*),合成 0-100 分
- 不存在 = 90 分 / 恶意 = 100 分 / 新包 + 0 下载 = 85 分 / 新包 = 60 分 / 年轻(<1 年)= 40 分 / 成熟 = 0 分
- Typosquatting:与真实包名编辑距离 ≤1
- 国产云 SDK 假方法(阿里云 OSS、腾讯云 COS、华为云 OBS、阿里云短信、百度云、微信/钉钉/飞书/魔搭…)
- 中文拼音模块名(弱信号,附正确库名建议)
smart_/quick_/auto_/fast_前缀的可疑命名
隐私承诺:在线验证只传包名,绝不传代码。无网络时优雅降级为离线启发式,纯规则引擎仍可跑。
- SQL 注入(f-string /
%格式化拼接) - 命令注入(
shell=True、os.system) - 硬编码密钥(密码 / API key / token / AWS 凭证)
- 不安全反序列化(
pickle.loads、yaml.load) - SSRF、路径遍历、内部 IP 硬编码
eval/exec/__import__
- 危险函数:
gets/strcpy/strcat/sprintf/scanf/vsprintf - 格式化字符串漏洞
- 整数溢出(malloc/calloc/new)
- 返回栈地址 / 返回局部变量地址(跨行)
- use-after-free(跨行)
- malloc 后未检查 NULL
int存strlen/sizeof返回值、void main
对静态规则拿不准的代码段(f-string SQL、用户输入流到危险 sink、弱加密),调 LLM 做上下文确认,输出是否误报 + 具体修复代码。
| 选项 | 说明 |
|---|---|
PATH |
要扫描的文件或目录 |
-f, --format |
输出格式:console / json / sarif / html / word / png |
-o, --output |
将报告写入文件 |
--json |
--format json 的别名 |
-v, --verbose |
显示所有级别(不只 critical/high) |
--min-score |
覆盖最低信任分数(0-100) |
--config |
指定配置文件路径 |
-q, --quiet |
只返回退出码,不输出 |
--version |
显示版本号 |
退出码:0 通过,1 分数低于阈值或存在 critical 问题(CI 可直接用)。
Analyzing: demo
============================================================
Trust Score: 14/100 [FAIL]
+------------------------------------------------+
| Category | Score | Issues |
|---------------+-------+------------------------|
| Hallucination | 0 | 18 issues (6 critical) |
| Security | 50 | 9 issues (4 critical) |
| Memory Safety | 0 | 15 issues (2 critical) |
+------------------------------------------------+
Critical/High Issues:
CRITICAL hallucination Import 'smart_validator.validate_email' appears to be hallucinated
-> Verify 'smart_validator' exists. Slopsquatting risk: this AI-invented
name may already be registered by attackers - never `pip install` it
without verification
CRITICAL hallucination Line 16: Suspected hallucinated SDK method: 'quick_upload()'
-> oss2 SDK has no 'quick_upload()' method. Check the official docs.
CRITICAL memory_safety Line 82: Unsafe function 'gets()': gets() has no bounds checking
-> Use fgets(buf, size, stdin) instead
项目根目录放一个 .aitrust.yaml(可选):
min_score: 70
strict_mode: false
checks:
security:
enabled: true
weight: 2.0
hallucinations:
enabled: true
weight: 2.5
memory_safety:
enabled: true
weight: 3.0
ai_deep_scan:
enabled: true
weight: 1.5
ignore:
- "tests/*"
- "*/__pycache__/*"LLM 深扫需要环境变量 DEEPSEEK_API_KEY / ANTHROPIC_API_KEY / OPENAI_API_KEY,不配则自动跳过。
ai_sec_review/
├── cli.py # click CLI 入口
├── validator.py # 核心引擎:按文件类型路由到分析器
├── config.py # 配置加载(.aitrust.yaml)
├── models.py # Issue / ValidationResult 数据类
├── supply_chain.py # 供应链验证:PyPI 存在性/年龄/下载量/OSV + slopsquat 评分
├── analyzers/
│ ├── hallucination.py # 幻觉检测(云SDK假方法 / 拼音弱信号 / 供应链查证)
│ ├── security.py # Web 安全
│ ├── memory_safety.py # C/C++ 内存安全
│ └── ai_deep_scan.py # LLM 深扫(可选)
└── reporters/
├── console.py # rich 终端输出
├── json_reporter.py # 结构化 JSON
├── sarif.py # SARIF 2.1.0
├── html.py # 自包含 HTML 仪表盘
├── word.py # Word (.docx) 报告
└── png.py # PNG 摘要图(路演截图用)
demo/ # 漏洞示例项目(演示用)
tests/ # pytest 测试套件
- 核心静态分析引擎(幻觉 / 安全 / 内存安全)
- 中文 AI 幻觉检测(云 SDK 假方法 / 拼音弱信号)
- Slopsquatting 供应链防御(PyPI 存在性 + 注册年龄 + 下载量 + OSV 恶意库 + 0-100 风险评分)
- 六种输出格式(console / json / sarif / html / word / png)
- 完整 pytest 测试套件(133 用例)
- 维护者 / 发布者信誉信号(PyPI JSON 不含 maintainers,需另查)
- npm 生态实时验证(install 前查注册表 + 声誉)
- 安装前拦截(agent 循环内 hook,差异化愿景)
- 事中纠错:AI 生成代码时实时拦截(watch 模式 / IDE 插件)
- 漏洞样本库(从 CTF 真题标注,作为数据集)
- 二进制分析模块(r2pipe/capstone)
MIT