VihaanInnovations/autonoma
GitHub: VihaanInnovations/autonoma
面向 Python 代码库的硬编码密钥检测与确定性自动修复工具,仅在确认安全时才应用修复,否则拒绝更改。
Stars: 0 | Forks: 0
# Autonoma





**面向 Python 的确定性密钥修复工具。**
Autonoma 是一个确定性的安全扫描器,用于检测并安全地修复 Python 代码库中的硬编码密钥。
与传统的密钥扫描器不同,Autonoma 不仅仅是报告问题——当修复被确认安全时,它会自动将密钥替换为环境变量引用。
如果无法保证安全性,它将拒绝更改。

## 安装
开源包已发布在 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嵌入, 自动化修复, 逆向工具, 错误基检测, 静态代码分析