lambdasec/frame

GitHub: lambdasec/frame

Frame 是一款结合分离逻辑验证与污点分析的静态应用安全测试(SAST)工具,用于跨五种主流语言高精度检测安全漏洞和内存安全缺陷。

Stars: 13 | Forks: 4

Frame

Static Analysis for Memory Safety and Security

Tests Python License

Frame 是一款由**分离逻辑**驱动的静态分析工具,能够以极高的精度发现安全漏洞和内存安全 bug。它支持 **5 种语言**并达到了 **80%+ 的 OWASP 得分**——显著优于 Semgrep 和 Bandit 等工具。 ## 核心亮点 **OWASP 得分**(True Positive Rate - False Positive Rate): | Benchmark | Frame | Semgrep | 差异 | |-----------|:---:|:---:|:---:| | **Python** (OWASP) | 80.9% | 4.5% | +76.4 pts | | **Java** (OWASP) | 81.5% | 15.7% | +65.8 pts | | **JavaScript** (SecBench.js) | 43.0% | 10.0% | +33 pts | | **C/C++** (NIST Juliet) | 54.4% | -14.9% | +69.3 pts | | **C#** (IssueBlot.NET) | 80.3% | 14.2% | +66.1 pts | 分数越高越好。有关详细的方法和结果,请参阅 [benchmarks/](benchmarks/)。 ## 安装说明 ``` git clone https://github.com/lambdasec/frame.git cd frame pip install -e ".[scan]" ``` ## 快速开始 ``` # 扫描漏洞 frame scan app.py # 扫描目录 frame scan src/ --pattern "**/*.py" # CI/CD 集成(SARIF 输出) frame scan src/ --format sarif -o results.sarif --fail-on high ```
更多示例 ``` # 检查 separation logic 蕴含 frame solve "x |-> 5 * y |-> 3 |- x |-> 5" # 批量检查公式 frame check formulas.txt # 交互模式 frame repl ```
## 支持的语言 | 语言 | 框架与库 | |----------|----------------------| | **Python** | Flask, Django, FastAPI, SQLAlchemy, subprocess | | **Java** | Spring, JDBC, Hibernate, JNDI | | **JavaScript/TypeScript** | Express, Node.js, DOM API | | **C/C++** | POSIX, Windows API, 内存操作 | | **C#** | ASP.NET, Entity Framework, ADO.NET | ## Frame 的检测范围
**注入与 XSS** - SQL 注入 (CWE-89) - 跨站脚本攻击 (CWE-79) - 命令注入 (CWE-78) - LDAP/XPath 注入 - 模板注入 **内存安全** - 缓冲区溢出 (CWE-121/122) - 释放后使用 (CWE-416) - 重复释放 (CWE-415) - 空指针解引用 - 整数溢出
**数据暴露** - 路径遍历 (CWE-22) - SSRF (CWE-918) - 开放重定向 (CWE-601) - 硬编码密钥 - 日志注入 **密码学** - 弱算法 (CWE-327) - 不安全的随机数 (CWE-330) - 弱哈希 (CWE-328) - 不安全的反序列化
## 工作原理 Frame 采用了一种将**污点分析**与**分离逻辑验证**相结合的独特方法: ``` Source Code | v [Language Frontend] ---> SIL (Separation Intermediate Language) | | v v [Taint Tracking] [Symbolic Execution] | | v v [Pattern Detection] <---> [Z3 Verification] | v Vulnerability Report ``` **为什么这很重要:** - **污点分析**追踪从来源(用户输入)到汇聚点(SQL 查询)的不可信数据流 - **分离逻辑**正式验证内存安全属性 - **Z3 验证**通过证明漏洞的可达性来消除误报 ## CI/CD 集成 ``` # GitHub Actions - name: Install Frame run: pip install -e ".[scan]" - name: Security Scan run: frame scan src/ --format sarif -o results.sarif --fail-on high - name: Upload Results uses: github/codeql-action/upload-sarif@v2 with: sarif_file: results.sarif ``` ## Python API ``` from frame import EntailmentChecker from frame.sil import FrameScanner # 安全扫描 scanner = FrameScanner() result = scanner.scan_file("app.py") for vuln in result.vulnerabilities: print(f"{vuln.cwe_id}: {vuln.description}") # separation logic 验证 checker = EntailmentChecker() result = checker.check_entailment("x |-> 5 * y |-> 3 |- x |-> 5") print(result.valid) # True ``` ## 分离逻辑求解器 Frame 包含一个用于验证堆属性的分离逻辑求解器: | 语法 | 含义 | |--------|---------| | `x \|-> v` | x 指向值 v | | `emp` | 空堆 | | `P * Q` | P 和 Q 位于独立内存中 | | `P -* Q` | 魔法棒 | | `P \|- Q` | P 蕴含 Q | **内置谓词:** `ls(x,y)`(链表段)、`list(x)`、`tree(x)`、`dll(x,p,y,n)` ``` frame solve "ls(x, y) * ls(y, z) |- ls(x, z)" # List transitivity ``` ## 基准测试 Frame 已通过业界标准的基准测试套件验证: | Benchmark | 领域 | 测试数 | 精确率 | 召回率 | |-----------|--------|-------|-----------|--------| | OWASP Python | Web 安全 | 500 | 95.3% | 83.5% | | OWASP Java | Web 安全 | 500 | 97.2% | 84.8% | | SecBench.js | Node.js 安全 | 300 | 82.0% | 81.0% | | NIST Juliet | C/C++ 内存 | 1,000 | 89.9% | 60.5% | | IssueBlot.NET | C# 安全 | 171 | 84.7% | 80.3% | | SL-COMP | 分离逻辑 | 692 | 79.9% | - | | SMT-LIB QF_S | 字符串理论 | 3,300 | 99.3% | - | ``` python -m benchmarks run --curated # Run all benchmarks ``` 有关详细结果、方法和工具对比,请参阅 [benchmarks/README.md](benchmarks/README.md)。 ## 项目结构 ``` frame/ core/ # AST and parser encoding/ # Z3 SMT encoding checking/ # Entailment checker sil/ # Security scanner scanner.py # Main interface frontends/ # Language parsers (Python, Java, JS, C, C#) analyzers/ # Taint & memory analysis cli.py # Command-line interface ``` ## 参考文献 - Reynolds & O'Hearn (2002). [分离逻辑:用于共享可变数据结构的逻辑](https://doi.org/10.1109/LICS.2002.1029817) - O'Hearn (2020). [非正确性逻辑](https://doi.org/10.1145/3371078) **相关项目:** [Infer](https://fbinfer.com/), [Semgrep](https://semgrep.dev/), [CodeQL](https://codeql.github.com/)

使用 Z3tree-sitter 构建

标签:IPv6支持, SAST, 内存安全, 分离逻辑, 图数据库, 盲注攻击, 逆向工具, 错误基检测, 静态代码分析