brazilco-platforms/secure-code-orchestrator

GitHub: brazilco-platforms/secure-code-orchestrator

一款基于 Go 的安全扫描编排 CLI,整合 SAST、SCA、DAST 等多种开源扫描器,实现代码安全分析的统一执行与报告汇总。

Stars: 0 | Forks: 0

# Secure Scan CLI [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/brazilco-platforms/secure-code-orchestrator/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/brazilco-platforms/secure-code-orchestrator/branch/main/graph/badge.svg)](https://codecov.io/gh/brazilco-platforms/secure-code-orchestrator) [![Go Version](https://img.shields.io/github/go-mod/go-version/brazilco-platforms/secure-code-orchestrator)](https://go.dev/) [![Release](https://img.shields.io/github/v/release/brazilco-platforms/secure-code-orchestrator)](https://github.com/brazilco-platforms/secure-code-orchestrator/releases/latest) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) [![Go Report Card](https://goreportcard.com/badge/github.com/brazilco-platforms/secure-code-orchestrator)](https://goreportcard.com/report/github.com/brazilco-platforms/secure-code-orchestrator) `secure-scan` 是一个使用 Go 编写的 CLI 工具,用于编排针对本地源代码的安全分析。在 **bundle 版本**(发布在 release 中)中,扫描器作为**原生二进制文件运行,无需 Docker**;在 **Docker 版本**(开发/源码)中,它们运行在容器中。该工具集成了按分析类型组织的 **17 个扫描器**: ### 静态分析 (SAST) - 静态代码 分析源代码**无需执行**的扫描器: | 扫描器 | 类别 | 分析内容 | |---------|-----------|---------------| | **Opengrep** | SAST | 代码中的漏洞 (OWASP Top 10) | | **Dependency-Check** | SCA | 依赖项中的 CVE | | **License Checker** | SCA | npm 包的许可证 | | **Trivy** | Container | Dockerfile 和镜像 | | **GitLeaks** | Secrets | Git 中暴露的凭证 | | **Checkov** | IaC | Kubernetes, Terraform, Dockerfile | | **Spectral** | API | OpenAPI/AsyncAPI 规范 | | **Syft** | SBOM | 组件清单 | | **Conftest** | Policy | OPA/Rego 策略 | ### 动态分析 (DAST) - 运行中的应用程序 **需要应用程序在运行中**的扫描器: | 扫描器 | 类别 | 分析内容 | |---------|-----------|---------------| | **OWASP ZAP** | DAST | 运行时的 Web 应用程序 | | **GraphQL Cop** | API | GraphQL endpoints | | **Nmap** | Network | 端口和服务 | | **Nuclei** | Network | Web 漏洞 | | **testssl** | Network | TLS/SSL 配置 | 汇总的输出结果以 JSON/Markdown 格式提供,可以通过 CLI 本身的子命令转换为附加报告。 ## 治理 此编排器是 **[ADR-0015] 的实现**(仓库 [`BrazilCo/governance`](https://github.com/BrazilCo/governance)):停用 **GitHub Code Security (GHAS/CodeQL)**,并使用零成本的自主工具(Opengrep + Trivy + gitleaks)覆盖 SAST/SCA/secrets。此仓库的决策及其实现/相关的治理 ADR 位于 **[docs/adr/](docs/adr/)**。 ## 前置条件 - **Bundle 版本 (release):** 无需任何外部 runtime — 内嵌原生扫描器,无需 Docker。 - **Docker 版本 (开发/源码):** 需要运行 Docker 以使用容器化的扫描器。 - 对工作目录具有写入权限(用于生成 cache、报告和 artifacts)。 ## 安装说明 ### 方法 1:离线 Bundle(推荐 — 无需 Docker) Release **仅发布 bundle 版本**:每个平台一个自包含的包,包含 `secure-scan` + **9 个原生扫描器 + 内嵌的 SAST 规则** — 可 **100% 离线运行,无需 Docker**(仅在执行 `cache update` 时需要网络)。 **Linux (x64):** ``` curl -LO https://github.com/brazilco-platforms/secure-code-orchestrator/releases/latest/download/secure-scan-bundle-linux-amd64.tar.gz tar -xzf secure-scan-bundle-linux-amd64.tar.gz sudo mv secure-scan-bundle-linux-amd64 /opt/secure-scan sudo ln -sf /opt/secure-scan/bin/secure-scan /usr/local/bin/secure-scan ``` **macOS (Intel / Apple Silicon):** 替换为 `secure-scan-bundle-darwin-amd64.tar.gz` / `secure-scan-bundle-darwin-arm64.tar.gz`(流程相同)。 **Windows:** 从 [发布页面](https://github.com/brazilco-platforms/secure-code-orchestrator/releases/latest)下载 `secure-scan-bundle-windows-amd64.zip`,解压并将 `bin\` 添加到 `PATH`。 ### 方法 2:Go Install(仅编排器,Docker 版本) 仅安装**编排器**(不包含内嵌的扫描器)— 扫描器在 **Docker 容器**中运行(需要宿主机上安装 Docker)。用于开发用途: ``` go install github.com/brazilco-platforms/secure-code-orchestrator@latest ``` 二进制文件将安装在 `$GOPATH/bin/secure-scan`。 ### 方法 3:手动编译 克隆仓库并在本地编译: ``` # 克隆仓库 git clone https://github.com/brazilco-platforms/secure-code-orchestrator.git cd secure-scan-cli # 安装依赖 go mod download # Build 与安装 make install ``` ### 验证安装 ``` secure-scan --version # 预期输出:Secure Scan CLI vX.Y.Z ``` ### 故障排除 **Docker 不可用:** - 确保 Docker 正在运行:`docker ps` - 在 Linux 上,将您的用户添加到 docker 组:`sudo usermod -aG docker $USER` **权限被拒绝 (Linux/macOS):** ``` chmod +x /usr/local/bin/secure-scan # 或者 sudo chmod +x /usr/local/bin/secure-scan ``` **找不到命令:** - 检查 `/usr/local/bin` 是否在您的 `$PATH` 中 - 或者使用完整路径:`/usr/local/bin/secure-scan --version` ## 快速入门 安装 CLI 后(参见[安装说明](#installation)),执行: ``` # 更新本地数据库 (NVD/Trivy) secure-scan cache update # 在当前仓库上运行所有 scanner # 注意:对于 security full,--output-dir 是必需的(无默认值) secure-scan security full . --output-dir /path/to/reports # 生成汇总的 Markdown 报告 secure-scan report security /path/to/reports ``` 对于动态分析 (DAST),通过 `--target` 将扫描器指向目标。各个子命令 接受 `-o/--output-dir`(默认为 `security-reports`): ``` # 扫描在本地运行的 app(使用 --network host 以访问宿主机的 localhost) secure-scan security zap --target http://localhost:3000 --network host -o ./reports # 扫描可路由的外部目标(默认/bridge 网络) secure-scan security zap --target https://app.example.com -o ./reports ``` ### 报告结构 使用 `--output-dir /reports` 时,报告的组织方式如下: ``` /reports/ ├── secure-scan/ # Relatório agregado │ ├── secure-scan-report.json │ └── secure-scan-report.md ├── opengrep/ # SAST ├── trivy/ # Container ├── gitleaks/ # Secrets ├── checkov/ # IaC └── ... ``` ## 主要命令 | 类别 | 命令 | 描述 | |--------------|------------------------------------------------------|-------------------------------------------------------------| | 安全 | `secure-scan security full [path] -o ` | 运行所有启用的扫描器(并行)。 | | | `secure-scan security sast [path] -o ` | 通过 Opengrep 进行 SAST。 | | | `secure-scan security deps [path] -o ` | 通过 Dependency-Check 进行 SCA。 | | | `secure-scan security licenses [path] -o ` | 通过 license-checker 生成许可证清单。 | | | `secure-scan security containers [path] -o ` | 通过 Trivy 进行 Container 安全检测。 | | | `secure-scan security secrets [path] -o ` | 通过 GitLeaks 进行 Secrets 检测。 | | | `secure-scan security iac [path] -o ` | 通过 Checkov 进行 IaC 安全检测。 | | | `secure-scan security zap --target [--network host] -o ` | 通过 OWASP ZAP 进行 DAST(需要应用正在运行;`--target` 必填)。 | | | `secure-scan security api [path] -o ` | 通过 Spectral 进行 API 安全检测 (OpenAPI/AsyncAPI)。 | | | `secure-scan security network nmap --target -o ` | 通过 Nmap 进行网络安全检测(`--target` 必填)。 | | 报告 | `secure-scan report security -i -o ` | 根据汇总的 JSON 生成 Markdown 报告。 | | | `secure-scan report quality -o ` | 生成质量检查清单(基于内部启发式算法)。 | | | `secure-scan report markdown -i -o ` | 将任何聚合的 artifact 转换为 Markdown。 | | 清理 | `secure-scan clean reports --older-than 30d` | 删除指定目录中的旧报告。 | | Cache | `secure-scan cache update [path]` | 更新扫描器的本地 cache。 | | | `secure-scan cache status [path]` / `cache clean` | 检查或清理 cache。 | | 性能 | `secure-scan perf run --vus 10 --duration 30s` | 使用虚拟用户执行 HTTP 负载测试。 | | 环境 | `secure-scan env up|down|status [path]` | 启动/关闭内嵌的监控环境。 | | 服务 | `secure-scan services scan [path]` | 编目服务:`services/*`(monorepo)或 workspace 本身(如果是单应用且存在项目标记)。检测技术栈、endpoints (Express/NestJS/Go) 以及依赖项。 | | 测试 | `secure-scan test unit|integration [path]` | 对检测到的服务执行 `go test ./...`。 | | | `secure-scan test mutation [path]` | 优化的变异测试:Stryker (JS/TS,自定义 Docker) 或 Gremlins (Go)。自动清理报告。 | | 架构 | `secure-scan analyze deps [path]` | 运行 dependency-cruiser 并指出架构违规。 | | 文档 | `secure-scan docs generate [path]` | 在 `tool-docs/` 生成技术文档集:索引、服务目录、API 和依赖项清单、安全态势(如果进行了扫描)以及用于门户/CI 的 `index.json`。 | 所有文件夹和路径均相对于目标目录(`[path]`),该目录默认为当前目录。 ## 仓库结构 ``` secure-scan-cli/ ├── cmd/ # Comandos Cobra (CLI) ├── internal/ │ ├── domain/ # Contratos e modelos compartilhados │ ├── platform/ # Infraestrutura cross-cutting │ │ ├── runner/ # Abstração de execução (Docker/Local) │ │ ├── docker/ # Cliente Docker │ │ ├── logging/ # Logging estruturado │ │ └── config/ # Configurações │ ├── scanners/ # Scanners por domínio │ │ ├── security/ # SAST, SCA, Container, Secrets, IaC, DAST, API, Network │ │ ├── test/ # Mutation Testing │ │ ├── compliance/ # SBOM, Policy, Benchmark (futuro) │ │ └── supply-chain/ # Sign, Verify (futuro) │ ├── orchestration/ # Full scan, service scan, cache │ ├── handler/ # Handlers de comandos │ └── report/ # Geradores de relatórios ├── services/ # Serviços de exemplo ├── docs/ # Documentação └── docker/ # Dockerfiles customizados ``` ## 文档 完整文档位于 [docs/](docs)(目录索引见 [docs/README.md](docs/README.md)): - **[快速入门](docs/getting-started.md)** — 安装 + 首次扫描 + 核心命令 - **[CLI 参考](docs/wiki/cli-reference.md)** — 所有命令 - **[扫描器](docs/wiki/scanners.md)** — 扫描器、前置条件、Docker 镜像、ZAP - **[离线 Bundle](docs/offline-bundle.md)** — air-gap 版本:平台、rulesets、mirror - **[操作](docs/guides/operations.md)** — cache/CVE 更新 + 报告 - **[本地 DAST](docs/guides/DAST_LOCAL.md)** — 针对运行中应用的 DAST - **[架构](docs/wiki/architecture.md)** · **[测试](docs/wiki/testing.md)** · **[路线图](docs/roadmap.md)** ## 贡献 - **Trunk-based 工作流:** `main` 是唯一长期存在的分支。工作在 功能分支(`feat/…`, `fix/…`, `chore/…`)上进行,并通过 PR 合并回 `main` — 没有集成分支。Release 通过 `v*` 标签从 `main` 截取。 - 使用 Conventional Commits (`feat:`, `fix:`, `docs:` 等)。 - 在提交更改之前,请执行 `go fmt ./...` 和 `go test ./...`。 - 每当添加新的命令或工作流时,请及时更新 `docs/` 中的文档。
标签:CTI, DevSecOps, EVTX分析, FTP漏洞扫描, Go, Ruby工具, 上游代理, 安全编排, 日志审计, 请求拦截, 错误基检测, 静态代码分析