CopperSunDev/brasscoders

GitHub: CopperSunDev/brasscoders

BrassCoders是一款用于AI编码助手遗漏的代码漏洞扫描工具。

Stars: 1 | Forks: 0

# BrassCoders — 捕捉你的AI编码助手遗漏的虫子 BrassCoders扫描代码库并生成一组结构化智能文件(`.brass/*.yaml`),这些文件旨在由Claude Code、Cursor或其他AI编码助手读取。目标是揭示重要内容——真实的安全风险、PII泄露、性能陷阱——并隐藏不重要内容,以便AI的审查不会在低置信度噪声中淹没有用的信号。 BrassCoders是一个单次CLI:它扫描、写入YAML并退出。没有后台守护进程,默认情况下没有遥测,除非你选择加入,否则没有出站网络调用。 ## 它生成的内容 在执行`brasscoders scan`之后,你将在`.brass/`目录中找到以下文件: | 文件 | 目的 | |---|---| | `ai_instructions.yaml` | AI应首先阅读的顶层摘要 | | `detailed_analysis.yaml` | 每个发现,按类型分组 | | `file_intelligence.yaml` | 按文件汇总的发现,按优先级排序 | | `security_report.yaml` | 仅安全视图(机密信息、注入、认证问题) | | `statistics.yaml` | 聚合计数和严重程度分布 | | `privacy_analysis.yaml` | 仅隐私视图(仅当存在PII发现时) | 输出目录权限为`0700`;单个文件权限为`0600`。BrassCoders扫描私有源代码,因此这被强制执行而不是选择加入。 ## 它检测的内容 | 类别 | 来源 | |---|---| | 机密信息(AWS、Azure、GitHub、GitLab、Slack、Stripe、NPM、PEM、JWT、……) | [`detect-secrets`](https://github.com/Yelp/detect-secrets) | | 代码质量问题(复杂性、死代码、常见错误) | Bandit + Pylint + Radon + AST模式 | | PII(信用卡、SSN、IBAN、NHS、NINO、Aadhaar、PAN、NRIC、Medicare、TFN) | 模式 + Luhn-验证的正则表达式 | | AI编码反模式(循环中的字符串连接、插入零、嵌套循环、输入上的eval) | BrassCoders特定的AST分析 | | 认证反模式(硬编码的机密信息、弱JWT、无速率限制) | BrassCoders特定的正则表达式 | 在发现写入磁盘之前,会进行去重和噪声过滤。 ## 支持的语言 BrassCoders以**Python**为首选。驱动最深分析的扫描器——Pysa(过程间污点)、Bandit、Pylint和BrassCoders特定的AI编码反模式检测器——仅适用于Python。 | 语言 | 覆盖率 | 备注 | |---|---|---| | Python | 全部 | 过程间污点、安全、质量、反模式 | | JavaScript / TypeScript | 模式级别 | 内过程间Semgrep OSS规则;无过程间污点 | | 其他 | 尽力而为 | 在适用的情况下检测机密信息和通用模式 | 对于需要深度污点分析的JS密集型应用程序,应将BrassCoders与JS特定的SAST(CodeQL等)配合使用。BrassCoders团队正在跟踪JS污点质量,这是一个已知的预发布限制。 ## 安装 ``` # Recommended — CLI tool, isolated env. pipx install brasscoders # Or with pip. pip install brasscoders # Verify: brasscoders --help ``` BrassCoders需要Python 3.10+,并拉取`PyYAML`、`requests`、`bandit`、`pylint`、`radon`、`vulture`、`detect-secrets`和`pyre-check`作为运行时依赖项。`requests`库仅在您明确选择加入网络检查时使用(请参阅下面的`--check-package-hallucination`)。`pyre-check`被固定在一个狭窄的版本窗口(`>=0.9.25,<0.10`),因为Pysa模型文件格式在次要版本之间不稳定;升级需要通过捆绑模型行进行验证通过。 Python 3.10是最低要求,因为推荐的Semgrep版本(1.143.0+,用于多核并行处理——请参阅以下内容)在PyPI上对Python 3.9不可用。 **可选**:安装Semgrep以进行额外的基于模式的污点检测。 BrassCoders建议版本1.143.0或更高版本,这启用了多核并行处理,使大型存储库的扫描速度提高约3倍: ``` pip install 'semgrep>=1.143.0' ``` ## 支持的平台 | OS | 状态 | 备注 | |---|---|---| | macOS(Apple Silicon + Intel) | ✅ 支持 | 本地化;主要开发目标 | | Linux x86_64 | ✅ 支持 | 主要CI目标 | | Linux arm64 | ⚠️ 部分支持 | 除了Pysa以外的每个扫描器都本地化工作。`pyre-check`仅提供为linux/amd64构建的`pyre.bin`——Pysa在arm64 Linux上跳过并显示清晰的“typeshed未找到”状态。 | | Windows原生 | ❌ 不支持 | 使用WSL2 | | 通过WSL2的Windows | ✅ 支持 | 作为Linux处理 | **为什么Windows原生不受支持:** - 过程间污点扫描器(Pysa)建立在Meta的Pyre之上,它没有Windows支持。 - `fcntl.flock`缓存并发保护是Unix-only——BrassCoders在Windows上警告并继续解锁。 - `ProcessPoolExecutor`批处理Bandit/Pylint扫描已在`fork`(Linux/macOS)上验证;Windows `spawn`语义未测试。 将Windows原生提升到支持状态需要几周到几个月的工作(替换或沙盒Pyre/Pysa;添加Windows `flock`替代方案;安全的ProcessPool重写)。不在v1路线图上。 对于Apple Silicon上的Docker用户:使用`--platform linux/amd64`固定,以便Pyre的捆绑二进制文件在Rosetta仿真下运行。请参阅[`docs/CI.md`](docs/CI.md)中的配方。 ## 使用方法 ``` # One-shot scan of the current directory. brasscoders --offline scan # Watch mode: re-run incrementally on file changes. brasscoders --offline watch # Show last analysis summary. brasscoders status # Print version and which components are available. brasscoders version ``` ### 第一次扫描注意:Pysa的typeshed引导 过程间污点扫描器(Pysa)需要Python的[typeshed](https://github.com/python/typeshed)存根来解决stdlib调用。BrassCoders没有捆绑typeshed(约33 MB)并且默认离线,因此在新安装时,Pysa会跳过并显示清晰的“typeshed未找到”状态,直到您引导它。最简单的方法是单次自动获取标志: ``` # First scan only — let brass git-clone python/typeshed on demand. BRASS_AUTOFETCH_TYPESHED=1 brasscoders --offline scan ``` 这会在第一次运行时进行一次出站`git clone`调用到GitHub(没有其他网络使用;其余的`--offline`语义仍然有效)。后续扫描将重用缓存的typeshed在`~/.cache/brass/typeshed/`中,无需网络访问。 如果您的环境在扫描期间无法访问GitHub,请将typeshed一次克隆到缓存位置: ``` git clone --depth 1 https://github.com/python/typeshed ~/.cache/brass/typeshed ``` 请参阅[`docs/CACHE.md`](docs/CACHE.md)以了解完整的typeshed-cache生命周期。 ### 网络策略 BrassCoders默认**离线**。唯一的出站网络表面是包幻觉检查,该检查验证导入的包名称与PyPI / npm / pkg.go.dev相匹配。此检查默认禁用,除非您传递`--check-package-hallucination`。传递`--offline`以确保没有任何内容离开您的机器——它覆盖了选择加入标志。 ``` # Hard offline mode — nothing leaves your machine. brasscoders --offline scan # Opt in to the hallucination check (sends imported package names to public # registries; do not use on closed-source code with private imports). brasscoders scan --check-package-hallucination ``` ### 扫描模式 ``` brasscoders scan --fast # Quick: code analysis only, no privacy/content brasscoders scan --dev # Source-only: skip tests/build artifacts brasscoders scan --code # Just bugs / security / quality brasscoders scan --privacy # Just PII detection brasscoders scan --content # Just content moderation ``` ## 性能和缓存 BrassCoders在`~/.cache/brass/pysa-state/`中缓存Pysa的调用图状态,因此重复扫描比冷启动快3-4倍。该缓存是按项目划分的,在配置漂移时自动失效,并且可以在任何时候安全删除。请参阅[`docs/CACHE.md`](docs/CACHE.md)以了解完整的生命周期(位置、大小配置文件、失效触发器、`BRASS_PYSA_CACHE_ROOT`环境变量、typeshed缓存)。 在CI中运行BrassCoders?请参阅[`docs/CI.md`](docs/CI.md)以获取GitHub Actions、GitLab CI和CircleCI的缓存挂载配方——如果没有缓存挂载,每次CI运行都要支付完整的冷启动成本。 ## 隐私与数据处理 - BrassCoders永远不会将您的源代码发送到任何地方。唯一的出站调用是上面描述的可选包幻觉注册表检查。 - 隐私扫描器检测PII并将发现写入磁盘*但已将匹配的值删除*。原始匹配文本在序列化之前被替换为掩码形式;原始上下文行被完全删除。 - 机密扫描器记录机密*类型*和用于去重的简短哈希。原始机密值永远不会持久化。 - 请参阅[`docs/PRIVACY_POLICY.md`](docs/PRIVACY_POLICY.md)以了解完整的披露。 ## 架构 ``` CLI ──► Scanners ──► IntelligenceRanker ──► YAMLOutputGeneratorV2 ──► .brass/*.yaml ``` 每个扫描器都是单功能的,并返回`List[Finding]`。排名器权衡并排序。输出生成器写入原子、所有者专有的YAML。 没有后台进程,没有调度程序,也没有扫描器之间的通信。 `src/brass/models/finding.py`中的`Finding`数据类是系统的单一合同;所有构建器、扫描器和排名器都依赖于它,但不依赖于彼此。 ## 许可证 Apache 2.0。请参阅[LICENSE](LICENSE)和[NOTICE](NOTICE).
标签:AI编码助手, AI辅助开发, Apache 2.0许可证, JWT检测, Luhn算法, PII检测, YAML文件, 代码复杂度分析, 代码模式识别, 代码质量工具, 安全漏洞检测, 安全风险识别, 常见错误检测, 性能分析, 文档结构分析, 模式匹配, 正则表达式检测, 死代码检测, 源代码扫描, 源代码权限管理, 源代码隐私保护, 网络安全, 自动化资产收集, 认证问题检测, 逆向工具, 速率限制检测, 隐私保护