VihaanInnovations/autonoma

GitHub: VihaanInnovations/autonoma

面向 Python 代码库的硬编码密钥检测与确定性自动修复工具,仅在确认安全时才应用修复,否则拒绝更改。

Stars: 0 | Forks: 0

# Autonoma ![Python](https://img.shields.io/badge/Python-3.10+-3776AB?logo=python) ![License](https://img.shields.io/badge/License-MIT-green) ![Platform](https://img.shields.io/badge/Platform-linux%20%7C%20windows%20%7C%20macos-informational) ![Edition](https://img.shields.io/badge/Edition-Community-orange) ![PyPI Version](https://img.shields.io/pypi/v/autonoma-cli) **面向 Python 的确定性密钥修复工具。** Autonoma 是一个确定性的安全扫描器,用于检测并安全地修复 Python 代码库中的硬编码密钥。 与传统的密钥扫描器不同,Autonoma 不仅仅是报告问题——当修复被确认安全时,它会自动将密钥替换为环境变量引用。 如果无法保证安全性,它将拒绝更改。 ![Autonoma Demo](https://raw.githubusercontent.com/VihaanInnovations/autonoma/main/docs/Animation.gif) ## 安装 开源包已发布在 PyPI 上,名称为 `autonoma-cli`。 ``` pip install autonoma-cli ``` 安装完成后,使用 `autonoma` 命令: ``` autonoma --version autonoma --help ``` ## 快速示例 扫描项目: ``` autonoma analyze ./your-project ``` 扫描并应用安全修复: ``` autonoma analyze ./your-project --auto-fix ``` ## 示例 ### 修复前 ``` # settings.py DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": "prod_db", "USER": "admin", "PASSWORD": "Pr0d@ccess2024!", # SEC001 "HOST": "db.internal.company.com", } } SENDGRID_API_KEY = "SG.live-abc123xyz987_realkey" # SEC002 ``` ### 修复后 ``` # settings.py import os DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": "prod_db", "USER": "admin", "PASSWORD": os.environ["PASSWORD"], "HOST": "db.internal.company.com", } } SENDGRID_API_KEY = os.environ["SENDGRID_API_KEY"] ``` ### 安全预览修复 在应用修复之前安全地预览,以保证确定性输出: ``` $ autonoma analyze demo-project --diff - SENDGRID_API_KEY = "SG.live-abc123xyz987_realkey" + SENDGRID_API_KEY = os.environ["SENDGRID_API_KEY"] ``` ### CLI 输出示例 ``` $ autonoma analyze demo-project --auto-fix Scanning 10 files... SEC001 settings.py:8 Hardcoded password detected Status: FIXED SEC002 config.py:3 Hardcoded API key detected Status: FIXED SEC002 utils.py:14 Ambiguous secret pattern Status: REFUSED -------------------------------- Files scanned: 10 Issues detected: 3 Fixed: 2 Refused: 1 ``` ## 命令 ``` autonoma analyze PATH autonoma analyze PATH --auto-fix autonoma analyze PATH --diff autonoma analyze PATH --json autonoma analyze PATH --ci autonoma history-scan PATH autonoma --version ``` ## CLI 功能 Autonoma 支持: - `--auto-fix` — 应用确定性的安全修复 - `--diff` — 以 unified diff 格式预览建议的修复 - `--json` — 输出机器可读格式以便自动化 - `--ci` — 使用面向 CI 的退出码 - `--quiet` — 最小化控制台输出,适用于流水线 - `--threads` — 在大型仓库上并行扫描 - `.autonomaignore` — 排除嘈杂的路径 - `history-scan` — 检测 Git 历史中仍然存在的密钥 ## Autonoma 检测内容 | 代码 | 描述 | | ---------- | -------------------------------------------------- | | **SEC001** | 硬编码密码 | | **SEC002** | 硬编码 API keys | | **SEC003** | 高风险 SQL 字符串构造 | | **SEC004** | Python SSTI 模式 | | **SEC005** | 不安全的反序列化 (`pickle`, unsafe `yaml`) | 自动修复支持: | 代码 | 行为 | | ----------------- | -------------------- | | **SEC001** | 安全时自动修复 | | **SEC002** | 安全时自动修复 | | **SEC003–SEC005** | 仅检测 | Autonoma 刻意避免对逻辑层面的漏洞进行自动重写。 ## 安全模型 Autonoma 仅在满足以下三个条件时才应用修复: 1. 转换在结构上是安全的 2. 可以建立环境变量契约 3. 修改不会引入歧义 每个发现会产生以下四种结果之一: | 状态 | 含义 | | ----------- | ---------------------------------------------- | | **FIXED** | 已应用确定性修复 | | **REFUSED** | 拒绝更改以防止不安全的修改 | | **SKIPPED** | 代码已合规 | | **FAILED** | 工具错误 | ## 拒绝示例 拒绝是有意为之的。 错误的自动修复比不修复更糟糕。 ### 无环境变量契约 ``` API_KEY = "sk-live-abc123" ``` 拒绝是因为项目没有 `.env` 或 dotenv 依赖。 ### 变量名歧义 ``` x = "sk-live-abc123" ``` Autonoma 无法安全地推断环境变量名。 ### 已合规 ``` API_KEY = os.getenv("API_KEY", "sk-live-abc123") ``` 环境变量查找已存在。 ### 密钥构造歧义 ``` token = "Bearer " + "sk-live-abc123" ``` 字面量无法被安全隔离。 ## Git 历史扫描 Autonoma 还可以检测过去提交过但后来从工作树中删除的密钥。 ``` autonoma history-scan . ``` 这有助于识别仍存在于 Git 历史中,且可能通过旧提交、forks、镜像或克隆仓库访问的密钥。 ## 为什么开发 Autonoma 大多数安全扫描器止步于检测。 开发人员仍然需要手动从代码中移除密钥。 Autonoma 专注于确定性修复——自动修复那些被证明安全的子集问题。 如果无法保证安全性,它会拒绝更改而不是进行猜测。 ## Autonoma 刻意不做的事情 Autonoma 有意避免无法实现确定性的功能。 它不执行: - 完整的污点分析 - 完整的数据流分析 - 自动 SQL 注入重写 - 自动 SSTI 修复 - LLM 生成的补丁 只有被证明安全的转换才会自动应用。 其他所有内容都会被标记以供人工审查。 ## CI 示例 Autonoma 可以直接在 CI pipelines 中运行。 ``` - name: Install Autonoma run: pip install autonoma-cli - name: Scan repository run: autonoma analyze . --ci ``` 退出码: - `0` — 未发现问题 - `1` — 发现问题,但没有可自动修复的 - `2` — 发现可修复的问题 - `3` — 内部错误 ## 架构 Autonoma 是一个本地优先的安全修复工具。 主要特点: - Python 3.10+ - 基于 AST 的密钥检测与修复 - 确定性的代码转换 - 无遥测 - 无云依赖 - 无 LLM 使用 所有分析完全在本地机器上运行。 ## 验证 Autonoma 已在合成仓库、种子密钥数据集以及包含暴露凭证的真实世界开源 Python 项目中进行了测试。 当前验证结果: - 测试仓库中 0 次崩溃 - 自动修复后 0 次语法破坏 - 重复运行输出确定 - 重新运行修复幂等 - dry-run 和 diff 预览不修改文件 性能基准: | 仓库大小 | 文件 | LOC | 运行时间 | |-----------------|------:|-------:|--------:| | Small | 5 | 503 | 0.16s | | Medium | 34 | 3,029 | 0.24s | | Large | 77 | 10,025 | 0.27s | | Very Large | 351 | 30,063 | 0.55s | 不安全的模式会被拒绝而不是重写。 ## 企业版 Autonoma Community Edition 专注于 Python 项目的确定性本地修复。 计划中的企业功能包括: - 策略执行 - CI/CD 集成 - 审计日志 - 审批工作流 - 多仓库编排 企业功能正在开发中。 ## 如果您的团队有兴趣进行早期评估或试点部署, 欢迎联系我们。 ## 贡献 错误报告和边缘案例非常有价值。 如果 Autonoma: - 错误地修复了某些内容 - 拒绝了一个安全的模式 - 遗漏了一个可检测的密钥 请提交包含代码示例的 issue。 欢迎 Pull requests。 ## 许可证 MIT License
标签:CI/CD安全, DevSecOps, Django安全, Llama, LNA, SDLC, 上游代理, 中间件漏洞, 安全助手, 提示注入防御, 数据脱敏, 文档结构分析, 模块化设计, 源代码安全, 环境变量注入, 硬编码密钥, 网络安全研究, 自动化payload嵌入, 自动化修复, 逆向工具, 错误基检测, 静态代码分析