bytevet/godzilla

GitHub: bytevet/godzilla

一款将七种编程语言统一编译为单一 SSA 中间表示的多语言 SAST 分析器,专为 CI/CD 安全门禁设计。

Stars: 0 | Forks: 0

# Godzilla 一款用于 CI/CD 卡点的快速、多语言 **静态应用安全测试 (SAST)** 分析器。 Godzilla 将多种语言的源代码降维为一种语言无关的 SSA 中间表示 —— **gIR** —— 并在其上运行单一的过程间污点 引擎。所有语言最终都汇入同一个 IR,因此您只需 **编写一次检测规则,即可跨所有受支持的语言应用**。 ``` flowchart LR GO[Go] --> FE PY[Python] --> FE JS[JavaScript] --> FE JV[Java] --> FE RS[Rust] --> FE RB[Ruby] --> FE CC["C / C++"] --> FE FE["Language
frontends"] --> IR["gIR
language-neutral SSA"] IR --> ENG["Taint engine
+ YAML rules"] ENG --> FD["Findings
with confidence"] FD --> OUT["Report · JSON · SARIF
severity-gated exit code"] FD -. optional .-> LLM["LLM review"] LLM -.-> OUT ``` 所有七种语言都会降维到同一个 gIR;由单一的引擎和规则集在其上运行。 ## 功能 - **多语言,单引擎。** Go、Python、JavaScript、Java、Rust 和 Ruby (加上可选 cgo 构建中的 C/C++)均生成相同的 gIR;污点引擎和 规则是与语言无关的。 - **过程间污点追踪。** 跨函数调用追踪不受信任的数据 (source → sanitizer → sink)。每项发现都带有 **置信度** —— 过程内为 High, 跨函数为 Medium。 - **YAML 规则,感知 sink 参数。** Sources / sinks / sanitizers / propagators 均采用标准名称 glob 匹配。一个 sink 可以固定其注入点参数 (`"go:*database/sql*.Query#0"`),因此参数化的 `db.Query("... = ?", x)` **不会** 产生误报。请参阅 [docs/writing-rules.md](docs/writing-rules.md)。 - **开箱即用。** 内置支持 SQL 注入、命令注入、 路径遍历、SSRF、XSS、开放重定向、不安全的反序列化和代码 注入的规则包,以及针对 **弱加密算法** 和 **硬编码 机密** 的非数据流检查。 - **对 CI 友好的输出。** 人类可读的发现结果、独立的 **HTML 报告**、**JSON** 和 **SARIF 2.1.0**(用于 GitHub 代码扫描),以及 基于严重性控制的 **退出码**。 - **可选的 LLM 审查。** 一个可插拔的阶段会将低置信度的发现发送给 Claude 以减少误报;该功能采用失败放行策略,且默认关闭。 - **单一且独立的二进制文件。** Go/JS/Ruby 解析是纯 Go 实现的;Python、Java 和 Rust 会调用 `PATH` 中的工具链,并在缺失时优雅降级。 ## 安装 ``` go install godzilla/cmd/godzilla@latest # or, from a clone: go build -o godzilla ./cmd/godzilla ``` 需要 **Go 1.25+**。扫描 Python、Ruby、Java 或 Rust 还需要相应的 语言工具链(`python3`、`ruby`、JDK 24+ 的 `java`、`rustc`)在 `PATH` 中; 每项在缺失时都会优雅降级。或者直接跳过安装并 [使用 Docker 运行](#run-with-docker)。 ## 快速开始 ``` # 使用内置 rules 扫描目录(或单个源文件) godzilla scan ./path/to/project # 编写 HTML 报告,且仅在严重程度为 high+ 时使构建失败 godzilla scan --html report.html --fail-on high ./path/to/project # 机器可读输出:用于工具的 JSON,用于 GitHub code scanning 的 SARIF godzilla scan --sarif results.sarif --json results.json ./path/to/project # 在内置基础上添加你自己的 rules,并打印 gIR 摘要 godzilla scan --rules myrules.yaml --summary ./path/to/project # 使用 LLM 分流低置信度的发现(需要 ANTHROPIC_API_KEY) godzilla scan --llm-review ./path/to/project # Changed-files 模式:仅拦截 commit 修改的内容(一个进程,一个拦截) git diff --name-only --cached | godzilla scan -files - ``` **Pre-commit 钩子** (`.git/hooks/pre-commit`) —— 仅基于暂存文件拦截提交, 因此仅包含文档的提交可以顺利通过: ``` #!/bin/sh git diff --name-only --cached --diff-filter=d | godzilla scan -files - --fail-on high ``` **退出码:** `0` 正常 · `1` 错误 · `2` 错误用法 · `3` 存在达到或高于 `--fail-on` 的发现(默认:`medium`)。使用该退出码作为您的 CI 门禁。 ``` $ godzilla scan ./test/go/sql_injection [high] go-sql-injection (CWE-89, confidence: high) Untrusted input flows into a database/sql query without parameterized arguments... sink: .../main.go:62:24 -> go:(*database/sql.DB).Query source: .../main.go:59:26 in: go:.../sql_injection.main$1 1 finding(s); 1 at/above "medium". ``` ## 使用 Docker 运行 预构建的镜像自带扫描所需的工具链,因此您无需安装任何内容即可对仓库 进行卡点检查。它们位于 GHCR 上,提供两个变体: | 镜像 | 大小 | 可扫描 | |---|---|---| | `ghcr.io/bytevet/godzilla` (`:latest`) | ~600–700 MB | Go · JavaScript/TS · Python · Ruby · 机密 | | `ghcr.io/bytevet/godzilla:full` | ~1.5–2 GB | slim 版的全部内容 **+ Java + Rust** | 入口点是 `godzilla`,默认命令是 `scan .`,因此将仓库 挂载到 `/src` 后会立即对其扫描: ``` # 扫描当前目录(遇到处于/高于 --fail-on 的发现时以 exit 3 退出) docker run --rm -v "$PWD:/src" ghcr.io/bytevet/godzilla # 任何参数都会覆盖默认的 `scan .` docker run --rm -v "$PWD:/src" ghcr.io/bytevet/godzilla \ scan --sarif /src/results.sarif --fail-on high /src # Java/Rust 需要完整的镜像 docker run --rm -v "$PWD:/src" ghcr.io/bytevet/godzilla:full ``` slim 镜像会 **跳过** Java 和 Rust,并发出覆盖范围警告,而不是 直接失败。标签:`X.Y.Z`/`X.Y`/`latest` (slim) 和 `X.Y.Z-full`/`full` (full) 跟踪 正式发布;`edge`/`edge-full` 跟踪 `main` 分支。镜像支持多架构 (amd64 + arm64)。 ## 支持的语言与检测项 | | Go | Python | JavaScript | Java | Rust | Ruby | |---|---|---|---|---|---|---| | 解析器 | `golang.org/x/tools` SSA | `python3` `ast` | goja (纯 Go);通过 esbuild 支持 TS/JSX/ESM | JVM 字节码 (`java.lang.classfile`) | rustc MIR | `ruby` Ripper | | SQL 注入 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | 命令注入 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | 路径遍历 | ✅ | ✅ | ✅ | ✅ | ✅ | — | | SSRF | ✅ | ✅ | ✅ | ✅ | ✅ | — | | 反射型 XSS | ✅ | ✅ | ✅ | ✅ | ✅ | — | | 开放重定向 | ✅ | ✅ | ✅ | ✅ | ✅ | — | | 不安全的反序列化 | — | ✅ | — | ✅ | — | — | | 代码注入 (`eval`) | — | ✅ | ✅ | — | — | — | | 弱加密算法 | ✅ | — | — | ✅ | — | — | - **Java** 分析 JVM **字节码**(因此也可以扫描 `.class`/`.jar`);需要 JDK 24+ 的 `java` 在 `PATH` 中。Maven/Gradle 项目会首先进行构建,以便将第三方 依赖项加入 classpath。 - **Rust** 分析 **rustc MIR** 并默认包含在二进制文件中 —— 只需要 `rustc` 即可。`Cargo.toml` 项目会被构建,以便将 Web 框架的请求 访问器识别为 source。 - **C / C++** 通过 **LLVM IR** 进行分析 —— 这是一个可选的 **cgo** 构建 (`make build-llvm`,需要 libLLVM + clang),*不* 包含在默认二进制文件中。增加了 命令注入、路径遍历、格式化字符串、SQL 注入和 缓冲区溢出检查。 完整的前端细节位于 [ARCHITECTURE.md](ARCHITECTURE.md)。 ## 编写规则 规则是一个 source→sink 污点规范(或一个非数据流的 `dangerous-call` 检查), 与标准的 `:module.Type.member` 名称进行匹配。添加一项检测通常只需 在 [`rulepacks/`](rulepacks) 中添加几行 YAML;您可以通过 `--rules` 传入自定义规则。请参阅 **[规则编写指南](docs/writing-rules.md)**。 ## 工作原理 - **gIR** (`proto/` → `pkg/ir/v1/`) 是一个轻量的语言无关 SSA 核心,加上一个 `INTRINSIC` 兜底方案,具有稳定的规范名称,使规则可以跨语言连接。 - **前端** (`converters/*`) 将每种语言降维至 gIR。 - **分析** (`internal/analysis/`) 构建调用图并运行过程间 污点分析,以及机密扫描。 - **规则**、**报告**、**LLM 审查器** 和 **CLI** 位于顶层。 ``` flowchart TD CLI["cmd/godzilla
scan CLI · exit code"] --> CONV["converters/*
frontends → gIR"] CONV --> IRp["pkg/ir/v1
gIR (generated from proto/)"] IRp --> AN["internal/analysis
call graph · taint · secrets"] RULES["internal/rules
YAML rule packs"] --> AN AN --> REP["internal/report
HTML · JSON · SARIF"] AN --> REV["internal/llm
optional review"] REV --> REP ``` 完整的设计与原理解释请参阅 [ARCHITECTURE.md](ARCHITECTURE.md)。 ## 状态与局限性 Godzilla 功能完备且经过测试覆盖,但在范围上有意做出了限制: - **Python/JS 的降维是直线的** —— 控制流被扁平化为一个 概念性过程。污点依然可以通过常见的表达式形式和 基于类的处理器流动;主要的缺陷在于通过实例属性 (`self.attr` / `this.attr`)跨方法携带的污点。 - **污点分析是过程间的,但对上下文不敏感。** 接口/动态 分派通过类层次结构分析(一种过近似)进行处理。 - **SSRF 是主机感知的** —— 当污点仅到达已 *证明* 固定主机的 路径/查询时,会(保守地)抑制该发现,绝不会产生假阴性。 - **指针分析是近似的**(值流 + CHA),而非完整的指向分析。 关于各组件的详细信息,请参阅 [实现状态](ARCHITECTURE.md#implementation-status)。 ## License [MIT](LICENSE) © 2026 SYM01
标签:EVTX分析, JS文件枚举, UML, 可视化界面, 数据可视化, 日志审计, 请求拦截, 逆向工具