AWS - IAM ポストエクスプロイテーション

Reading time: 6 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

IAM

IAM アクセスに関する詳細情報:

AWS - IAM, Identity Center & SSO Enum

混乱した代理人問題

もしあなたが 外部アカウント (A) にあなたのアカウントの ロール へのアクセスを許可すると、あなたは その外部アカウントに正確にアクセスできる人が誰かについての可視性がゼロ になるでしょう。これは問題です。なぜなら、別の外部アカウント (B) が外部アカウント (A) にアクセスできる場合、Bもあなたのアカウントにアクセスできる可能性があるからです

したがって、外部アカウントがあなたのアカウントのロールにアクセスすることを許可する際には、ExternalId を指定することが可能です。これは、外部アカウント (A) が あなたの組織のロールを引き受けるために指定する必要がある "秘密" の文字列です。外部アカウント B はこの文字列を知らないため、A にアクセスできても、あなたのロールにアクセスすることはできません

ただし、この ExternalId の "秘密" は 秘密ではありません。IAM のロール引き受けポリシーを 読むことができる人は誰でもそれを見ることができます。しかし、外部アカウント A がそれを知っていて、外部アカウント B がそれを知らない限り、B が A を悪用してあなたのロールにアクセスすることを防ぎます

例:

json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "Example Corp's AWS Account ID"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "12345"
}
}
}
}

warning

攻撃者が混乱した代理人を悪用するには、現在のアカウントのプリンシパルが他のアカウントのロールを偽装できるかどうかを何らかの方法で見つける必要があります。

予期しない信頼

プリンシパルとしてのワイルドカード

json
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": { "AWS": "*" }
}

このポリシーはすべてのAWSがロールを引き受けることを許可します。

サービスを主体として

json
{
"Action": "lambda:InvokeFunction",
"Effect": "Allow",
"Principal": { "Service": "apigateway.amazonaws.com" },
"Resource": "arn:aws:lambda:000000000000:function:foo"
}

このポリシーは任意のアカウントが自分のapigatewayを設定してこのLambdaを呼び出すことを許可します。

S3をプリンシパルとして

json
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}

S3バケットがプリンシパルとして指定されている場合、S3バケットにはアカウントIDがないため、バケットを削除し、攻撃者が自分のアカウントで作成した場合、彼らはこれを悪用することができます。

サポートされていません

json
{
"Effect": "Allow",
"Principal": { "Service": "cloudtrail.amazonaws.com" },
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}

Confused Deputyの問題を回避する一般的な方法は、AWS:SourceArnを使用して起源ARNを確認する条件を使用することです。しかし、一部のサービスはそれをサポートしていない可能性があります(いくつかの情報源によるとCloudTrailのように)。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする