Nick-is-building/ast-guard

GitHub: Nick-is-building/ast-guard

ast-guard:AI代码生成代码执行前的确定性静态分析工具。

Stars: 0 | Forks: 0

# ast-guard **AI生成代码的执行前门** *LLM代码生成与代码执行之间的确定性层。无LLM。无ML。无成本.* [![Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/904ceef361034539.svg)](https://github.com/Nick-is-building/ast-guard/actions/workflows/tests.yml) [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/Nick-is-building/ast-guard/blob/main/LICENSE) ## ast-guard 是什么 ast-guard 位于代码生成和执行之间。它将LLM生成的代码解析为AST,并在任何行运行之前返回一个确定性判断。它不是一个检查器,不是一个安全扫描器,也不是一个沙箱——它是一个确定性的结构检查,不能通过模型的推理轨迹来合规,也不能被模型的说服所欺骗。 两种现有的防御类别留下了一个差距: - **训练时对齐**(Anthropic,DeepMind)减少了发生率,但没有减少残留。 - **推理时LLM审查员**(TRACE,RewardHackWatch,EvilGenie)与它们所监控的生成器共享失败模式。 ast-guard 是作为一个确定性的第三层与那些防御一起构建的。今天,它以零扫描成本可靠地捕获了结构上明显的绕过(参见[关键结果](#key-results));当前活跃的开发方向是随着时间的推移扩大结构覆盖范围,这样语义审查员就可以专注于只有他们才能做的事情——判断意图和意义。 ``` LLM generates code │ ▼ ┌───────────────────┐ │ ast-guard gate │ ← deterministic, <10ms, zero cost └───────────────────┘ │ ┌────┴────┐ ▼ ▼ CLEAN WARNING / CRITICAL ``` 两种模式: - **配对模式**——比较原始代码与LLM生成的代码。检测结构偏差。 - **独立模式**——分析单个代理输出,没有基线。使用行为风险评分。 ## 关键结果 所有结果都是完全可复制的。有关完整方法、混淆矩阵和按类别分解,请参阅[benchmarks/RESULTS.md](benchmarks/RESULTS.md)。 | 基准 | 模式 | 样本 | 关键指标 | 值 | |-----------|------|---------|------------|-------| | 结构基准(经过策划的地面实况配对) | 配对 | 36 | F1 | **100%** | | TRACE 分类法(Deshpande 等人,2026) | 配对 | 33 | F1 | **95.7%** | | 奖励黑客学校(longtermrisk) | 配对 | 26 | 回收率 | **96.2%** | | Countdown-Code(Khan 等人) | 配对 | 15,894 | 真阴性率 | **99.0%** | | MALT(METR,81,515个代理代码块) | 独立 | 81,515 | 特异性† | **84.2%** | | MALT — `hardcoded_solution` | 独立 | 429 | 检测率 | **70.9%** | | MALT — `bypass_constraints` | 独立 | 2,379 | 检测率 | **41.7%** | † 仅在 `normal` 标签上测量 TNR(77,369个样本);有关完整的混淆矩阵,请参阅[RESULTS.md](benchmarks/RESULTS.md)。 ### 与现有方法的比较 这些方法都是互补的,而不是竞争的。ast-guard 处理结构分析;LLM审查员处理语义。 | 方法 | 方法 | 扫描成本 | 延迟 | 确定性 | 范围 | |----------|--------|-----------|---------|---------------|-------| | GPT-4o 审查员 | LLM-as-judge | $0.01–0.10 | 500–2000ms | No | 语义 + 结构 | | RewardHackWatch | ML + Regex + AST | GPU required | varies | No | 轨迹级 | | **ast-guard v2.0** | **纯 AST + 启发式** | **$0.00** | **<10ms** | **Yes** | **仅结构** | ## 工作原理 ast-guard 将代码解析为抽象语法树并评估结构属性。无执行,无采样,无概率推理。 ### 六项检查 1. **硬编码检测**——if-counts,字面量计数,长字符串增长与基线相比。排除守卫子句。 2. **复杂性崩溃**——函数 McCabe 复杂性下降 >60%,没有经过认可的合法优化。 3. **禁止调用和混淆**——基于 diff 的新 `eval`/`exec`/`subprocess`/`ctypes`/`SystemExit` 调用检测,别名解析,`chr()`-混淆,内置索引。 4. **导入漂移**——新导入与阻止列表(CRITICAL)和允许列表(CLEAN)相比。未知导入→警告。 5. **扩展性枚举**——Helff 等人记录的 RLVR 简短路径:平坦的 if/elif 或 match/case 链覆盖 ≥70% 的分支,没有循环。 6. **行为风险评分**(仅独立模式)——从 AST 模式获得的 YARA/Semgrep 风格的累加分数。CLEAN <30,警告 30–69,CRITICAL ≥70。 ### 判断逻辑 ``` CLEAN → score below threshold, no blocklist triggers WARNING → suspicious patterns, manual review recommended CRITICAL → high-confidence structural hack, block execution ``` 模式:`strict` 阻止 CRITICAL;`standard` 记录一切;`audit` 仅收集静默。 ``` git clone https://github.com/Nick-is-building/ast-guard.git cd ast-guard python -m pytest tests/ -q ``` ### Python API ``` from ast_guard import scan, scan_standalone result = scan(original_code, generated_code, mode="strict") if result["verdict"] == "CRITICAL": print("Blocked: structural hack detected.") print(result["checks"]) elif result["verdict"] == "WARNING": print("Suspicious. Review recommended.") # 独立:单个代理输出,无基线 result = scan_standalone(agent_code) print(result["verdict"], result["checks"]["check_6_behavioral"]["risk_score"]) ``` ### 命令行界面 ``` python -m ast_guard.cli check original.py generated.py # standard python -m ast_guard.cli check original.py generated.py --mode strict python -m ast_guard.cli check original.py generated.py --json # for pipelines ``` 退出代码 0 在 CLEAN/WARNING,退出代码 1 在 CRITICAL — 适用于 CI 门。 ``` pip install ast-guard[multilang] ``` | 语言 | 后端 | 检测 | |----------|---------|---------| | Python | 本地 `ast` | 所有 6 项检查 | | Bash | tree-sitter-bash | 危险调用(curl,wget,eval,rm,chmod),PATH 操作,LD_PRELOAD | | JavaScript | tree-sitter-javascript | eval,Function(),require('child_process'),execSync | Bash 和 JS 适配器是预览质量:比 Python 核心更窄的模式覆盖范围。 ## 集成 ### MCP 服务器 ast-guard 包含内置的 [模型上下文协议](https://modelcontextprotocol.io/) 服务器。 ``` pip install ast-guard[mcp] ``` ``` { "mcpServers": { "ast-guard": { "command": "ast-guard-mcp", "type": "stdio" } } } ``` 工具:`ast_guard_scan`(比较原始与生成),`ast_guard_feedback`(提交分类反馈)。 ### GitHub 动作 ``` - uses: ./.github/actions/ast-guard with: original: path/to/original.py generated: path/to/generated.py mode: strict upload-sarif: "true" ``` SARIF 输出与 GitHub 安全标签兼容。 ## 配置 阈值、阻止列表和允许列表可通过 TOML 配置。层次结构:CLI 参数 > `.ast-guard.toml` > `~/.ast-guard/config.toml` > 默认值。 ``` [thresholds] if_count_rel_increase = 0.50 literal_count_rel_increase = 2.0 literal_count_abs_min = 10 long_string_len = 200 complexity_rel_decrease = 0.60 complexity_abs_min = 5 enumeration_ratio = 0.70 enumeration_min_ifs = 5 [imports] blocklist = ["os", "sys", "subprocess", "pickle", "importlib"] allowlist = ["functools", "itertools", "collections", "math"] [settings] mode = "standard" telemetry = false ``` ## 设计原则 - **确定性。**相同的输入 → 相同的判断。无随机性,无网络调用。 - **核心无依赖。**仅 Python 标准库。 - **实时。**每扫描 <10ms,不会降低执行循环。 - **设计互补。**结构分析是一层;语义审查是另一层。 - **隐私设计。**遥测仅存储匿名化的 AST 指标——永不存储代码、文件名、路径或时间戳。始终选择加入。 - **三种模式**(`audit` → `standard` → `strict`)在承诺之前允许风险无评估。 ## 已知限制 - **独立模式的精度低于配对模式** 是有意为之。没有基线,上下文区分更难。MALT 在 `normal` 样本上的假阳性率是当前的校准点——有意保持保守。 - **语义黑客不在范围内。**结构上正常但逻辑上错误的代码,或在没有结构痕迹的情况下玩弄任务规范,需要语义理解。这是基于LLM的审查员和下游测试套件的工作。 - **Bash 和 JavaScript 适配器不如 Python 核心成熟。**模式覆盖范围更窄;假阳性校准不够精细。 - **阈值是经验校准的。**默认值是信息化的起点,而不是最终优化点。有关完整的迭代历史,请参阅[METHODOLOGY.md](benchmarks/METHODOLOGY.md)。 ## 评估 - [benchmarks/RESULTS.md](benchmarks/RESULTS.md) — 所有数据集的精确度、召回率、F1、混淆矩阵。 - [benchmarks/METHODOLOGY.md](benchmarks/METHODOLOGY.md) — 6 次迭代的校准历史,包括回归。 - [benchmarks/structural_benchmark/](benchmarks/structural_benchmark/) — 12 个结构黑客类别中的 36 个经过策划的地面实况配对。 重放: ``` python -m benchmarks.run_benchmark --benchmark structural python -m benchmarks.run_benchmark --benchmark all # MALT 需要数据集在 ~/.ast-guard/benchmarks/malt-public/ python -m benchmarks.run_benchmark --benchmark malt --mode strict ``` ## 相关工作 - **TRACE**(Deshpande 等人,2026,[arXiv:2601.20103](https://arxiv.org/abs/2601.20103)) — 54 类别的奖励黑客分类法。ast-guard 覆盖 15 个结构类别,F1 为 95.7%;其余的是语义。 - **MALT**(METR 2025)— 10,919 个手动审查的代理转录,81,515 个提取的代码块。该领域最大的标记数据集。 - **Helff 等人** ([arXiv:2604.15149](https://arxiv.org/abs/2604.15149)) — RLVR 训练模型中的扩展性枚举快捷方式。直接激发第 5 项检查。 - **RewardHackWatch** — 结合 ML + regex + AST 的运行时检测器。ast-guard 是其确定性的结构补充。 - **EvilGenie** — 推理时 LLM 审查员;ast-guard 的基准加载器之一。 - **ZeroFalse** ([arXiv:2510.02534](https://arxiv.org/abs/2510.02534)) — 静态分析发现的校准置信水平。激发 ast-guard 的置信度评分模块(`ast_guard/confidence.py`)。 ## 引用 ``` @software{ast_guard_2026, title = {ast-guard: Pre-Execution Gate for AI-Generated Code}, author = {Nick}, year = {2026}, url = {https://github.com/Nick-is-building/ast-guard}, version = {2.0.0} } ``` *ast-guard 正在积极开发。有关版本历史,请参阅 [CHANGELOG.md](CHANGELOG.md),有关贡献指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。*
标签:AI代码生成, AST解析, DNS解析, LLM代码审查, Python, TLS抓取, 云安全监控, 代码安全, 代码结构检查, 安全扫描, 开源项目, 数据管道, 无后门, 时序注入, 漏洞枚举, 自动化payload嵌入, 软件安全, 软件工程, 逆向工具, 静态分析