发现了一组 AWS 凭证,却不知道它可能拥有哪些权限?
$ ./enumerate-iam.py --access-key AKIA... --secret-key StF0q...
2019-05-10 15:57:58,447 - 21345 - [INFO] Starting permission enumeration for access-key-id "AKIA..."
2019-05-10 15:58:01,532 - 21345 - [INFO] Run for the hills, get_account_authorization_details worked!
2019-05-10 15:58:01,537 - 21345 - [INFO] -- {
"RoleDetailList": [
{
"Tags": [],
"AssumeRolePolicyDocument": {
"Version": "2008-10-17",
"Statement": [
{
...
2019-05-10 15:58:26,709 - 21345 - [INFO] -- gamelift.list_builds() worked!
2019-05-10 15:58:26,850 - 21345 - [INFO] -- cloudformation.list_stack_sets() worked!
2019-05-10 15:58:26,982 - 21345 - [INFO] -- directconnect.describe_locations() worked!
2019-05-10 15:58:27,021 - 21345 - [INFO] -- gamelift.describe_matchmaking_rule_sets() worked!
2019-05-10 15:58:27,311 - 21345 - [INFO] -- sqs.list_queues() worked!
现在你知道了!
enumerate-iam.py 会尝试暴力枚举 IAM 策略所允许的所有 API 调用。
此工具执行的所有调用都是非破坏性的(仅执行 get* 和 list* 调用)。
git clone [email protected]:andresriancho/enumerate-iam.git
cd enumerate-iam/
pip install -r requirements.txt
此软件的设计初衷是便于与其他工具集成,只需导入主函数并提供所需参数即可:
from enumerate_iam.main import enumerate_iam
enumerate_iam(access_key,
secret_key,
session_token,
region)
输出将以 Python 字典的形式包含所有枚举到的权限信息。
在编写 enumerate-iam.py 之前,我尝试过几个执行相同任务的工具。
最终决定自己编写,因为其他工具:
权限枚举期间要执行的 API 调用存储在 enumerate_iam/bruteforce_tests.py 中,这是一个由 enumerate_iam/generate_bruteforce_tests.py 使用 aws-sdk-js 库中可用的 API 文档生成的 Python dict()。
AWS 每个季度都会发布新服务,为确保此工具能发现所有现有权限,请运行:
cd enumerate_iam/
git clone https://github.com/aws/aws-sdk-js.git
python generate_bruteforce_tests.py
rm -rf aws-sdk-js
此工具作为 Internet-Scale Analysis of AWS Cognito Security 研究的一部分发布。在此研究期间,还使用了 cc-lambda 工具从 Common Crawl 数据中提取信息。
初始代码发布在此 gist 中,并在多个方面进行了改进: