garvittkohli/gcp-misconfig-scanner

GitHub: garvittkohli/gcp-misconfig-scanner

一款基于 CIS 基准的 GCP 安全配置扫描工具,能在只读模式下检测六大核心服务的配置错误并自动生成 Terraform 修复代码。

Stars: 1 | Forks: 0

# GCP 配置错误扫描器 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/garvittkohli/gcp-misconfig-scanner/actions/workflows/ci.yml) [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ## 背景 在我们 GCP 基础设施遭遇的一次加密货币挖矿攻击的事件响应之后,我开发了这款工具。事件发生后,我没有系统的方法来检查我们的配置是否偏离了预期——是否有人添加了宽松的防火墙规则、留下了公开的存储桶,或者忘记了启用审计日志。Google 的 Security Command Center 可以解决此问题,但其成本并不适合所有团队。Prowler 和 ScoutSuite 涵盖了跨多个云的数百项检查,但不生成修复代码。我想要一款能够契合我们实际工作流程的工具:将发现的问题生成 Terraform 代码块,并直接输入到我们用于所有基础设施变更的同一套 PR 审查流程中。 ## 功能简介 扫描 GCP 项目中的六个服务——IAM、Compute Engine、VPC Firewall、Cloud Storage、Cloud SQL 和 Cloud Logging——针对 23 项特定的配置错误,每项均映射至 CIS GCP Foundation Benchmark v2.0 控制项。每项发现都包含用于修复的确切 Terraform HCL。结果可以以 ECS 格式发送至 Elasticsearch,以便集成至 SIEM。 该工具是只读的。它绝不会向 GCP 进行写入。 ## 架构 ``` cli.py └── ScanEngine ├── IAMScanner → primitive roles, public members, SA key age ├── ComputeScanner → public IPs, OS Login, serial port, default SA ├── FirewallScanner → open SSH/RDP/DB ports, allow-all rules ├── StorageScanner → public buckets, uniform access, versioning, logging ├── SQLScanner → public IP, SSL, authorized networks, backups └── LoggingScanner → audit log config, log sink existence │ ├── HTMLReporter → output/report.html ├── JSONReporter → output/findings.json └── ELKShipper → POST to Elasticsearch (optional) ``` ## 安装说明 ``` git clone https://github.com/YOUR_USERNAME/gcp-misconfig-scanner cd gcp-misconfig-scanner pip install -r requirements.txt pip install -e . ``` ## 身份验证 ``` # 本地开发 gcloud auth application-default login # CI/CD 或 production export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json # 或直接传递: gcp-scan scan --project my-project --sa-key /path/to/key.json ``` 用于扫描服务账号的最低 IAM 角色: | 角色 | 用途 | |------|---------| | `roles/viewer` | 列出 compute、SQL 和项目资源 | | `roles/iam.securityReviewer` | 读取 IAM 策略和 SA 密钥元数据 | | `roles/storage.objectViewer` | 读取 bucket IAM 策略 | | `roles/cloudsql.viewer` | 读取 Cloud SQL 实例配置 | | `roles/logging.viewer` | 列出 log sink 和审计配置 | ## 用法 ``` # Full scan — ./output/ 中的 HTML + JSON 报告 gcp-scan scan --project YOUR_PROJECT_ID # 仅终端输出,不写入文件 gcp-scan quick-check --project YOUR_PROJECT_ID # 扫描单个服务 gcp-scan quick-check --project YOUR_PROJECT_ID --scanner firewall # 生成示例报告,无需 GCP credentials gcp-scan demo # 跳过某个 scanner gcp-scan scan --project YOUR_PROJECT_ID --skip sql # 将 findings 发送至 Elasticsearch gcp-scan scan --project YOUR_PROJECT_ID --ship-elk # CI/CD build gate — 遇到任何 CRITICAL finding 时以退出码 1 退出 gcp-scan scan --project YOUR_PROJECT_ID --fail-on-critical --no-html ``` ## 检查项 | 规则 ID | 严重性 | 描述 | CIS 控制项 | |---------|----------|-------------|-------------| | GCP-IAM-001 | HIGH | 向用户分配了 Primitive Owner/Editor 角色 | 1.4/1.5 | | GCP-IAM-002 | HIGH | Service account 拥有 primitive 角色 | 1.5 | | GCP-IAM-003 | MEDIUM | Service account 密钥超过 90 天 | 1.7 | | GCP-IAM-004 | CRITICAL | 项目 IAM 中包含 allUsers/allAuthenticatedUsers | 1.6 | | GCP-FW-001 | CRITICAL | SSH 端口 22 对 0.0.0.0/0 开放 | 3.6 | | GCP-FW-002 | CRITICAL | RDP 端口 3389 对 0.0.0.0/0 开放 | 3.6 | | GCP-FW-003 | CRITICAL | 允许来自 0.0.0.0/0 的所有流量 | 3.6 | | GCP-FW-004 | CRITICAL | 数据库端口暴露在互联网上 | 3.6 | | GCP-GCS-001 | CRITICAL | GCS bucket 可公开访问 | 5.1 | | GCP-GCS-002 | MEDIUM | 未强制启用 Uniform bucket-level access | 5.2 | | GCP-GCS-003 | LOW | 未启用 Bucket versioning | 5.3 | | GCP-GCS-004 | LOW | 未启用 Bucket access logging | 5.4 | | GCP-SQL-001 | HIGH | Cloud SQL 实例具有公网 IP | 6.2 | | GCP-SQL-002 | MEDIUM | 未强制要求 SSL 连接 | 6.4 | | GCP-SQL-003 | CRITICAL | authorized networks 中包含 0.0.0.0/0 | 6.3 | | GCP-SQL-004 | MEDIUM | 自动备份被禁用 | 6.7 | | GCP-COMP-001 | MEDIUM | Compute 实例具有公共外部 IP | 4.9 | | GCP-COMP-002 | MEDIUM | 未启用 OS Login | 4.4 | | GCP-COMP-003 | MEDIUM | 串行端口访问已启用 | 4.5 | | GCP-COMP-004 | HIGH | 默认 SA 拥有完整的 cloud-platform scope | 4.1 | | GCP-COMP-005 | LOW | 未阻止全项目范围的 SSH 密钥 | 4.3 | | GCP-LOG-001 | HIGH | 未启用 DATA_READ/DATA_WRITE 审计日志 | 2.1 | | GCP-LOG-002 | MEDIUM | 未配置 log sink | 2.2 | ## 运行测试 ``` pip install pytest pytest-cov pytest tests/ -v --cov=scanner ``` ## CI/CD 集成 ``` - name: GCP Security Scan run: | pip install -r requirements.txt gcp-scan scan \ --project ${{ secrets.GCP_PROJECT_ID }} \ --sa-key /tmp/sa-key.json \ --fail-on-critical \ --no-html ``` ## 许可证 MIT
标签:Anthropic, CIS基准, ECS, GCP, Python, Terraform, 无后门, 无线安全, 逆向工具