多云 IAM 权限枚举工具。目前支持:
Cliam 是一个简单的云权限识别工具。CLI 包含两个主要组件。枚举的权限大多是 list、describe 或 get 权限。
enumerate 用于枚举特定权限(推荐)下载最新发布版。DEV 标签表示当前版本但不稳定。
若要在本地构建二进制文件,请进入 cli 目录并运行 make dev
Cliam 通过服务常用的环境变量或从 CLI 传递常用标志来使用凭证。
强烈建议设置命令补全,因为大多数 enumerate 选项需要指定具体内容。 要生成补全,请使用 cliam completion [shell],并根据 shell 的补全目录进行设置。
Usage:
cliam [command]
Available Commands:
aws 枚举 AWS 凭证的权限。
azure 枚举 Azure 凭证的权限。
completion 为指定 shell 生成自动补全脚本
firebase 枚举 Firebase 权限。
gcp 枚举 GCP 服务账号的权限。
help 关于任意命令的帮助
version 显示版本和构建信息
Flags:
-h, --help 帮助信息
--max-threads int 使用的最大线程数。(默认 5)
--request-timeout int 每个请求的超时时间(秒)。(默认 5)
--save-output 成功时保存输出到文件
-v, --verbose 启用详细输出。
使用 AWS REST API,通过传入的凭证发起签名请求。这极大提升了速度,但也增加了维护新权限的难度。扩展性问题在于 AWS 在服务级别使用了 3 到 4 种不同的请求类型。
支持从 AWS 配置文件、标志或默认 AWS 环境变量(如 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 以及可选的 AWS_SESSION_TOKEN)获取凭证。
❯❯ cliam aws
枚举 AWS 凭证的权限。
Usage:
cliam aws [command]
Available Commands:
enumerate 枚举指定 AWS 资源的权限。
service-group 枚举 AWS 资源组的权限。
Flags:
--access-key-id string AWS 访问密钥 ID
-h, --help 帮助信息
--known-value stringToString AWS 资源名称。设置已知资源名称后,会额外枚举需要指定资源的权限。(默认 [])
--profile string AWS 配置文件。设置后,access-key-id、secret-access-key 和 session-token 将被忽略。
--region string AWS 区域 (默认 "us-east-1")
--secret-access-key string AWS 秘密访问密钥
--session-json string AWS 会话 JSON 文件。此标志尝试从指定文件读取会话信息。适用于临时凭证。
--session-token string AWS 会话令牌
Global Flags:
--max-threads int 使用的最大线程数。(默认 5)
--request-timeout int 每个请求的超时时间(秒)。(默认 5)
-v, --verbose 启用详细输出。
AWS 版 Cliam 还支持枚举某些需要已知值的权限。例如,使用 awscli 时,可以通过 aws lambda get-function --function-name <函数名> 获取函数。
这直接对应到 Cliam 中,我们可以这样使用:
cliam aws enumerate lambda --known-value function-name=<函数名>
这会枚举所有以 function-name 为有效参数的 lambda 权限。它也适用于其他 AWS 资源。
从 AWS 配置文件暴力枚举所有 serverless 资源
❯❯ cliam aws service-group serverless --profile=my-profile
使用临时会话令牌检查所有 ec2 权限
❯❯ cliam aws enumerate ec2 --session-json=creds.json
其中 creds.json 内容为
{
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIA...",
"SecretAccessKey" : "...",
"Token" : "...",
}
枚举 s3、iam 和 ec2 的权限
❯❯ cliam aws enumerate s3 iam ec2
GCP 支持从特定的服务账号 JSON 文件进行枚举。同时也支持从 GCP 环境变量 。GOOGLE_APPLICATION_CREDENTIALS 和 CLOUDSDK_CORE_PROJECT 获取凭证
由于 GCP 枚举有两种模式,如果启用了 cloudresourcemanager,请使用 enumerate;否则使用 rest 枚举特定权限。
cliam gcp --help
枚举 GCP 服务账号的权限。
Usage:
cliam gcp [command]
Available Commands:
bruteforce 枚举所有 GCP 权限
enumerate 枚举指定的 GCP 权限
rest 使用 REST API 枚举 GCP 权限
Flags:
-h, --help 帮助信息
--project-id string GCP 项目 ID
--region string GCP 区域 (默认 "us-central1")
--service-account string GCP 服务账号路径
--zone string GCP 可用区 (默认 "us-central1-a")
Global Flags:
--max-threads int 使用的最大线程数。(默认 5)
--request-timeout int 每个请求的超时时间(秒)。(默认 10)
使用 "cliam gcp [command] --help" 查看命令的更多信息。
Azure 枚举支持多种认证方式,包括服务主体(通过客户端 ID 和机密)、证书 MSI(通过 MSI 令牌)或默认认证。它还支持所有常见的 Azure 环境变量:
❯❯ cliam azure
枚举 Azure 凭证的权限。
大多数情况下,需要有效的 Azure 订阅 ID。如果未提供,CLI 会尝试查找可用的订阅并使用第一个。
Usage:
cliam azure [command]
Available Commands:
access-token 获取用于 REST API 的访问令牌
enumerate 枚举指定 Azure 资源的权限。
service 枚举指定 Azure 服务组的权限。
subscriptions 列出所有订阅
cliam 支持两个环境变量来显示调试输出: