wahidhendrawan/PagerWesi

GitHub: wahidhendrawan/PagerWesi

PagerWesi 是一款跨操作系统和云环境的安全基线审计与可控修复工具,帮助团队以 audit-only 默认方式发现配置偏差并安全地执行加固变更。

Stars: 0 | Forks: 0

# PagerWesi 针对操作系统、云服务提供商、Kubernetes、Docker、Terraform plan、源码树以及网络/TLS endpoint 的安全基线审计和可控修复。每个入口点默认均采用 **仅审计(audit-only)** 行为。在使用 apply 模式之前,请在一次性环境中审查发现的问题并测试更改。 宣传网站和文档已通过内置的 GitHub Pages 工作流发布在 ****。 源资产位于 [docs/index.html](docs/index.html)。 如需快速设置路径,请从 [docs/quickstart.md](docs/quickstart.md) 开始。提供商权限示例位于 [docs/provider-permissions.md](docs/provider-permissions.md)。 ## 功能 | 目标 | 审计 | 计划 | 应用 | 机器输出 | |---|---:|---:|---:|---:| | Linux | 是 | 是 | 是 | 文本 | | macOS | 是 | 是 | 是 | 文本 | | Windows | 是 | 是 | 是 | JSON | | FreeBSD | 是 | 是 | 是 | 文本 | | Alpine/容器 | 是 | 是 | 有限 | 文本 | | AWS | 是 | 是 | 有限 | 文本, JSON, SARIF, HTML | | Azure | 是 | 是 | — | 文本, JSON, SARIF, HTML | | GCP | 是 | 是 | — | 文本, JSON, SARIF, HTML | | Kubernetes | 是 | 是 | — | 文本, JSON, SARIF, HTML | | Docker | 是 | 是 | — | 文本, JSON, SARIF, HTML | | 密钥 | 是 | — | — | 文本, JSON, SARIF, HTML | | Terraform | 是 | — | — | 文本, JSON, SARIF, HTML | | 网络/TLS | 是 | — | — | 文本, JSON, SARIF, HTML | | **所有核心云** | 是 | 是 | — | 文本, JSON, SARIF, HTML | 控制项是受常见 CIS 建议启发的项目基线。它们**并不代表获得了 CIS 认证**。有关范围和限制,请参阅 [docs/controls.md](docs/controls.md)。 ## Cloud CLI 需要 Python 3.10 或更高版本。只需安装您正在使用的提供商: ``` python3 -m venv .venv . .venv/bin/activate pip install -e '.[aws]' pagerwesi aws --format text ``` 有用的示例: ``` # 机器可读报告 pagerwesi aws --format json --output reports/aws.json # 一个 control 和指定的 AWS profile pagerwesi aws --control AWS-S3-004 --profile production # 跨多个 AWS region 运行 regional control pagerwesi aws --regions us-east-1,ap-southeast-1,eu-west-1 # 审计由指定 profile 表示的多个 AWS 账户 pagerwesi aws --profiles production,security-audit --regions us-east-1,ap-southeast-1 # 发现活动的 AWS Organization 账户并代入标准审计角色 pagerwesi aws --organization-role AutomationHardeningAudit \ --external-id approved-external-id --regions us-east-1,ap-southeast-1 # 预览/应用确定性 AWS remediation pagerwesi aws --mode plan \ --plan-manifest reports/aws-plan.json pagerwesi aws --mode apply --yes \ --change-manifest reports/aws-changes.json # 从 apply change manifest 还原可逆设置 pagerwesi aws --mode rollback --yes \ --rollback-manifest reports/aws-changes.json # Azure/GCP plan 模式(非变更) pagerwesi azure --mode plan --plan-manifest reports/azure-plan.json pagerwesi gcp --mode plan --plan-manifest reports/gcp-plan.json # 应用已验证的 policy override 和记录在案的 resource exclusion pagerwesi policy validate --policy policy.example.yml pagerwesi aws --policy policy.example.yml # 用于 GitHub code scanning 摄入的 SARIF pagerwesi aws --format sarif --output reports/aws.sarif # 静态仪表板和合规性证据 pagerwesi aws --generate-dashboard reports/site pagerwesi aws --export-compliance soc2 --output reports/aws.json ``` 退出代码 `0` 表示没有失败/错误的发现,`1` 表示控制失败,`2` 表示执行或权限错误。AWS 还会检查 root MFA、CloudTrail、Config、GuardDuty、Security Hub、默认安全组、默认 EBS 加密、RDS 加密、VPC Flow Logs、IAM Access Analyzer 和 KMS 轮换。指定的 profile 或 AWS Organizations 角色担任支持多账户审计。在每个受管区域中运行区域控制。当配置了策略目标 ARN 时,apply 模式当前会更改受支持的 S3 设置、默认 EBS 加密、IAM Access Analyzer 和 VPC Flow Logs。它不会重写存储桶策略、ACL、更广泛的日志记录架构或付费的安全服务计划。 Plan manifest 包含建议的前/后值,并且不会调用更改 API。Azure 和 GCP plan 模式会生成展示建议更改的非更改性 plan manifest。在 AWS Organizations 审计期间,报告无法访问的成员账户时,不会停止对其余账户的评估。 回滚会从 manifest 值中恢复账户/存储桶的 Public Access Block、默认加密、默认 EBS 加密的更改、工具创建的 IAM Access Analyzer 以及 VPC Flow Logs。AWS 无法将已版本化的存储桶恢复到从未启用的状态,因此版本控制回滚将报告为 `MANUAL` 并带有非零退出代码。在确认回滚之前,请检查 manifest 并使用最小权限凭证。 策略文件使用 `version: 1`,并且可以覆盖 Azure/GCP 管理端口或使用 shell 风格的模式排除资源。排除项会作为 `SKIP` 发现发出,而不是静默忽略;请参阅 [policy.example.yml](policy.example.yml)。策略验证使用 JSON Schema 并报告精确的错误路径。 Azure 审计存储 TLS 和网络规则、Key Vault 公共访问、SQL 审计、NSG 管理暴露、Defender 计划、活动日志导出和诊断设置。GCP 审计公共存储桶 IAM、统一存储桶访问、服务账户用户管理的密钥、KMS 轮换、防火墙管理暴露、日志记录 sink 和审计日志记录;Security Command Center 仍然是组织级别的手动控制。 JSON 发现结果遵循 [docs/finding.schema.json](docs/finding.schema.json) 中的可重用 schema。 使用它来验证仪表板、SIEM pipeline、证据存储和自定义 webhook 处理器的下游数据摄取。 ## 容器 每个版本标签都会将预构建的容器镜像发布到 GHCR: ``` docker pull ghcr.io/wahidhendrawan/pagerwesi:latest docker run --rm \ -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_DEFAULT_REGION \ ghcr.io/wahidhendrawan/pagerwesi:latest \ aws --format sarif --output /dev/stdout ``` ## Kubernetes ``` pip install -e '.[k8s]' pagerwesi k8s --format text pagerwesi k8s --mode plan --plan-manifest reports/k8s-plan.json ``` 检查 NetworkPolicy 覆盖范围、cluster-admin RBAC 绑定、特权 Pod 以及 Pod 安全标准执行情况。通过集群内配置或 `~/.kube/config` 进行连接。 ## Docker、密钥、Terraform 和网络/TLS 本地扫描器需要明确的操作员范围: ``` # Docker daemon/container 安全态势 pagerwesi docker --format json --output reports/docker.json # Source-tree secret 检测;在 CI 中优先使用狭窄路径 pagerwesi secrets --path ./src --format json --output reports/secrets.json # Terraform plan 审查;首先生成 JSON terraform plan -out=tfplan terraform show -json tfplan > tfplan.json pagerwesi terraform --path tfplan.json --format json --output reports/terraform.json # TLS 和 endpoint 暴露检查 pagerwesi network --endpoints example.com:443,api.example.com:443 \ --format json --output reports/network.json ``` ## 核心云统一报告 ``` pip install -e '.[aws,azure,gcp,k8s]' pagerwesi all --format json --output reports/unified.json pagerwesi all --format sarif --output reports/unified.sarif ``` 按顺序运行核心云提供商(`aws`、`azure`、`gcp` 和 `k8s`),并将发现的结果合并为单个报告。不可用的提供商会自动跳过。本地扫描器是明确的命令,因为它们需要操作员选择的路径或 endpoint 范围: ``` pagerwesi docker --format json --output reports/docker.json pagerwesi secrets --path . --format json --output reports/secrets.json pagerwesi terraform --path tfplan.json --format json --output reports/terraform.json pagerwesi network --endpoints example.com:443 --format json --output reports/network.json ``` ## FreeBSD ``` sudo sh freebsd/harden.sh --mode audit sudo sh freebsd/harden.sh --mode plan sudo sh freebsd/harden.sh --mode apply ``` 检查 PF 防火墙、SSH root 登录、空密码和安全补丁。 ## Alpine / 容器操作系统 ``` sh alpine/harden.sh --mode audit sh alpine/harden.sh --mode plan sh alpine/harden.sh --mode apply ``` 检查非 root 用户、易受攻击的软件包、只读根文件系统和不必要的 shell。 ## 操作系统 审计始终是默认操作: ``` sudo bash linux/harden.sh --mode audit sudo bash linux/harden.sh --mode plan sudo bash linux/harden.sh --mode apply sudo bash macos/harden.sh --mode audit sudo bash macos/harden.sh --mode plan sudo bash macos/harden.sh --mode apply powershell -File windows/harden.ps1 -Mode Audit -OutputPath report.json powershell -File windows/harden.ps1 -Mode Plan powershell -File windows/harden.ps1 -Mode Apply ``` Linux apply 模式会在 `/var/backups/pagerwesi/` 下创建带有时间戳的 SSH 备份。使用以下命令进行恢复: ``` sudo bash linux/harden.sh --rollback /var/backups/pagerwesi/TIMESTAMP ``` Linux 防火墙 apply 模式在启用防火墙之前,允许 `ALLOW_SSH` 中的服务。对于非标准服务或规则,请显式设置并首先验证计划: ``` sudo ALLOW_SSH=OpenSSH bash linux/harden.sh --mode plan ``` ## 自定义控制 无需复刻(fork),即可在 YAML 中定义您自己的控制: ``` # my-controls.yml version: 1 controls: - id: CUSTOM-DNS-001 title: DNS resolver uses internal nameservers check: "grep -q 'nameserver 10\\.' /etc/resolv.conf" severity: medium remediation: "Configure internal DNS in /etc/resolv.conf" ``` ``` pagerwesi aws --custom-controls my-controls.yml ``` ## 修复手册 从 plan manifest 生成 Terraform 或 CloudFormation: ``` pagerwesi aws --generate-playbook reports/plan.json --output remediation.tf pagerwesi aws --generate-playbook reports/plan.json \ --playbook-format cloudformation --output remediation.yml ``` ## HTML 仪表板 ``` pagerwesi all --format html --output reports/dashboard.html ``` 生成一个独立的 HTML 文件,其中包含核心云提供商集合的通过/失败/错误统计信息和发现结果表。当您需要 Docker、密钥、Terraform plan 或网络/TLS 证据时,请单独运行明确的本地扫描器。 ## 漂移检测 预定的工作流每天运行,审计核心云提供商集合,如果控制失败,则会创建 GitHub Issue。请参阅 `.github/workflows/drift-detection.yml`。 ## Agent 模式 Agent 模式会运行定期审计,并可在出现新的失败或提供商错误时发送 webhook 通知: ``` pagerwesi aws --agent --interval 300 --watch-providers aws,azure,gcp,k8s \ --notify notify.yml ``` 提供商运行时故障会作为 `AGENT-PROVIDER-001` 错误发现发出,而不是被静默忽略。 ## 开发 ``` pip install -e '.[dev]' make test make lint make security make test-os make docs ``` CI 检查 Python 3.10/3.12、Ruff、pytest 覆盖率、ShellCheck、Linux 审计/计划冒烟测试、PowerShell 解析、CodeQL、拉取请求依赖项审查以及使用 LocalStack 的集成测试。 版本标签会构建一个 GitHub Release,包含 Python 构件、校验和、CycloneDX SBOM、容器镜像和来源证明。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 控制与 NIST CSF 2.0、ISO/IEC 27001:2022 附录 A 和 CIS 基准系列的关系记录在 [docs/compliance-mapping.json](docs/compliance-mapping.json) 中。这些映射仅供参考,并不构成认证。 ## 安全 - 在审计模式下使用最小权限的只读云凭证。 - 首先在虚拟机或一次性账户中捕获备份并测试 apply 模式。 - 在远程启用主机防火墙之前,检查网络访问权限。 - 在启用 FileVault 或 BitLocker 之前,使用经过批准的恢复密钥托管流程。 - 将生成的报告视为敏感信息,因为它们包含资源标识符和安全态势数据。 本项目在 GPL-3.0-or-later 许可证下提供,不包含任何保证。
标签:AI合规, Cutter, DevSecOps, 上游代理, 安全基线, 教学环境, 漏洞配置检测, 系统加固, 请求拦截, 逆向工具