exorrtech/exorr-azure-audit
GitHub: exorrtech/exorr-azure-audit
一款纯 Python 编写的 Azure 与 Entra ID 安全错误配置扫描器,支持实时云端扫描与离线模板分析,帮助团队在攻击者之前发现危险配置。
Stars: 0 | Forks: 0
# EXORR Azure 审计



[](https://github.com/exorrtech/exorr-azure-audit/actions/workflows/ci.yml)
**Azure & Entra ID 安全错误配置扫描器** — 在攻击者之前发现危险的默认配置。
EXORR Azure Audit 会扫描您的 Azure 订阅和 Entra ID 租户,查找常见的安全错误配置。它支持通过 Azure CLI (`az`) 进行**实时扫描**,以及对导出的 ARM 模板和 Entra ID 目录设置进行**离线分析** —— 无需访问云端。
## 功能
- **实时扫描** — 通过 `az CLI` 对运行中的 Azure 订阅执行检查
- **离线 ARM 模板分析** — 在无需连接云端的情况下,审计导出的 ARM 模板和 Entra ID JSON
- **6 项安全检查**,涵盖 RBAC、Key Vault、NSG、Entra ID、Storage 和 App Service
- **多种输出格式** — JSON、Markdown 和 HTML 报告
- **严重性过滤** — 根据严重性阈值过滤检测结果
- **Dry-run 模式** — 列出可用的检查而不执行它们
- **零运行时依赖** — 纯 Python 编写,仅在实时扫描时需要 `az CLI`
## 技术栈
`Python 3.9+` `CLI` `JSON/Markdown/HTML 报告`
## 安装说明
```
pip install exorr-azure-audit
```
或从源码安装:
```
git clone https://github.com/exorrtech/exorr-azure-audit.git
cd exorr-azure-audit
pip install .
```
用于开发环境:
```
pip install ".[dev]"
pytest
```
## 使用说明
### Dry-run(仅列出检查而不运行)
```
exorr-azure-audit --dry-run
```
### 离线扫描(ARM 模板 + Entra ID 导出)
```
exorr-azure-audit --offline --arm-file template.json --entra-file entra.json --format markdown
```
### 实时扫描(需要 `az login`)
```
exorr-azure-audit --subscription-id --format html -o report.html
```
### 按指定检查进行过滤
```
exorr-azure-audit --checks rbac,keyvault,storage --severity-threshold high
```
## 安全检查
**检查 ID** — **名称** — **类别** — **严重性** — **描述**
- `rbac-owner-count` — 过多的 Owner 角色分配 — **RBAC** — 🔴 高 — 太多的 Owner 主体会扩大影响范围
- `keyvault-purge-protection` — Key Vault 清除保护 — **KeyVault** — 🔴 严重 — 未启用清除保护的保管库可能会导致密钥被永久删除
- `nsg-open-ingress` — 过于宽松的 NSG 规则 — **NSG** — 🔴 高 — 允许来自 `*` 的入站流量访问 SSH/RDP 端口的 NSG
- `entra-mfa-enforcement` — Entra ID MFA 强制执行 — **Entra** — 🔴 严重 — 未启用 MFA 的用户容易受到凭证攻击
- `storage-public-access` — Storage 账户公开访问 — **Storage** — 🔴 高 — 启用了公开 blob 访问的 Storage 账户可能会泄露数据
- `appservice-https-only` — App Service HTTPS 强制执行 — **AppService** — 🟡 中 — 允许 HTTP 的 App Services 容易受到 MITM 攻击
## 输出格式
| 格式 | 标志 | 描述 |
|--------|------|-------------|
| JSON | `--format json` | 结构化的机器可读报告,包含完整的检查元数据 |
| Markdown | `--format markdown` | 人类可读的报告,包含检测结果摘要和修复建议 |
| HTML | `--format html` | 带样式且独立运行的 HTML 报告,使用颜色标注严重性级别 |
## 项目结构
```
exorr-azure-audit/
├── exorr_azure_audit/
│ ├── __init__.py # Package version & metadata
│ ├── __main__.py # python -m entry point
│ ├── cli.py # CLI argument parsing & main loop
│ ├── scanner.py # AzureScanner — live & offline execution
│ ├── report.py # AuditReportGenerator — JSON/MD/HTML output
│ └── checks/
│ ├── __init__.py
│ └── registry.py # All check definitions (live + offline)
├── tests/
│ ├── __init__.py
│ ├── test_offline_scanner.py # 6 passing tests
│ ├── sample_arm.json # Sample ARM template for offline tests
│ └── sample_entra.json # Sample Entra ID export for offline tests
├── pyproject.toml
├── LICENSE
├── README.md
└── .gitignore
```
## 环境要求
- **Python 3.9+**
- **Azure CLI** (`az`) — 仅在实时扫描时需要;离线模式下不需要
在进行实时扫描时,请设置 `AZURE_SUBSCRIPTION_ID` 或传入 `--subscription-id`。在运行实时检查之前,请使用 `az login` 进行身份验证。
## 许可证
该项目基于 [MIT License](LICENSE) 授权。
*漫步于虚空。**∅ EXORR***
标签:Azure, Python, StruQ, 无后门, 聊天机器人, 逆向工具, 配置扫描