Krigsexe/ai-rsk
GitHub: Krigsexe/ai-rsk
一个 Rust 编写的 AI 代码安全关卡工具,通过内置规则和编排多个安全扫描工具,强制阻断存在漏洞的构建直到问题被修复。
Stars: 1 | Forks: 0
ai-rsk - AI 生成代码的安全关卡
ai-rsk 会阻断你的构建,直到安全问题被修复。一个 Rust 二进制文件。三个外部工具。31 条内置规则。你的 AI 无法部署不安全的代码,因为构建无法通过。 ## 问题所在 LLM 生成的代码功能正常,但存在重复出现的安全缺陷: ``` // LLM writes this - it works, it's insecure localStorage.setItem('access_token', response.data.token); fetch('/api/data', { headers: { Authorization: `Bearer ${token}` } }); app.use(cors()); app.use(express.json()); // No helmet, no CSP, no rate limiting, no input validation ``` 使用 AI 构建应用的非开发者会将这些模式发布到生产环境。真实用户的电子邮件、密码和支付数据对于任何知道在哪里查找的人来说都变得触手可及。 ai-rsk 让这种情况变得不可能。构建无法通过。LLM 被迫修复代码。 ## 运行时会发生什么 ``` $ ai-rsk scan ai-rsk v0.1.0 - Security Gate + Project Analysis =================================================== Ecosystems: JavaScript/TypeScript ✓ semgrep 1.155.0 ✓ gitleaks 8.30.0 ✓ osv-scanner 2.3.3 =================================================== [BLOCK] TOKEN_IN_LOCALSTORAGE (CWE-922) File: src/auth.js:42 Code: localStorage.setItem('access_token', response.data.token) Fix: Move token to HttpOnly cookie server-side. res.cookie('token', jwt, { httpOnly: true, secure: true, sameSite: 'strict' }); [BLOCK] Semgrep found security issues. ┌──────────────────┐ │ 11 Code Findings │ └──────────────────┘ [BLOCK] Gitleaks found secrets in the codebase. leaks found: 3 [BLOCK] osv-scanner found known vulnerabilities in dependencies. 65 packages affected by 97 known vulnerabilities [WARN] CORS_WILDCARD (CWE-942) File: src/app.js:12 Code: app.use(cors()); Fix: Restrict CORS to specific trusted origins. [WARN] BODY_PARSER_NO_LIMIT (CWE-770) File: src/app.js:15 Code: app.use(express.json()); Fix: Add a size limit: app.use(express.json({ limit: '100kb' })); [ADVISE] No test framework detected. [ADVISE] No CI/CD pipeline detected. =================================================== Result: BLOCKED (4B 2W 2A) Exit code: 1 =================================================== ``` LLM 读取此输出,修复每一个问题,然后重新运行构建。它无法跳过任何内容 - 退出代码 1 意味着构建失败。 ## 安装 ### 预编译二进制文件(推荐) 从 [Releases](https://github.com/Krigsexe/ai-rsk/releases) 下载: | 平台 | 文件 | |----------|------| | macOS (Apple Silicon) | `ai-rsk-aarch64-apple-darwin.tar.gz` | | macOS (Intel) | `ai-rsk-x86_64-apple-darwin.tar.gz` | | Linux (x64) | `ai-rsk-x86_64-unknown-linux-musl.tar.gz` | | Linux (ARM64) | `ai-rsk-aarch64-unknown-linux-gnu.tar.gz` | | Windows (x64) | `ai-rsk-x86_64-pc-windows-msvc.zip` | ``` # Linux/macOS 示例: tar -xzf ai-rsk-x86_64-unknown-linux-musl.tar.gz sudo mv ai-rsk /usr/local/bin/ # Windows:解压 zip,将 ai-rsk.exe 添加到您的 PATH ``` ### 从源码构建(需要 Rust 1.85+) ``` cargo install --git https://github.com/Krigsexe/ai-rsk ``` ### 验证 ``` ai-rsk --version # ai-rsk 0.1.0 ai-rsk scan --help # Show scan options ``` ## 快速开始 ### 1. 初始化你的项目 ``` cd /your/project ai-rsk init ``` 这将生成: - LLM 约束文件(兼容所有主流 AI 编码工具) - `SECURITY_RULES.md` - ai-rsk 与 LLM 之间的契约 - `package.json` 中的 Prebuild 钩子(如果存在) ### 2. 扫描 ``` ai-rsk scan # Block on critical issues only ai-rsk scan --strict # Block on warnings too ai-rsk scan --full # Block on everything (recommended for AI-built projects) ``` ### 3. 修复并重新扫描 输出会确切地告诉 LLM 需要修复什么,并附带代码示例。修复、重新运行、重复,直到退出代码为 0。 ## 检测内容 ### Layer 1 - 31 条内置规则(离线、确定性) LLM 反复生成且现有工具遗漏的模式: | 类别 | 规则 | 示例 | |----------|-------|---------| | **Token/Secret 泄露** | 5 | localStorage 中的 Token、客户端代码中的 Bearer、硬编码的 secrets | | **缺失的安全头** | 6 | 无 helmet、无 CSP、无 HSTS、无 X-Frame-Options、无 X-Content-Type | | **认证缺陷** | 3 | 仅客户端认证、缺失速率限制、无认证的 WebSocket | | **Cookie 配置错误** | 3 | 缺失 HttpOnly、Secure、SameSite 标记 | | **输入/输出** | 5 | 动态输入的 eval()、CORS 通配符、SSRF、通过 dangerouslySetInnerHTML 的 XSS | | **业务逻辑** | 3 | 用户输入的负价格、API 响应中的 SELECT *、prompt 注入 | | **基础设施** | 4 | 生产环境中的 Source maps、无限制的 body parser、未验证的重定向 | | **第三方** | 2 | 无 SRI 的 CDN 脚本、无签名验证的 Stripe webhooks | 每条规则都有在 [cwe.mitre.org](https://cwe.mitre.org/) 上验证的 CWE 参考。 ### Layer 2 - 外部工具(自动安装) | 工具 | 功能 | 为何重要 | |------|-------------|----------------| | **[Semgrep](https://semgrep.dev/)** | 静态分析,1000+ 规则,30+ 种语言 | 捕获 SQL 注入、XSS、SSRF、不安全的加密 | | **[Gitleaks](https://github.com/gitleaks/gitleaks)** | 代码和 git 历史中的 secret 检测 | 意外提交的 API keys、passwords、tokens | | **[osv-scanner](https://google.github.io/osv-scanner/)** | 依赖项中的已知 CVE | 需要更新的有漏洞包 | 如果缺失,这些工具会被**自动安装**。ai-rsk 管理它们的版本和更新。 ### Layer 3 - 项目分析 | 检查项 | 类型 | 检测内容 | |-------|------|-----------------| | 缺失测试 | ADVISE | 无测试框架、无测试文件 | | 缺失 CI/CD | ADVISE | 无 pipeline = 安全关卡可被绕过 | | 死依赖 | ADVISE | 已安装但从未导入 | | 已弃用的包 | ADVISE | `request`、`moment` 等 | | 无 console.log 剥离 | WARN | Console 语句泄露到生产环境 | | 重复的 HTTP 客户端 | ADVISE | 同一项目中存在 `axios` + `node-fetch` + `got` | ## 严重级别 | 标志 | BLOCK | WARN | ADVISE | 最适用于 | |------|-------|------|--------|----------| | `ai-rsk scan` | exit 1 | exit 0 | exit 0 | 只需要安全性的高级开发者 | | `ai-rsk scan --strict` | exit 1 | exit 1 | exit 0 | 纵深防御团队 | | `ai-rsk scan --full` | exit 1 | exit 1 | exit 1 | AI 构建的项目 - LLM 无法忽略任何内容 | ## 集成 ### npm / pnpm / yarn / bun ``` { "scripts": { "prebuild": "ai-rsk scan --strict", "build": "vite build" } } ``` `prebuild` 会在 `build` 之前自动运行。退出代码 1 = 构建停止。 ### CI/CD (GitHub Actions) ``` jobs: security: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install ai-rsk run: cargo install --git https://github.com/Krigsexe/ai-rsk - name: Security gate run: ai-rsk scan --strict ``` ### Docker (multi-stage) ``` # Build stage - ai-rsk 在此处扫描 FROM node:20-alpine AS builder RUN cargo install --git https://github.com/Krigsexe/ai-rsk COPY . . RUN ai-rsk scan --strict RUN npm run build # Production stage - ai-rsk 不在此处 FROM node:20-alpine COPY --from=builder /app/dist /app/dist CMD ["node", "dist/server.js"] ``` ## 误报处理 ``` // ai-rsk-ignore TOKEN_IN_LOCALSTORAGE -- stores UI theme preference, not an auth token localStorage.setItem('auth_theme_token', 'dark'); ``` 规则: - 注释必须位于被标记代码的**前一行** - `--` 后的理由是**强制性的**(无理由忽略 = 仍会被标记) - 报告中会显示总忽略次数 ## 支持的生态系统 | 生态系统 | 检测方式 | Layer 1 规则 | Layer 2 工具 | Layer 3 分析 | |-----------|-----------|---------------|---------------|------------------| | JavaScript/TypeScript | `package.json` | 31 条规则 | Semgrep + Gitleaks + osv-scanner | 完整 | | Python | `requirements.txt`, `pyproject.toml` | 部分 | Semgrep + Gitleaks + osv-scanner | Tests + CI | | Go | `go.mod` | 部分 | Semgrep + Gitleaks + osv-scanner | Tests + CI | | Rust | `Cargo.toml` | 部分 | Semgrep + Gitleaks + osv-scanner | Tests + CI | ## 为什么不直接用 Semgrep? Semgrep 很棒。ai-rsk 也在使用它。但仅靠 Semgrep 无法: - **强制安装** - LLM 会跳过可选工具 - **检测缺失** - “无 helmet”不是 Semgrep 能发现的模式 - **阻断构建** - Semgrep 的发现不会停止 `npm run build` - **生成 LLM 约束文件** - Semgrep 不会告诉你的 AI 编码工具该如何表现 - **分析项目结构** - 缺失测试、死依赖、无 CI ai-rsk 是编排者。Semgrep 是其工具之一。 ## 理念 ## 许可证 MIT - [Julien GELEE](mailto:julien.gelee@proton.me) ## 支持 如果 ai-rsk 帮助你交付了安全的代码,请考虑支持本项目: - Star 本仓库 - 报告误报和漏报 - 贡献规则 - [请我喝杯咖啡支持我的开源工作](https://github.com/sponsors/Krigsexe)标签:AI代码检测, API密钥检测, CORS, DevSecOps, DNS 反向解析, LNA, MITM代理, Rust, TLS抓取, 上游代理, 人工智能安全, 代码安全, 可视化界面, 合规性, 安全专业人员, 安全网关, 开发安全, 敏感数据泄露, 构建安全, 漏洞枚举, 结构化查询, 网络流量审计, 自动化安全, 请求拦截, 软件安全, 输入验证, 通知系统, 错误基检测, 静态代码分析