0xj4f/aws-enumerator
GitHub: 0xj4f/aws-enumerator
受 BloodHound 启发的 AWS 攻击图工具,通过枚举资源、分析 IAM 策略和映射信任关系,帮助安全人员发现并可视化云环境中的提权路径。
Stars: 0 | Forks: 0
# AWS 枚举器
一个受 [BloodHound](https://github.com/BloodHoundAD/BloodHound) 启发的 AWS 攻击图工具。枚举 AWS 资源,分析 IAM 策略以寻找提权路径,映射信任关系,并通过交互式图仪表盘可视化攻击面。
专为**进攻性安全**和**假设入侵场景**构建 — 你拥有某个 AWS 账户或一组 AWS 密钥的访问权限,并且你需要了解你能访问什么、能提权到什么,以及高价值目标在哪里。
## 功能
### 枚举
- **IAM** — 用户(访问密钥、MFA、控制台访问)、角色(信任策略)、组、托管策略(完整文档内容)、内联策略、权限边界、账户密码策略
- **S3** — 存储桶、策略、ACL、公共访问块、版本控制、加密、标签、日志、CORS、事件通知
- **EC2** — 实例及其元数据、实例配置文件、安全组、网络接口、IMDS 配置
- **VPC** — VPC、子网、路由表、互联网网关、NAT 网关、NACL、VPC 端点、对等连接
- **安全组** — 规则及关联的 ENI/实例资源
- **EKS / Kubernetes** — 集群、节点组、Fargate 配置文件、附加组件 + 每个集群的 K8s API 枚举(命名空间、pods、服务账户、RBAC 角色和绑定、密钥名称、服务、ingresses)
- **CloudTrail, CloudFront, WAF, Flow Logs**
### 策略分析
- **20 条提权检测规则** — CreatePolicyVersion, PassRole+Lambda, PassRole+EC2, PassRole+CloudFormation, AttachUserPolicy, CreateAccessKey, UpdateAssumeRolePolicy 等
- **10 条危险权限规则** — 通配符管理员、iam:*、s3:*、不受限制的 PassRole、对 * 的 kms:Decrypt 等
- **信任策略分析** — 跨账户信任、通配符主体、服务信任
- **S3 资源关系** — IAM 到存储桶的访问(CAN_READ, CAN_WRITE, CAN_ADMIN, FULL_ACCESS)、存储桶策略授权、公共访问检测、KMS 加密链接、事件通知目标
- **EC2 计算关系** — 实例到角色的映射、谁可以管理/终止/连接到实例、安全组暴露、IMDS 漏洞检测、SG 到 SG 的引用
- **Kubernetes 关系** — **IRSA 桥接**(ServiceAccount → 通过 `eks.amazonaws.com/role-arn` 注解映射的 IAM 角色)、pod 到 SA 的映射、RBAC 绑定、挂载的密钥、service/ingress 暴露、特权容器发现、cluster-admin 检测
### 仪表盘
- 由 Cytoscape.js 驱动的**交互式攻击图**,支持 Dijkstra 最短路径算法
- **节点类型** — 用户、角色、组、策略、EC2、S3、安全组、KMS 密钥、Lambda、SQS、SNS、EKS 集群、pods、服务账户、K8s 角色、K8s 密钥、services、ingresses
- 用于攻击路径成本建模的**加权边**(直接访问 = 0, PassRole 链 = 2, SSRF = 3, 跨账户 = 4)
- **焦点模式** — 点击一个节点以将其及其关系单独隔离出来
- **已控制/已攻陷标记** — 标记你控制的节点并查找从它们出发的路径
- **“发现所有路径”** — 自动查找从每个实体到每个高价值目标的所有最短路径
- **攻击路径回放** — 以可调节的速度自动播放发现的路径
- **可调整大小的面板**、搜索、布局切换、节点/边过滤器
- 通过 `.zip` 文件加载报告(拖放或文件选择器)
### 多区域
- `--all` 标志枚举所有已启用的区域(通过 `ec2:DescribeRegions` 自动发现)
- 全局服务(IAM、S3、CloudFront)仅枚举一次;区域服务则按区域枚举
- `--zip` 标志将报告打包以便于传输
## 快速开始
### 通过 pipx 安装(推荐)
```
pipx install git+https://github.com/0xj4f/aws-enumerator.git
```
或者本地安装以进行开发:
```
git clone https://github.com/0xj4f/aws-enumerator.git
cd aws-enumerator
pip install -e .
```
然后运行:
```
aws-enumerator --region eu-west-2
aws-enumerator --all --zip
```
### 使用 Docker 运行
```
# 使用环境变量
docker run --rm \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN \
-v $(pwd)/reports:/app/reports \
0xj4f/aws-enumerator:latest --region eu-west-2
# 使用 AWS credentials 文件
docker run --rm \
-v ~/.aws:/root/.aws \
-v $(pwd)/reports:/app/reports \
0xj4f/aws-enumerator:latest --region eu-west-2 --zip
```
### 直接运行(不安装)
```
git clone https://github.com/0xj4f/aws-enumerator.git
cd aws-enumerator
pip install boto3
python app/main.py --region eu-west-2
```
## 用法
```
aws-enumerator [--region REGION] [--all] [--zip]
```
| 标志 | 描述 |
|------|-------------|
| `--region` | 要枚举的 AWS 区域(默认:`eu-west-2`) |
| `--all` | 枚举所有已启用的区域 |
| `--zip` | 创建报告的 zip 归档文件 |
### 仪表盘
枚举完成后,打开仪表盘并加载你的报告:
```
open dashboard/index.html
```
将 `.zip` 文件拖放到仪表盘上或点击“加载报告”。
**可视化层级结构** — 查看角色、策略、实例和存储桶如何在整个账户中连接。

**识别高连接性节点** — 找出具有最多关系和暴露面的角色与入口点。

**发现攻击路径** — 从任何已攻陷节点到高价值目标的 Dijkstra 最短路径。

## 报告结构
### 单一区域
```
reports/{date}/{account}/{region}/
iam/ # Users, roles, groups, policies, inline policies, policy documents
s3/ # Buckets, policies, ACLs, encryption, notifications
ec2/ # Instances
vpc/ # VPCs, subnets, route tables, gateways
sg/ # Security groups
eks/ # Clusters, node groups, Fargate profiles, addons
k8s/ # Per-cluster K8s API data (pods, SAs, RBAC, secrets, services, ingresses)
cloudtrail/ # Trails
cloudfront/ # Distributions
waf/ # WebACLs, rule groups, IP sets
flowlogs/ # VPC flow logs
analysis/ # findings.json, permission_map.json, trust_relationships.json,
# s3_relationships.json, ec2_relationships.json,
# k8s_relationships.json, summary.json
manifest.json
```
### 所有区域(`--all`)
```
reports/{date}/{account}/
global/ # IAM, S3, CloudFront, analysis
us-east-1/ # Regional services
eu-west-2/ # Regional services
...
manifest.json
```
## AWS 凭证
此工具需要有效的 AWS 凭证。使用任何标准方法:
```
# Assume a role
aws sts assume-role \
--role-arn arn:aws:iam::ACCOUNT:role/ROLE_NAME \
--role-session-name enum-session
# 导出凭证
eval "$(aws configure export-credentials --format env)"
# 或使用 SSO
eval "$(aws-sso eval -S profile-name --profile profile-name)"
```
## 项目结构
```
aws-enumerator/
app/
main.py # CLI entry point
components/
iam.py # IAM enumeration (enriched)
s3.py # S3 enumeration
ec2.py # EC2 enumeration
vpc.py # VPC enumeration
sg.py # Security groups
eks.py # EKS clusters, node groups, Fargate, addons
k8s.py # Per-cluster Kubernetes API enumeration
cloudtrail.py # CloudTrail
cloudfront.py # CloudFront
waf.py # WAF
flowlogs.py # Flow logs
policy_parser.py # Policy analysis & relationship engine
utils/
aws_utils.py # Boto3 session helpers
eks_auth.py # STS-based K8s API token generator
regions.json # AWS regions reference
dashboard/
index.html # Attack graph dashboard (single file)
docs/
attack_paths.md # Attack scenarios & path field guide
Dockerfile
pyproject.toml
requirements.txt
LICENSE
```
## 文档
- **[docs/attack_paths.md](docs/attack_paths.md)** — 攻击场景实战指南。将起始位置(被攻陷的 EC2、pod、泄露的密钥等)映射到可能的提权路径,并提供边缘类型转换和仪表盘使用技巧。
标签:AWS, BloodHound, DPI, EC2, EKS, IaC, IAM分析, Modbus, S3, StruQ, VPC, 云渗透测试, 云环境攻防, 云资产管理, 仪表盘, 信任关系, 协议分析, 反取证, 威胁建模, 子域名变形, 安全评估, 攻击图, 攻击面可视化, 数据展示, 权限提升, 红队, 网络安全, 请求拦截, 进攻性安全, 逆向工具, 隐私保护