CartoonSavage32/AccessGuard
GitHub: CartoonSavage32/AccessGuard
一款面向 Python 后端的静态分析工具,通过构建跨文件调用图追踪路由到敏感操作的隐式执行路径,在代码进入生产环境前检测意外的数据访问和权限提升风险。
Stars: 0 | Forks: 0
# AccessGuard
**在 Python 后端代码进入生产环境之前,检测意外的数据访问和权限提升。**


## 问题所在
后端的安全漏洞通常是*间接的*。一段单独看起来无害的路由,可能会通过一系列内部调用悄然访问到管理员逻辑、计费服务或 token 解密——这些在代码审查中都不容易被发现。
```
GET /users
→ fetch_user_data()
→ billing_service.get_data() ← Should /users really touch billing?
```
AccessGuard 能够追踪这些隐藏的执行路径,并在开发阶段及早暴露它们。
## 快速入门
```
git clone https://github.com/CartoonSavage32/AccessGuard
cd AccessGuard
pip install -e .
accessguard scan .
```
## 输出示例
```
accessguard scan examples/sample_app
```
```
=== AccessGuard Report ===
Summary:
Routes scanned: 6
Risks found: 4 HIGH / 0 MEDIUM / 0 LOW
Risks:
[HIGH] GET /users (score: 6)
Potential privilege escalation: route '/users' accesses sensitive operation
'billing_service.get_data'. Verify this is intended.
[HIGH] POST /contact (score: 6)
Potential privilege escalation: route '/contact' accesses sensitive operation
'admin_service.reset_system'. Verify this is intended.
```
## 检测内容
- **领域不匹配** — 路由访问了超出其预期范围的 service
- **权限提升** — 非特权路由访问了管理员或敏感操作
- **多跳路径** — 仅在深入 2-3 层函数调用时才会出现的风险
## 安装
**选项 1 — pip(推荐)**
```
pip install -e .
```
**选项 2 — Poetry**
```
poetry install
```
## 使用方法
```
accessguard scan
accessguard init
```
**示例**
```
accessguard scan .
accessguard scan ./backend
accessguard scan examples/sample_app
accessguard init
```
**参数标志**
| Flag | 描述 |
|------|-------------|
| `--json` | 以 JSON 格式输出结果 |
| `--quiet` | 仅显示检测到的风险,隐藏摘要信息 |
| `--fail-on-high` | 如果发现任何 HIGH(高风险)项,则以退出码 `1` 退出(在 CI 中非常有用) |
## 配置
AccessGuard 支持通过项目根目录下的 `accessguard.yaml` 进行项目级配置。
使用以下命令创建初始配置文件:
```
accessguard init
```
当您运行:
```
accessguard scan .
```
如果存在 `accessguard.yaml`,AccessGuard 将自动加载。如果不存在配置文件,AccessGuard 将回退到内置默认配置。
**默认配置格式**
```
sensitive_keywords:
- billing
- token
- auth
- secret
high_privilege_keywords:
- admin
- delete
- reset
- token
- decrypt
- billing
safe_routes:
- auth
- callback
- oauth
- login
```
**初始化行为**
- 在当前目录创建 `accessguard.yaml`
- 不会覆盖已有的 `accessguard.yaml` 文件
- 在两种情况下都会打印成功/提示信息
## 忽略路径
在项目根目录创建一个 `.accessguardignore` 文件,以将文件或目录排除在分析之外(语法与 `.gitignore` 相同)。
## 工作原理
1. 使用 `ast` 模块**解析** Python 源文件
2. **提取** HTTP 路由处理程序及所有可触达的函数/方法调用
3. **构建**跨文件调用图
4. 从每条路由出发**遍历**调用图,跟踪多跳链路
5. 基于确定性风险规则**标记**触及敏感操作的路径
## 真实案例 (NudgePe)
AccessGuard 曾在 NudgePe(一个包含 25 条以上路由的真实 Python 后端)上运行:
- 分析了 **25** 条路由
- 检测到 **1** 个 HIGH(高风险)项
- OAuth/token 流程被正确分类为 LOW(低风险)
```
[HIGH] POST /{reminder_id}/send-now
Potential privilege escalation: route accesses sensitive operation 'decrypt'
```
## 局限性
AccessGuard 是一款**静态分析工具**——它没有运行时上下文。请注意:
- 基于名称的调用解析可能会遗漏动态导入或元编程模式
- 启发式关键字匹配可能会产生假阳性或假阴性
- 专为 Python 后端设计;目前不支持其他语言
- 对于庞大或复杂的代码库,可能需要调整敏感关键字列表
## 路线图
- [ ] 改进符号和导入解析
- [ ] 更好的身份验证感知分类
- [ ] 扩展框架支持(超越 Flask/FastAPI 模式)
- [ ] CI/CD 集成和稳定的 PyPI 发布
## 贡献
欢迎提交 Pull request。如果您在真实代码库中发现了误报或漏报,提交一个带有最小复现示例的 Issue 将是对我们最有帮助的贡献。
## 许可证
MIT
标签:AST抽象语法树, CSV导出, DevSecOps, Python后端, SAST, URL发现, 上游代理, 代码安全, 协议分析, 后端安全, 安全专业人员, 安全左移, 安全扫描, 安全检测, 开源安全工具, 数据访问控制, 时序注入, 未授权访问, 权限提升, 漏洞枚举, 盲注攻击, 自动化payload嵌入, 越权漏洞检测, 路径追踪, 软件供应链安全, 远程方法调用, 逆向工具, 逆向工程平台, 错误基检测, 静态代码分析