--- name: cloud-assessment description: Multi-cloud READ-ONLY security assessment methodology for AWS, Azure, and GCP using CIS benchmark-aligned checks category: assessment tags: [cloud, aws, azure, gcp, security-audit, cis-benchmark, iam, storage, network, encryption, logging, dns, tls] tech_stack: [aws, azure, gcp, aws-cli, az-cli, gcloud-cli] cwe_ids: [CWE-269, CWE-311, CWE-319, CWE-693, CWE-778] version: "1.0" --- # Cloud Security Assessment Methodology Multi-cloud READ-ONLY security assessment using the `cloud_audit` tool. All checks use describe/list/get CLI calls via native TypeScript — no Python dependency, no SDK imports. Uses aws/az/gcloud CLIs. Aligned with CIS benchmarks for AWS, Azure, and GCP. ## Safety First **ALWAYS run `verify_readonly` before any other audit program.** This confirms the current credentials have no dangerous write permissions. If the check returns FAIL, stop and request read-only credentials. ``` cloud_audit verify_readonly --provider all ``` ## Assessment Phases ### Phase 1 — Credential Safety Verification | Check | Command | Purpose | |-------|---------|---------| | Verify read-only | `cloud_audit verify_readonly --provider all` | Confirm no write permissions — MUST pass before proceeding | ### Phase 2 — Identity & Access Management IAM is the most critical attack surface in cloud environments. | Provider | Command | Key Checks | |----------|---------|------------| | AWS | `cloud_audit aws_iam_audit --json-output` | MFA status, wildcard policies, unused keys, cross-account trust, root access keys | | Azure | `cloud_audit azure_iam_audit --json-output` | Dangerous role assignments (Owner/Contributor), subscription-level owners, wildcard custom roles | | GCP | `cloud_audit gcp_iam_audit --json-output` | Primitive roles (Owner/Editor at project), SA key age >90d, domain-wide delegation | **Intelligence integration:** After IAM audit, report findings via `add_intel` with type `infrastructure`: ``` add_intel type=infrastructure data="IAM audit: 3 users without MFA, 2 wildcard policies found" ``` ### Phase 3 — Storage Security Public storage buckets are the #1 cloud data breach vector. | Provider | Command | Key Checks | |----------|---------|------------| | AWS | `cloud_audit aws_storage_audit --json-output` | S3 Block Public Access, ACLs, default encryption, versioning, access logging | | Azure | `cloud_audit azure_storage_audit --json-output` | Blob public access, HTTPS-only, minimum TLS version, SAS policies | | GCP | `cloud_audit gcp_storage_audit --json-output` | allUsers/allAuthenticatedUsers bindings, uniform bucket-level access, versioning | ### Phase 4 — Network Security Open security groups and missing flow logs are common misconfigurations. | Provider | Command | Key Checks | |----------|---------|------------| | AWS | `cloud_audit aws_network_audit --json-output` | SGs open to 0.0.0.0/0 on dangerous ports, IMDSv1, VPC flow logs | | Azure | `cloud_audit azure_network_audit --json-output` | NSG Any/Any rules, public IPs on VMs, NSG flow logs | | GCP | `cloud_audit gcp_network_audit --json-output` | Firewall rules open to 0.0.0.0/0, external IPs, legacy networks | ### Phase 5 — Encryption at Rest Unencrypted storage is a compliance violation in most frameworks. | Provider | Command | Key Checks | |----------|---------|------------| | AWS | `cloud_audit aws_encryption_audit --json-output` | EBS/RDS encryption, KMS key rotation, CMK vs AWS-managed | | Azure | `cloud_audit azure_encryption_audit --json-output` | Disk encryption, storage CMK, Key Vault rotation | | GCP | `cloud_audit gcp_encryption_audit --json-output` | Disk/SQL/GCS CMEK, KMS key rotation | ### Phase 6 — Logging & Monitoring Missing audit logs mean attacks go undetected. | Provider | Command | Key Checks | |----------|---------|------------| | AWS | `cloud_audit aws_logging_audit --json-output` | CloudTrail multi-region, GuardDuty, Config recorder | | Azure | `cloud_audit azure_logging_audit --json-output` | Activity Log retention, Diagnostic settings, Defender status | | GCP | `cloud_audit gcp_logging_audit --json-output` | Audit log config (DATA_READ/DATA_WRITE), log sinks, filters | ### Phase 7 — DNS & TLS External-facing services need DNS security and valid TLS. | Check | Command | Key Checks | |-------|---------|------------| | DNS | `cloud_audit dns_audit --domain TARGET` | Dangling CNAMEs (subdomain takeover), DNSSEC, CAA records | | TLS | `cloud_audit tls_audit --target HOST:PORT` | Protocol version, certificate expiry, cipher strength, HSTS | ## Vulnerability Reporting For each FAIL finding, report via `report_vulnerability`: ``` report_vulnerability title: "AWS IAM user without MFA: admin-user" severity: high evidence: requestSent: "cloud_audit aws_iam_audit --json-output" responseCode: 0 responseSummary: "checkId AWS-IAM-001 FAIL — user admin-user has console access without MFA" reasoning: "CIS AWS 1.10 requires MFA for all IAM users with console access" ``` ## Coverage Notes Use `record_coverage_note` with `scope: "wide"` for account-level findings: ``` record_coverage_note scope: wide note: "AWS IAM audit complete — 5 findings across 12 users. No root access keys detected." ``` ## Program Reference | Program | Domain | Providers | |---------|--------|-----------| | verify_readonly | Safety | AWS, Azure, GCP | | aws_iam_audit | IAM | AWS | | azure_iam_audit | IAM | Azure | | gcp_iam_audit | IAM | GCP | | aws_storage_audit | Storage | AWS | | azure_storage_audit | Storage | Azure | | gcp_storage_audit | Storage | GCP | | aws_network_audit | Network | AWS | | azure_network_audit | Network | Azure | | gcp_network_audit | Network | GCP | | aws_encryption_audit | Encryption | AWS | | azure_encryption_audit | Encryption | Azure | | gcp_encryption_audit | Encryption | GCP | | aws_logging_audit | Logging | AWS | | azure_logging_audit | Logging | Azure | | gcp_logging_audit | Logging | GCP | | dns_audit | DNS | Cross-cloud | | tls_audit | TLS | Cross-cloud |