AWS - EC2 Privesc
EC2
EC2に関する詳細情報は以下を確認してください:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
攻撃者はIAMロールをアタッチしたインスタンスを作成し、そのインスタンスにアクセスしてメタデータエンドポイントからIAMロールの資格情報を盗むことができる。
SSH経由でのアクセス
作成した sshキー(--key-name
)を使用して新しいインスタンスを起動し、その後sshで接続します(新しいものを作成する場合はec2:CreateKeyPair
の権限が必要になることがあります)。
ユーザーデータによるrev shellへのアクセス
ユーザーデータ(--user-data
)を使用して新しいインスタンスを起動すると、rev shellを送信します。この方法ではセキュリティグループを指定する必要はありません。
GuradDutyを使用する場合、インスタンスの外でIAMロールの資格情報を使用する際には注意してください:
AWS - GuardDuty Enum潜在的な影響: 既存のインスタンスプロファイルに添付された任意のEC2ロールへの直接的な権限昇格。
ECSへの権限昇格
この権限セットを使用すると、EC2インスタンスを作成し、ECSクラスター内に登録することもできます。この方法で、ECS サービスは、アクセス権のあるEC2インスタンス内で実行され、そのサービス(Dockerコンテナ)に侵入し、添付されたECSロールを盗むことができます。
新しいEC2インスタンスでECSサービスを強制的に実行する方法を学ぶには、次を確認してください:
AWS - ECS Privesc新しいインスタンスを作成できないが、ecs:RegisterContainerInstance
の権限がある場合、クラスタ内にインスタンスを登録し、コメントされた攻撃を実行できるかもしれません。
潜在的な影響: タスクに付随するECSロールへの直接的な権限昇格。
iam:PassRole
、 iam:AddRoleToInstanceProfile
iam:PassRole
、 iam:AddRoleToInstanceProfile
前のシナリオと同様に、これらの権限を持つ攻撃者は侵害されたインスタンスのIAMロールを変更し、新しい資格情報を盗むことができます。
インスタンスプロファイルは1つのロールしか持てないため、インスタンスプロファイルがすでにロールを持っている(一般的なケース)場合、**iam:RemoveRoleFromInstanceProfile
**も必要です。
もしインスタンスプロファイルにロールがあり、攻撃者がそれを削除できない場合、別の回避策があります。彼はロールのないインスタンスプロファイルを見つけるか、新しいものを作成することができます(iam:CreateInstanceProfile
)、そのインスタンスプロファイルにロールを追加し(前述の通り)、インスタンスプロファイルを関連付けることができます。
インスタンスがインスタンスプロファイルを持っていない場合(
ec2:AssociateIamInstanceProfile
)*
潜在的影響: 別のEC2ロールへの直接的な権限昇格(AWS EC2インスタンスを侵害し、いくつかの追加権限または特定のインスタンスプロファイルの状態を持っている必要があります)。
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)これらの権限を持つことで、インスタンスに関連付けられたインスタンスプロファイルを変更することが可能です。攻撃者がすでにインスタンスにアクセスしている場合、関連付けられたインスタンスプロファイルを変更することで、より多くのインスタンスプロファイルロールの資格情報を盗むことができます。
インスタンスプロファイルがある場合、インスタンスプロファイルを削除することができ(
ec2:DisassociateIamInstanceProfile
)、それを関連付けることができます。*
または、侵害されたインスタンスの インスタンスプロファイル を 置き換える (
ec2:ReplaceIamInstanceProfileAssociation
)。 *
潜在的な影響: 別のEC2ロールへの直接的な権限昇格(AWS EC2インスタンスを侵害し、いくつかの追加権限または特定のインスタンスプロファイルの状態を持っている必要があります)。
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
およびiam:PassRole
の権限を持つ攻撃者は、EC2ロールが付与された Spot Instanceをリクエストし、ユーザーデータにrev shellを含めることができます。
インスタンスが実行されると、彼はIAMロールを盗むことができます。
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
を持つ攻撃者は、インスタンスの属性を変更できます。その中で、ユーザーデータを変更することができ、これによりインスタンスが任意のデータを実行することが可能になります。これを利用してEC2インスタンスへのrev shellを取得することができます。
属性はインスタンスが停止している間のみ変更できるため、ec2:StopInstances
と ec2:StartInstances
の権限が必要です。
潜在的な影響: 作成されたインスタンスに付随する任意のEC2 IAMロールへの直接的な権限昇格。
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
および ec2:ModifyLaunchTemplate
の権限を持つ攻撃者は、ユーザーデータにrev shellを含む新しいLaunch Templateバージョンを作成し、デフォルトバージョンを変更し、そのLaunch Templateを使用する任意のAutoscalerグループが最新またはデフォルトバージョンを使用するように構成されている場合、そのテンプレートを使用してインスタンスを再実行し、rev shellを実行します。
潜在的な影響: 別のEC2ロールへの直接的な権限昇格。
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
の権限を持つ攻撃者は、IAMロールとrev shellをユーザーデータ内に含むLaunch Configurationを作成し、その設定からオートスケーリンググループを作成して、rev shellがIAMロールを盗むのを待つことができます。
潜在的な影響: 別のEC2ロールへの直接的な権限昇格。
!autoscaling
!autoscaling
権限のセット ec2:CreateLaunchTemplate
と autoscaling:CreateAutoScalingGroup
は、IAMロールへの権限を昇格させるには不十分です。なぜなら、Launch ConfigurationまたはLaunch Templateで指定されたロールをアタッチするには、iam:PassRole
と ec2:RunInstances
の権限が必要だからです(これは知られている権限昇格です)。
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
の権限を持つ攻撃者は、ユーザーにsshキーを追加し、それを使用してアクセスすることができます(インスタンスへのsshアクセスがある場合)または権限を昇格させることができます。
潜在的な影響: 実行中のインスタンスに接続されたEC2 IAMロールへの直接的な権限昇格。
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
の権限を持つ攻撃者は、シリアル接続にsshキーを追加することができます。シリアルが有効でない場合、攻撃者はそれを有効にするために**ec2:EnableSerialConsoleAccess
** の権限が必要です。
シリアルポートに接続するためには、マシン内のユーザーのユーザー名とパスワードを知っている必要があります。
この方法は、悪用するためにユーザー名とパスワードを知っている必要があるため、特にプライベートエスカレーションにはあまり役立ちません。
潜在的な影響: (非常に証明が難しい)実行中のインスタンスに添付されたEC2 IAMロールへの直接的なプライベートエスカレーション。
describe-launch-templates
,describe-launch-template-versions
describe-launch-templates
,describe-launch-template-versions
起動テンプレートにはバージョン管理があるため、ec2:describe-launch-templates
および ec2:describe-launch-template-versions
権限を持つ攻撃者は、ユーザーデータに存在する資格情報などの機密情報を発見するためにこれらを悪用することができます。これを達成するために、以下のスクリプトは利用可能な起動テンプレートのすべてのバージョンをループします:
上記のコマンドでは、特定のパターン(aws_|password|token|api
)を指定していますが、他の種類の機密情報を検索するために異なる正規表現を使用することもできます。
aws_access_key_id
と aws_secret_access_key
を見つけたと仮定すると、これらの資格情報を使用して AWS に認証できます。
潜在的な影響: IAM ユーザーへの直接的な権限昇格。
参考文献
Last updated