Moscvv/cloud-misconfig-scanner
GitHub: Moscvv/cloud-misconfig-scanner
一个用 Python 构建的 AWS 安全审计 CLI 工具,用于扫描 S3、安全组和 IAM 中的常见错误配置。
Stars: 0 | Forks: 0
# 🔍 云错误配置扫描器
一个 Python CLI 工具,用于审计 AWS 账户中常见的安全错误配置。使用 [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)(适用于 Python 的 AWS SDK)构建。
## 📋 检查项目
| 检查项目 | 严重程度 | 描述 |
|---|---|---|
| S3 屏蔽公共访问被禁用 | 🔴 高危 | 存储桶已关闭公共访问控制 |
| S3 公共存储桶策略 | 🔴 高危 | 存储桶策略允许 `Principal: *`(任何人) |
| S3 版本控制被禁用 | 🟡 中危 | 删除/覆盖后对象无法恢复 |
| 安全组:敏感端口开放 | 🔴 高危 | 端口 22、3389、3306 等对 `0.0.0.0/0` 开放 |
| 安全组:所有流量开放 | 🔴 高危 | 入站规则允许来自互联网的所有协议 |
| IAM 通配符策略 | 🔴 高危 | 客户托管策略在 `Resource: *` 上授予 `Action: *` |
| IAM 用户未启用 MFA | 🔴 高危 | 控制台用户未配置 MFA 设备 |
| IAM 访问密钥使用时间超过 90 天 | 🟡 中危 | 长期有效的凭证会增加暴露风险窗口 |
## 🚀 快速开始
### 前置条件
- Python 3.8+
- 已配置凭证的 AWS 账户(`aws configure`)
- IAM 权限:`s3:*`、`ec2:DescribeSecurityGroups`、`iam:List*`、`iam:Get*`
### 安装
```
git clone https://github.com/Moscvv/cloud-misconfig-scanner.git
cd cloud-misconfig-scanner
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
```
### 运行
```
# 全扫描 — 终端输出
python scanner.py
# 扫描特定区域
python scanner.py --region us-east-1
# 仅运行选中的 checks
python scanner.py --checks s3 iam
# 导出 HTML 报告
python scanner.py --output html
# 导出 JSON 报告(用于 pipe 到其他工具)
python scanner.py --output json
```
## 📊 示例输出
```
╔═══════════════════════════════════════════════╗
║ Cloud Misconfiguration Scanner ║
║ AWS Security Audit Tool ║
╚═══════════════════════════════════════════════╝
Account : 054154173118
Region : ap-northeast-1
Started : 2026-07-01 06:12:27 UTC
────────────────────────────────────────────────
[1/3] Scanning S3 Buckets...
────────────────────────────────────────────────
Found 1 bucket(s). Checking each...
🔴 [HIGH] s3://misconfigured-test-bucket
Block Public Access is not fully enabled
→ Disabled settings: BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets
🔴 [HIGH] s3://misconfigured-test-bucket
Bucket policy allows public access (Principal: *)
→ Actions exposed: s3:GetObject
════════════════════════════════════════════════
TOTAL FINDINGS : 8
🔴 HIGH : 7
🟡 MEDIUM : 1
════════════════════════════════════════════════
```
### 修复前 —— 包含 MFA 警告在内的 8 项发现

### 修复后 —— 已配置 MFA,问题已解决

## 🗂 项目结构
```
cloud-misconfig-scanner/
├── scanner.py # Entry point — CLI args, orchestration, summary
├── requirements.txt
├── .gitignore
└── scanners/
├── s3_scanner.py # S3 bucket checks
├── sg_scanner.py # EC2 security group checks
├── iam_scanner.py # IAM policy, MFA, and access key checks
└── report.py # JSON and HTML report generation
```
## 💡 设计决策
**模块化扫描器** —— 每个服务(S3、EC2、IAM)都是一个独立的模块。添加新的检查(例如 CloudTrail 日志记录被禁用、RDS 公共快照)只需添加一个文件,而无需改动核心代码。
**遵循最小权限原则** —— 该工具仅调用只读的 AWS API(`List*`、`Get*`、`Describe*`)。它绝不会修改资源。
**完善的分页处理** —— 所有列表调用均使用 AWS 分页器,因此该工具在拥有数百个存储桶、用户或安全组的账户上也能正常运行。
**优雅的错误处理** —— 针对每个资源单独捕获 `ClientError`,因此某个存储桶上的权限缺失不会导致整个扫描中止。
## 🔒 安全说明
- 切勿提交 AWS 凭证。`.gitignore` 已排除 `~/.aws/`、`.env` 以及任何 `*.csv` 密钥导出文件。
- 此工具是只读的 —— 它仅进行审计和报告,不会执行修复。
- 专为个人/沙箱账户设计。在生产环境中,请将 IAM 权限严格限制为上述列出的 API。
## 🗺 路线图
- [ ] CloudTrail:检测每个区域的日志记录是否被禁用
- [ ] RDS:公共快照和实例
- [ ] S3:未强制执行服务器端加密
- [ ] 输出:CSV 格式
- [ ] 一次性进行多区域扫描
## 🛠 构建工具
- [Python 3](https://www.python.org/)
- [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) —— 适用于 Python 的 AWS SDK
- AWS 免费套餐(S3、EC2、IAM)
## 🩹 故障排除
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| `[ERROR] No AWS credentials found` | 未配置凭证 | 运行 `aws configure` 并设置您的 Access Key ID / Secret |
| 在特定检查中出现 `AccessDenied` | IAM 用户/角色缺少权限 | 添加 [前置条件](#prerequisites) 中列出的只读权限 |
| 扫描卡住或超时 | 账户过大、网络缓慢或触发限流 | 使用 `--checks` 和/或 `--region` 缩小范围;该工具已经实现了分页,只需在速率限制重置后重试一次即可 |
| `--output html` 未生成文件 | 误使用了 `--output terminal`(默认选项)运行 | 明确使用 `--output html` 或 `--output json` 重新运行 |
## 📄 许可证
该项目基于 [MIT 许可证](LICENSE) 授权。
标签:AWS, Boto3, DPI, Python, 文档结构分析, 无后门, 逆向工具, 配置扫描