| name | implementing-cloud-vulnerability-posture-management |
| description | 使用 AWS Security Hub、Azure Defender for Cloud 以及 Prowler、ScoutSuite 等开源工具实施云安全态势管理(CSPM),实现多云漏洞检测。
|
| domain | cybersecurity |
| subdomain | vulnerability-management |
| tags | ["cspm","cloud-security","aws-security-hub","azure-defender","prowler","scoutsuite","misconfiguration","cnapp"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
实施云漏洞态势管理(Implementing Cloud Vulnerability Posture Management)
概述
云安全态势管理(Cloud Security Posture Management,CSPM)持续监控云基础设施中的错误配置、合规违规和安全风险。与传统漏洞扫描不同,CSPM 专注于云原生风险:IAM 过度授权、暴露的存储桶、未加密数据、缺失的网络控制以及服务错误配置。本技能涵盖使用 AWS Security Hub、Azure Defender for Cloud 以及 Prowler、ScoutSuite 等开源工具进行多云 CSPM 管理。
前置条件
AWS Security Hub
启用 Security Hub
aws securityhub enable-security-hub \
--enable-default-standards \
--region us-east-1
aws securityhub batch-enable-standards \
--standards-subscription-requests \
'{"StandardsArn":"arn:aws:securityhub:us-east-1::standards/aws-foundational-security-best-practices/v/1.0.0"}' \
'{"StandardsArn":"arn:aws:securityhub:us-east-1::standards/cis-aws-foundations-benchmark/v/1.4.0"}'
aws securityhub get-findings \
--filters '{"SeverityLabel":[{"Value":"CRITICAL","Comparison":"EQUALS"}],"RecordState":[{"Value":"ACTIVE","Comparison":"EQUALS"}]}' \
--max-items 10
Security Hub 标准
| 标准 | 说明 |
|---|
| AWS 基础安全最佳实践 | AWS 推荐的基线控制 |
| CIS AWS 基准 1.4 | CIS 加固要求 |
| PCI DSS v3.2.1 | 支付卡行业控制 |
| NIST SP 800-53 Rev 5 | 联邦安全控制 |
Azure Defender for Cloud
启用 Defender CSPM
az security pricing create \
--name CloudPosture \
--tier standard
az security secure-score list \
--query "[].{Name:displayName,Score:current,Max:max}" \
--output table
az security assessment list \
--query "[?status.code=='Unhealthy'].{Name:displayName,Severity:metadata.severity,Resource:resourceDetails.id}" \
--output table
az security alert list \
--query "[?status=='Active'].{Name:alertDisplayName,Severity:severity,Time:timeGeneratedUtc}" \
--output table
开源工具:Prowler
安装和执行
pip install prowler
prowler aws --output-formats json-ocsf,csv,html
prowler aws --checks s3_bucket_public_access iam_root_mfa_enabled ec2_sg_open_to_internet
prowler aws --profile production --region us-east-1 --output-formats json-ocsf
prowler aws --compliance cis_1.5_aws
prowler aws --compliance pci_3.2.1_aws
prowler azure --subscription-ids "sub-id-here"
prowler gcp --project-ids "project-id-here"
Prowler 检查类别
| 类别 | 示例 |
|---|
| IAM | Root MFA、密码策略、访问密钥轮换 |
| S3 | 公开访问、加密、版本控制 |
| EC2 | 安全组、EBS 加密、元数据服务 |
| RDS | 公开访问、加密、备份保留 |
| CloudTrail | 已启用、已加密、日志验证 |
| VPC | 流量日志、默认安全组限制 |
| Lambda | 公开访问、运行时版本 |
| EKS | 公开端点、Secret 加密 |
开源工具:ScoutSuite
pip install scoutsuite
scout aws --profile production
scout azure --cli
scout gcp --project-id my-project
多云聚合
import json
import subprocess
from datetime import datetime, timezone
def run_prowler_scan(provider, output_dir, compliance=None):
"""对云提供商运行 Prowler 扫描。"""
cmd = ["prowler", provider, "--output-formats", "json-ocsf",
"--output-directory", output_dir]
if compliance:
cmd.extend(["--compliance", compliance])
result = subprocess.run(cmd, capture_output=True, text=True, timeout=3600)
return result.returncode == 0
def aggregate_findings(prowler_dirs):
"""聚合多次 Prowler 扫描的发现结果。"""
all_findings = []
for scan_dir in prowler_dirs:
json_files = list(Path(scan_dir).glob("*.json"))
for jf in json_files:
with open(jf, "r") as f:
for line in f:
try:
finding = json.loads(line.strip())
all_findings.append(finding)
except json.JSONDecodeError:
continue
severity_order = {"critical": 0, "high": 1, "medium": , : , : }
all_findings.sort(key= f: severity_order.get(
f.get(, ).lower(),
))
all_findings
():
report = {
: datetime.now(timezone.utc).isoformat(),
: (findings),
: {},
: {},
: {},
}
f findings:
sev = f.get(, )
provider = f.get(, )
service = f.get(, )
report[][sev] = report[].get(sev, ) +
report[][provider] = report[].get(provider, ) +
report[][service] = report[].get(service, ) +
(output_path, ) f:
json.dump(report, f, indent=)
report
参考资料