jaradat13/cloudsec-scanner

GitHub: jaradat13/cloudsec-scanner

一款用于扫描 AWS 和 Azure 常见安全错误配置的 Python 工具,生成防篡改签名报告并借助 Claude 提供修复指南。

Stars: 0 | Forks: 0

# cloudsec-scanner 一款用于扫描 AWS 和 Azure 常见安全错误配置的 Python 工具,可生成**防篡改的签名 JSON 报告**,并利用 Claude (Anthropic) 以通俗易懂的语言解释每项发现,提供分步修复指南。 ## 扫描内容 | 提供商 | 资源 | 检查项 | |---|---|---| | AWS | S3 Buckets | 公开 ACL、公开访问块已禁用、无加密、未开启版本控制、未开启日志记录 | | AWS | IAM | Root MFA 已禁用、Root 访问密钥、用户缺少 MFA、过期的访问密钥 (>90天)、通配符管理员策略 | | AWS | Security Groups | 所有流量开放 (0.0.0.0/0)、危险端口开放 (SSH/22, RDP/3389, MySQL/3306, Postgres/5432, MongoDB/27017, Redis/6379) | | Azure | NSGs | 全端口通配符规则、对互联网开放的危险端口 | ## 快速开始 ### 1. 安装 ``` git clone cd cloudsec-scanner pip install -r requirements.txt ``` ### 2. 生成签名密钥对 (仅需一次) ``` python main.py --generate-keys # 创建:private.pem(保密)、public.pem(可共享) ``` ### 3. 运行扫描 ``` # 仅限 AWS,签署报告,使用 LLM 解释 export ANTHROPIC_API_KEY=sk-ant-... python main.py --providers aws --explain --sign --key private.pem --output report.json # AWS + Azure python main.py \ --providers aws azure \ --subscription-id \ --explain \ --sign --key private.pem \ --output report.json # 仅筛选 CRITICAL 和 HIGH python main.py --providers aws --severity CRITICAL HIGH --explain # 不使用 LLM(仅结果 + 签署的报告) python main.py --providers aws --sign --key private.pem ``` ### 4. 验证报告是否被篡改 ``` python main.py --verify report.json --public-key public.pem # ✅ 报告验证成功 ``` ## 报告格式 输出为**防篡改的 JSON 封包**: ``` { "payload": { "schema_version": "1.0", "generated_at": "2025-01-15T10:30:00+00:00", "scanner": "cloudsec-scanner", "summary": { "total_findings": 12, "severity_counts": { "CRITICAL": 2, "HIGH": 5, "MEDIUM": 3, "LOW": 2 }, "resource_types": ["IAMAccount", "S3Bucket", "SecurityGroup"] }, "findings": [ { "resource_type": "SecurityGroup", "resource_id": "sg-0abc123", "check": "OpenPort22", "severity": "HIGH", "detail": "SG 'web-sg' allows SSH (port 22) from 0.0.0.0/0.", "llm_analysis": { "explanation": "This security group allows anyone on the internet to attempt SSH connections to your instances.", "risk": "Attackers can run automated brute-force attacks against SSH. A weak or default password would grant full server access.", "remediation": { "summary": "Restrict SSH to specific trusted IP ranges only.", "steps": [ "Go to EC2 → Security Groups → Select the group", "Edit inbound rules → Remove the 0.0.0.0/0 SSH rule", "Add a new rule: Type=SSH, Source=Your IP or VPN CIDR" ], "example_code": "aws ec2 revoke-security-group-ingress --group-id sg-0abc123 --protocol tcp --port 22 --cidr 0.0.0.0/0" }, "fix_effort": "Low" } } ] }, "integrity": { "algorithm": "RSA-SHA256-PKCS1v15", "sha256": "a3f9b2...", "signature": "base64-encoded-RSA-signature...", "public_key_fingerprint": "sha256-of-public-key..." } } ``` ### 防篡改原理 1. `payload` 被序列化为**规范化 JSON**(排序键,无空格)—— 这是确定性的。 2. 计算该规范化 JSON 的 **SHA-256 摘要**。 3. 使用您的私钥(PKCS#1 v1.5 + SHA-256)对该摘要进行 **RSA 签名**。 4. 任何拥有 `public.pem` 的人都可以重新规范化 payload、重新计算摘要并验证签名 —— 对任何字段的任何修改都会导致验证失败。 HMAC-SHA256 签名也作为更轻量级的替代方案受到支持(无需 PKI)。 ## 身份验证 ### AWS 使用 [boto3 凭证链](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html): - 环境变量(`AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`) - `~/.aws/credentials` 文件(`--profile my-profile`) - IAM 实例角色 / ECS 任务角色 / Lambda 执行角色(自动) 所需的最低 IAM 权限(只读): ``` { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketAcl", "s3:GetBucketPublicAccessBlock", "s3:GetBucketEncryption", "s3:GetBucketVersioning", "s3:GetBucketLogging", "iam:GetAccountSummary", "iam:ListUsers", "iam:ListMFADevices", "iam:GetLoginProfile", "iam:ListAccessKeys", "iam:ListPolicies", "iam:GetPolicyVersion", "ec2:DescribeSecurityGroups" ], "Resource": "*" } ``` ### Azure 使用 [DefaultAzureCredential](https://docs.microsoft.com/en-us/python/api/azure-identity/azure.identity.defaultazurecredential): - `az login`(本地开发) - 托管标识(Azure 虚拟机、容器实例) - 环境变量(`AZURE_CLIENT_ID`、`AZURE_CLIENT_SECRET`、`AZURE_TENANT_ID`) 最低角色:**网络参与者**(读取)或具有 `Microsoft.Network/networkSecurityGroups/read` 权限的自定义角色。 ## 部署 ### Docker ``` # 构建 docker build -t cloudsec-scanner . # 运行 docker run --rm \ -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ -e AWS_DEFAULT_REGION=us-east-1 \ -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \ -v $(pwd)/keys:/app/keys:ro \ -v $(pwd)/reports:/app/reports \ cloudsec-scanner \ --providers aws --explain --sign --key /app/keys/private.pem ``` ### AWS Lambda(定时执行,每日) ``` cd deploy/ # 首先构建 dependency layer mkdir -p layer/python pip install -r ../requirements.txt -t layer/python cd layer && zip -r ../layer.zip python && cd .. # 部署 terraform init terraform apply \ -var="report_bucket=my-security-reports" \ -var="signing_secret=$(openssl rand -hex 32)" \ -var="anthropic_api_key=$ANTHROPIC_API_KEY" \ -var="alert_email=security@mycompany.com" ``` Lambda 函数按计划运行(默认:每日),将签名报告存储到 S3,并在检测到 CRITICAL 或 HIGH 级别的发现时发送 SNS 电子邮件警报。 ## CLI 参考 ``` --providers aws azure Cloud providers to scan (default: aws) --region us-east-1 AWS region --profile PROFILE AWS named profile --subscription-id ID Azure subscription ID --severity CRITICAL HIGH Filter by severity --explain Enrich findings with LLM explanations --model MODEL Anthropic model (default: claude-sonnet-4-20250514) --max-explain N Max findings to send to LLM (default: 20) --sign Sign report with RSA key --key private.pem RSA private key for signing --hmac-secret SECRET HMAC secret (alternative to --key) --output report.json Output file path --verify report.json Verify an existing report --public-key public.pem RSA public key for verification --generate-keys Generate RSA key pair --quiet Suppress terminal output ``` ## 退出码 | 代码 | 含义 | |------|---------| | 0 | 扫描完成,未发现 CRITICAL 级别的问题 | | 1 | 扫描完成,发现 CRITICAL 级别的问题 | | 2 | 验证失败(报告已被篡改) | 这使得该扫描器能够在 CI/CD 流水线中使用: ``` python main.py --providers aws --severity CRITICAL || echo "CRITICAL findings — blocking deploy" ``` ## 诚实的局限性 - **只读**:该扫描器永远不会修改您的基础设施。它仅调用 `Describe*`、`List*` 和 `Get*` API。 - **不支持跨账户**:仅扫描您的凭证有权访问的账户/订阅。对于多账户组织,请为每个账户运行一次,或使用 AWS Organizations + CloudFormation StackSets。 - **LLM 分析需要付费**:发送给 LLM 的每项发现都会消耗 API token。`--max-explain` 标志对此进行了限制(默认:每次运行 20 项发现)。 - **不能替代 AWS Security Hub / Defender for Cloud**:这些服务拥有更深入的集成和持续的监控功能。此工具最适合用于时间点检查和 CI/CD 门禁。 - **Azure 支持仅限 NSG**:Azure 还有许多其他安全面(Storage、Key Vault、RBAC)。欢迎提交 PR。
标签:AI修复建议, AWS, Azure, CISA项目, DPI, Python, 基线扫描, 指令遵循, 无后门, 请求拦截, 足迹分析, 逆向工具