mohidev-tech/cspm-scanner

GitHub: mohidev-tech/cspm-scanner

一个轻量级、零凭证的 IaC 配置错误扫描器,静态解析 Terraform HCL 代码,将每个发现映射到 SOC2、NIST 800-53 和 CIS AWS 控制,并输出 SARIF 格式用于 CI 集成。

Stars: 0 | Forks: 0

# 🛡️ cspm-scanner [![ci](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/5f51db5653190726.svg)](https://github.com/mohidev-tech/cspm-scanner/actions/workflows/ci.yml) [![License: Apache 2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) [![Go 1.+](https://img.shields.io/badge/go-1.22+-00ADD8?logo=go&logoColor=white)](https://go.dev/) [![SOC2](https://img.shields.io/badge/SOC2-mapped-2E7D32)](docs/compliance-mappings.md) [![NIST 800-53](https://img.shields.io/badge/NIST%20800--53-mapped-2E7D32)](docs/compliance-mappings.md) [![CIS AWS](https://img.shields.io/badge/CIS%20AWS-mapped-2E7D32)](docs/compliance-mappings.md) ## 功能(实际终端输出) ``` $ cspm scan testdata/bad [CRITICAL] S3 bucket has a public ACL id: CSPM-AWS-S3-002 resource: aws_s3_bucket.logs location: testdata/bad/main.tf:3 why: Public S3 ACLs are the #1 cloud-misconfig data-breach pattern — acl = public-read fix: Set acl = "private" and pair with an "aws_s3_bucket_public_access_block". maps to: SOC2 CC6.1, NIST 800-53 AC-3, CIS AWS 2.1.5 [CRITICAL] Security group exposes admin port to the internet id: CSPM-AWS-EC2-001 resource: aws_security_group.open location: testdata/bad/main.tf:9 why: Security groups allowing 0.0.0.0/0 on SSH (22) or RDP (3389)... — ingress opens admin port to 0.0.0.0/0 (from=22 to=22) fix: Restrict ingress to a VPN/bastion CIDR or use Systems Manager Session Manager. maps to: SOC2 CC6.6, NIST 800-53 AC-4, CIS AWS 5.2 [HIGH] RDS instance is publicly accessible id: CSPM-AWS-RDS-001 resource: aws_db_instance.db ... summary: 6 findings (CRITICAL=2 HIGH=4 MEDIUM=0 LOW=0) ``` 退出码为 `1` — `--fail-on` 默认为 `HIGH`。可直接将其投入 CI 使用。 ## 为何选择此工具 | | **cspm-scanner** | checkov | tfsec | Snyk IaC | |---|---|---|---|---| | **价格** | 免费 (Apache 2.0) | 免费 | 免费(2023年归档) | 免费层 — 每月100次扫描 | | **需要凭证** | ❌ 无需 | ❌ 无需 | ❌ 无需 | ✅ Snyk 账户 | | **输出中的合规映射** | ✅ 每个发现映射 SOC2 + NIST + CIS | ⚠️ 仅标签 | ⚠️ 仅标签 | ✅ | | **原生 SARIF 支持** | ✅ `--format sarif` | ✅ | ✅ | ✅ | | **外部运行时依赖** | 仅 hcl/v2 | python + 多个 | go + 多个 | 专有 | | **二进制文件大小** | ~6 MB 单一二进制 | ~120 MB python+依赖 | ~30 MB | 无 (SaaS模式) | | **冷启动时间** | <50 ms | ~3 s | ~500 ms | 网络 | | **添加新规则** | 一个 Go 文件,约40行 | Python 类层次结构 | Go + 接口 | 无 | | **许可证** | Apache 2.0 | Apache 2.0 | MIT | 专有 | 这不是 checkov 的克隆。它是**最小型的扫描器,将每个发现映射到审计友好的控制ID**,原生输出 SARIF,且零非 Go 依赖。将二进制文件放入任何 CI 运行器,即可运行。 ## 快速开始 ### 选项1 — 一行命令安装 ``` # Linux / macOS curl -fsSL https://raw.githubusercontent.com/mohidev-tech/cspm-scanner/main/install.sh | sh # Windows (PowerShell) iwr -useb https://raw.githubusercontent.com/mohidev-tech/cspm-scanner/main/install.ps1 | iex ``` ### 选项2 — go install ``` go install github.com/mohidev-tech/cspm-scanner/cmd/cspm@latest ``` ### 运行 ``` cspm scan ./infra/terraform # default: console + fail on HIGH cspm scan --format json ./infra # machine-readable cspm scan --format sarif ./infra > cspm.sarif cspm scan --fail-on CRITICAL ./infra # gentler gate cspm list-checks # what's in the catalog? ``` ## 检测内容 | 检查ID | 严重级别 | 检测内容 | 映射到 | |---|---|---|---| | `CSPM-AWS-S3-001` | 高 | S3 存储桶未配置 `server_side_encryption_configuration` | SOC2 CC6.7 · NIST SC-28 · CIS AWS 2.1.1 | | `CSPM-AWS-S3-002` | 严重 | S3 存储桶 ACL 为 `public-read` / `public-read-write` | SOC2 CC6.1 · NIST AC-3 · CIS AWS 2.1.5 | | `CSPM-AWS-EC2-001` | 严重 | 安全组允许 `0.0.0.0/0` 入站 SSH/RDP | SOC2 CC6.6 · NIST AC-4 · CIS AWS 5.2 | | `CSPM-AWS-RDS-001` | 高 | RDS 实例 `publicly_accessible = true` | SOC2 CC6.6 · NIST SC-7 · CIS AWS 2.3.3 | | `CSPM-AWS-RDS-002` | 高 | RDS 实例 `storage_encrypted = false`(默认行为!) | SOC2 CC6.7 · NIST SC-28 · CIS AWS 2.3.1 | | `CSPM-AWS-IAM-001` | 高 | IAM 策略包含 Allow 操作的 `"Action": "*"` 或 `"Resource": "*"` | SOC2 CC6.1 · NIST AC-6 · CIS AWS 1.16 | 路线图:GCP、Azure、Kubernetes 清单、与云实时状态对比的漂移检测。每个项目作为独立的卫星项目实现。 ## 在 CI 中使用 ### GitHub Actions — 失败门槛设为 HIGH,上传到安全选项卡 ``` - name: cspm scan run: | curl -fsSL https://raw.githubusercontent.com/mohidev-tech/cspm-scanner/main/install.sh | sh cspm scan --format sarif --output cspm.sarif --fail-on HIGH ./infra - uses: github/codeql-action/upload-sarif@v3 if: always() with: sarif_file: cspm.sarif category: cspm ``` ### GitLab CI ``` cspm: image: golang:1.22-alpine script: - go install github.com/mohidev-tech/cspm-scanner/cmd/cspm@latest - cspm scan --format json --output cspm.json --fail-on HIGH infra/ artifacts: paths: [cspm.json] ``` ### Pre-commit 钩子 ``` # .pre-commit-config.yaml - repo: local hooks: - id: cspm name: cspm-scanner entry: cspm scan --fail-on CRITICAL language: system pass_filenames: false files: \.tf$ ``` ## 设计选择 | 选择 | 原因 | |---|---| | 通过 `hcl/v2` 扫描**源代码文本**,而非 `terraform show -json` | CI 中零凭证需求。PR 反馈时间 <1s。适用于任何 IaC 仓库,无需云账户状态。[ADR 0001](docs/adr/0001-hcl-source-text-over-evaluated-plan.md) | | **一个检查 = 一个 Go 文件** | 新规则只需约40行代码的 PR;审查时只需阅读一个文件 | | **合规映射直接内嵌在 `Check` 接口中** | 输出即符合审计要求,不仅面向开发者 — 每个发现都会列出其违反的 SOC2/NIST/CIS 控制项 | | **将 SARIF 作为一等输出** | 工程师通常关注 GitHub 安全选项卡,无需额外仪表盘 | | **使用标准库 `flag`,不依赖 cobra** | 仅一个外部依赖 (hcl/v2)。单二进制文件约 6 MB | ## 已知限制 — 明确记录,不隐藏 我们**有意**不扫描已评估的 Terraform 计划。这意味着: - `publicly_accessible = var.expose_db` **不会被检测到**(我们不解析 `var.expose_db`)。 - 模块输出流入资源的情况**不会被检测到**。 - AWS 账户实时状态的漂移**不会被检测到** — 这是一个静态扫描器,而非 CSPM 即服务。 如果需要这些功能,请搭配 `terraform show -json | trivy iac`(可解析变量)和运行时 CSPM 工具(如 Prowler、Cloud Custodian)来检测账户实时状态漂移。[ADR 0001](docs/adr/0001-hcl-source-text-over-evaluated-plan.md) 详细说明了这一权衡。 ## 在本项目组合中的定位 | 仓库 | 功能 | 关联 | |---|---|---| | **[devsecops-platform](https://github.com/mohidev-tech/devsecops-platform)** | 集群 + 安全应用 | 包含自己的 Terraform — 由 cspm-scanner 扫描 | | **[secure-supply-chain](https://github.com/mohidev-tech/secure-supply-chain)** | Cosign 签名的镜像 + 准入验证 | 构建平台准入的镜像 | | **cspm-scanner** *(本仓库)* | 验证构建平台所用的 IaC | 形成闭环:IaC → 构建 → 发布 → 准入 | ## 贡献指南 欢迎提交 PR。详见 [CONTRIBUTING.md](CONTRIBUTING.md)。如需私下报告安全漏洞,请参阅 [SECURITY.md](SECURITY.md)。 ## 许可证 Apache 2.0 — 详见 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。
标签:CIS AWS, CI集成, EVTX分析, GitHub Code Scanning, Go语言, GraphQL安全矩阵, HCL解析, NIST 800-53, SARIF, SOC2, 云安全监控, 合规映射, 基础设施即代码安全, 安全扫描器, 开源, 日志审计, 程序破解, 配置扫描, 零凭证, 静态分析