MillerMedia/awtest

GitHub: MillerMedia/awtest

快速枚举AWS凭证在63个服务中权限范围的Go语言扫描工具,专为渗透测试和云安全评估设计

Stars: 5 | Forks: 0

AWTest


     ___  _      ________        __

    /   || | /| / /_  __/__ ___ / /_

   / /| || |/ |/ / / / / -_|_-</ __/

  /_/ |_||__/|__/ /_/  \__/___/\__/

用于安全评估的 AWS 凭证权限扫描器

Latest Release Tests License Go Report Card Go Version

AWTest 通过对 **63 个 AWS 服务** 执行只读的 list/describe 操作(共计 **117 个 API 调用**),快速枚举 AWS 凭证的权限。专为渗透测试人员、红队成员和云安全审计师打造。 ## 功能特性 - **广泛的 AWS 覆盖** -- 涵盖 S3、EC2、IAM、Lambda、EKS、RDS、DynamoDB、GuardDuty、Security Hub 等 63 个服务,117 个 API 调用 - **速度预设** -- `--speed` 预设(`safe`、`fast`、`insane`)用于符合 OPSEC 要求的扫描并行度 - **多种输出格式** -- Text、JSON、YAML、CSV 和 table 输出 - **文件导出** -- 使用 `--output-file` 将结果直接写入文件 - **服务过滤** -- 使用 `--services` 和 `--exclude-services` 包含或排除特定服务 - **可配置超时** -- 使用 `--timeout` 设置扫描持续时间限制 - **并发扫描** -- `--speed` 预设或细粒度的 `--concurrency` 控制 - **会话令牌支持** -- 支持临时凭证 (STS) - **跨平台** -- 提供 macOS、Linux 和 Windows 的预编译二进制文件 ## 安装说明 ### Homebrew (macOS/Linux) ``` brew install --cask MillerMedia/tap/awtest ``` ### Go Install 需要 Go 1.19+: ``` go install github.com/MillerMedia/awtest/cmd/awtest@latest ``` ### 二进制文件下载 从 [GitHub Releases](https://github.com/MillerMedia/awtest/releases) 下载预编译的二进制文件: | 平台 | 文件 | |---|---| | macOS (Intel) | `awtest__darwin_amd64.tar.gz` | | macOS (Apple Silicon) | `awtest__darwin_arm64.tar.gz` | | Linux (amd64) | `awtest__linux_amd64.tar.gz` | | Linux (arm64) | `awtest__linux_arm64.tar.gz` | | Windows | `awtest__windows_amd64.zip` | ## 用法 ### 使用当前 AWS CLI 配置文件进行扫描 ``` awtest ``` ### 使用指定凭证进行扫描 ``` awtest --aki=AKIAEXAMPLE --sak=YourSecretAccessKey ``` ### 使用临时凭证 (STS) 进行扫描 ``` awtest --aki=ASIAEXAMPLE --sak=YourSecretKey --st=YourSessionToken ``` ### 输出为 JSON 到文件 ``` awtest --format=json --output-file=results.json ``` ### 仅扫描特定服务 ``` awtest --services=s3,ec2,iam,lambda ``` ### 排除干扰服务 ``` awtest --exclude-services=cloudwatch,cloudtrail ``` ### 快速扫描(中等并行度) ``` awtest --speed=fast ``` ### 最大速度配合 JSON 输出 ``` awtest --speed=insane --format=json --output-file=results.json ``` ### 输出示例 ``` [AWTest] [user-id] [info] AKIABCDEFGHIJKLMNO [AWTest] [account-number] [info] 123456789012 [AWTest] [iam-arn] [info] arn:aws:iam::123456789012:user/exampleUser [AWTest] [s3:ListBuckets] [info] Found S3 bucket: example-bucket-1 [AWTest] [s3:ListBuckets] [info] Found S3 bucket: example-bucket-2 [AWTest] [ec2:DescribeInstances] [info] Found EC2 instance: i-0abcdef1234567890 [AWTest] [iam:ListUsers] [info] Found IAM user: exampleUser1 [AWTest] [lambda:ListFunctions] [info] Found Lambda function: myFunction [AWTest] [eks:ListClusters] [info] Found EKS cluster: production [AWTest] [rds:DescribeDBInstances] [info] Found RDS instance: mydb [AWTest] [appsync:ListGraphqlApis] [info] Error: Access denied to this service. ``` ## 参数标志 | 标志 | 描述 | 默认值 | |---|---|---| | `--aki`, `--access-key-id` | AWS Access Key ID | | | `--sak`, `--secret-access-key` | AWS Secret Access Key | | | `--st`, `--session-token` | AWS Session Token | | | `--region` | AWS 区域 | `us-west-2` | | `--format` | 输出格式:`text`、`json`、`yaml`、`csv`、`table` | `text` | | `--output-file` | 将输出写入文件 | | | `--services` | 仅包含特定服务(逗号分隔) | all | | `--exclude-services` | 排除特定服务(逗号分隔) | none | | `--timeout` | 最大扫描持续时间(例如 `5m`、`300s`) | `5m` | | `--speed` | 速度预设:`safe`、`fast`、`insane`(控制扫描并行度) | `safe` | | `--concurrency` | 并发服务扫描的数量(指定时覆盖速度预设) | `1` | | `--quiet` | 屏蔽信息消息,仅显示发现结果 | `false` | | `--debug` | 启用调试输出 | `false` | | `--version` | 打印版本和构建信息 | | ## 速度预设与 OPSEC AWTest 提供命名的速度预设来控制扫描并行度。根据您的 OPSEC 要求选择合适的预设: | 预设 | 并发数 | CloudTrail 特征 | 使用场景 | |---|---|---|---| | `safe` | 1 个工作线程 | 最小足迹 —— 顺序调用类似正常控制台使用 | 隐蔽行动、红队作战、生产基础设施 | | `fast` | 5 个工作线程 | 中等密度 —— 较短时间窗口内更多事件,处于正常操作模式内 | 时间敏感的渗透测试,速度比隐蔽性更重要 | | `insane` | 20 个工作线程 | 密集突发 —— 所有 63 个服务同时冲击,明显的 API 调用激增 | 实验室环境、时间紧迫的 Bug 赏金、无需考虑 OPSEC | **默认行为:** 不带 `--speed` 标志运行 `awtest` 默认为 `safe`(顺序扫描,与第一阶段行为一致)。 **高级用户覆盖:** 使用 `--concurrency=N` 设置精确的工作线程数,覆盖速度预设的映射: ``` # 使用 fast 预设 (5 workers) awtest --speed=fast # 覆盖:使用 fast 预设标签但指定 10 workers awtest --speed=fast --concurrency=10 ``` ## 输出格式 AWTest 通过 `--format` 标志支持五种输出格式: | 格式 | 最适合 | 示例 | |---|---|---| | `text` | 实时终端扫描(默认) | `[AWTest] [s3:ListBuckets] [info] Found S3 bucket: my-bucket` | | `json` | SIEM 集成、自动化流水线、编程解析 | `{"service":"S3","method":"s3:ListBuckets","resource":"my-bucket"}` | | `yaml` | 可读的结构化报告、文档 | `service: S3` | `method: s3:ListBuckets` | | `csv` | 电子表格分析、数据导入、快速透视 | `S3,s3:ListBuckets,bucket,my-bucket` | | `table` | 结构化终端查看、在工单中分享 | 具有对齐列的 ASCII 表格 | ``` # 保存 JSON 结果以供 SIEM 接收 awtest --format=json --output-file=results.json # 生成 YAML 报告 awtest --format=yaml --output-file=report.yaml # 导出 CSV 用于电子表格分析 awtest --format=csv --output-file=findings.csv # 以格式化表格查看结果 awtest --format=table ``` ## 实际使用案例 ### 渗透测试 在一次金融科技项目的 engagement 中,您在一个公开的 GitHub 仓库中发现了 AWS 密钥。运行 awtest 以快速枚举这些凭证可以访问什么: ``` awtest --aki=AKIAEXAMPLE --sak=YourSecretKey --speed=insane --format=json --output-file=findings.json ``` 几秒钟内,awtest 揭示了一个包含客户 PII 的 RDS 实例、存有财务文档的 S3 存储桶以及活跃的 Lambda 函数 —— 这是一个关键发现,手动发现可能需要数小时。 ### Bug 赏金 您在客户端 JavaScript 中发现了硬编码凭证。使用 awtest 来证明完整的影响: ``` awtest --aki=AKIAEXAMPLE --sak=YourSecretKey --speed=insane --services=s3,secretsmanager,iam,lambda ``` AWTest 揭示了包含用户上传内容的 S3 存储桶和 Secrets Manager 条目,将中等严重程度的凭证泄露转变为具有确凿证据的严重发现。 ### 应急响应 凌晨 2 点警报:凭证被提交到了公开仓库。在决定是否升级事件之前评估影响范围 —— 使用 `--speed=safe` 进行受控扫描,最小化 CloudTrail 足迹: ``` awtest --aki=AKIAEXAMPLE --sak=YourSecretKey --speed=safe --timeout=2m ``` AWTest 显示凭证仅有权访问 CloudWatch 日志和一个 S3 日志存储桶 —— 没有客户数据暴露,无需紧急升级。 ## 支持的 AWS 服务(63 个服务,117 个 API 调用)
点击展开完整服务列表(63 个服务,117 个 API 调用) ### 计算与容器 | 服务 | API 调用 | |---|---| | Batch | ListJobs | | EC2 | DescribeInstances | | ECS | ListClusters | | EKS | ListClusters | | Elastic Beanstalk | DescribeApplications, DescribeEvents | | EMR | ListClusters, ListInstanceGroups, ListSecurityConfigurations | | Fargate | ListFargateTasks | | Lambda | ListFunctions | ### 数据库 | 服务 | API 调用 | |---|---| | DynamoDB | ListTables, ListBackups, ListExports | | ElastiCache | DescribeCacheClusters | | Neptune | DescribeDBClusters, DescribeDBInstances, DescribeDBClusterParameterGroups | | OpenSearch | ListDomains, DescribeDomainAccessPolicies, DescribeDomainEncryption | | RDS | DescribeDBInstances | | Redshift | DescribeClusters | ### 安全与身份 | 服务 | API 调用 | |---|---| | Certificate Manager (ACM) | ListCertificates | | Cognito Identity | ListIdentityPools | | Cognito User Pools | ListUserPools | | ECR | DescribeRepositories, ListImages, GetRepositoryPolicy | | GuardDuty | ListDetectors, GetFindings, ListFilters | | IAM | ListUsers | | KMS | ListKeys | | Macie | ListClassificationJobs, ListFindings, DescribeBuckets | | Organizations | ListAccounts, ListOrganizationalUnits, ListPolicies | | Secrets Manager | ListSecrets | | Security Hub | GetEnabledStandards, GetFindings, ListEnabledProductsForImport | | STS | GetCallerIdentity | | WAF | ListWebACLs | ### 存储 | 服务 | API 调用 | |---|---| | Backup | ListBackupVaults, ListBackupPlans, ListRecoveryPointsByBackupVault, GetBackupVaultAccessPolicy | | EFS | DescribeFileSystems | | Glacier | ListVaults | | S3 | ListBuckets | ### 网络 | 服务 | API 调用 | |---|---| | API Gateway | RestApis, GetApiKeys, GetDomainNames | | CloudFront | ListDistributions | | Direct Connect | DescribeConnections, DescribeVirtualInterfaces, DescribeDirectConnectGateways | | Route53 | ListHostedZones, ListHealthChecks | | VPC | DescribeVpcs | ### 管理与监控 | 服务 | API 调用 | |---|---| | CloudFormation | ListStacks | | CloudTrail | DescribeTrails, ListTrails | | CloudWatch | DescribeAlarms | | CloudWatch Logs | DescribeLogGroupsAndStreams, ListMetrics | | Config | DescribeConfigurationRecorders | | Systems Manager (SSM) | DescribeParameters | ### 应用服务 | 服务 | API 调用 | |---|---| | EventBridge | ListEventBuses | | SES | ListIdentities | | SNS | ListTopics | | SQS | ListQueues | | Step Functions | ListStateMachines | ### 开发者工具 | 服务 | API 调用 | |---|---| | Amplify | ListApps | | AppSync | ListGraphqlApis | | CodeBuild | ListProjects, ListProjectEnvironmentVariables, ListBuilds | | CodeCommit | ListRepositories, ListBranches | | CodeDeploy | ListApplications, ListDeploymentGroups, ListDeploymentConfigs | | CodePipeline | ListPipelines | | Glue | ListJobs, ListWorkflows | ### 分析 | 服务 | API 调用 | |---|---| | Athena | ListWorkGroups, ListNamedQueries, ListQueryExecutions | | Kinesis | ListStreams, ListShards, ListStreamConsumers | ### 媒体与机器学习 | 服务 | API 调用 | |---|---| | IVS | ListChannels, ListStreams, ListStreamKeys | | IVS Chat | ListRooms | | IVS Realtime | ListStages | | MediaConvert | ListQueues, ListJobs, ListPresets | | Rekognition | ListCollections, DescribeProjects, ListStreamProcessors | | SageMaker | ListNotebookInstances, ListEndpoints, ListModels, ListTrainingJobs | | Transcribe | ListTranscriptionJobs, ListLanguageModels, ListVocabularies, StartTranscriptionJob | ### 物联网 | 服务 | API 调用 | |---|---| | IoT | ListThings, ListCertificates, ListPolicies |
## 支持项目 如果您觉得这个项目有帮助,请考虑支持其开发: [![请我喝杯咖啡](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/yOd1JU9MQe) ## 许可证 本项目基于 [MIT 许可证](LICENSE) 授权。
标签:AWS, DevSecOps, DPI, DynamoDB, EC2, EKS, EVTX分析, Go, IaC, IAM, Lambda, Linux安全, RDS, Ruby工具, S3, 上游代理, 二进制发布, 云审计, 凭证枚举, 原子扫描, 反取证, 安全评估, 开源工具, 数据展示, 日志审计, 权限扫描, 权限边界, 红队, 足迹分析