AWS - IAM Post Exploitation

HackTricksをサポートする

IAM

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

混乱した代理人の問題

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

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

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

例:

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

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

予期しない信頼

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

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

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

サービスを主体として

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

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

S3をプリンシパルとして

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

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

サポートされていません

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

混乱した代理人の問題を回避する一般的な方法は、AWS:SourceArnを使用して起源ARNをチェックする条件を使用することです。しかし、一部のサービスはそれをサポートしていない可能性があります(いくつかの情報源によるとCloudTrailなど)。

参考文献

HackTricksをサポートする

Last updated