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, 上游代理, 安全基线, 教学环境, 漏洞配置检测, 系统加固, 请求拦截, 逆向工具