AWS - Step Functions Enum
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Step Functions
AWS Step Functions to usługa przepływu pracy, która umożliwia koordynację i orkiestrację wielu usług AWS w bezserwerowych przepływach pracy. Korzystając z AWS Step Functions, możesz projektować i uruchamiać przepływy pracy, które łączą różne usługi AWS, takie jak AWS Lambda, Amazon S3, Amazon DynamoDB i wiele innych, w sekwencji kroków. Ta usługa orkiestracji zapewnia wizualny interfejs przepływu pracy i oferuje możliwości maszyny stanów, pozwalając na definiowanie każdego kroku przepływu pracy w sposób deklaratywny przy użyciu opartego na JSON Amazon States Language (ASL).
Kluczowe pojęcia
Standardowe vs. Ekspresowe przepływy pracy
AWS Step Functions oferuje dwa typy przepływów pracy maszyny stanów: Standardowy i Ekspresowy.
- Standardowy przepływ pracy: Ten domyślny typ przepływu pracy jest zaprojektowany dla długoterminowych, trwałych i audytowalnych procesów. Obsługuje wykonanie dokładnie raz, zapewniając, że zadania są uruchamiane tylko raz, chyba że określono ponowne próby. Jest idealny dla przepływów pracy wymagających szczegółowej historii wykonania i może działać przez maksymalnie rok.
- Ekspresowy przepływ pracy: Ten typ jest idealny dla zadań o dużej objętości i krótkim czasie trwania, działających do pięciu minut. Obsługują wykonanie przynajmniej raz, odpowiednie dla idempotentnych zadań, takich jak przetwarzanie danych. Te przepływy pracy są zoptymalizowane pod kątem kosztów i wydajności, naliczając opłaty na podstawie wykonania, czasu trwania i użycia pamięci.
Stany
Stany są podstawowymi jednostkami maszyn stanów. Definiują poszczególne kroki w przepływie pracy, mogąc wykonywać różnorodne funkcje w zależności od ich typu:
- Zadanie: Wykonuje pracę, często korzystając z usługi AWS, takiej jak Lambda.
- Wybór: Podejmuje decyzje na podstawie wejścia.
- Niepowodzenie/Sukces: Kończy wykonanie z niepowodzeniem lub sukcesem.
- Przekazanie: Przekazuje dane wejściowe do wyjścia lub wstrzykuje dane.
- Czekanie: Opóźnia wykonanie na określony czas.
- Równolegle: Inicjuje równoległe gałęzie.
- Mapa: Dynamicznie iteruje kroki nad elementami.
Zadanie
Stan Zadanie reprezentuje pojedynczą jednostkę pracy wykonywaną przez maszynę stanów. Zadania mogą wywoływać różne zasoby, w tym działania, funkcje Lambda, usługi AWS lub interfejsy API stron trzecich.
- Działania: Niestandardowi pracownicy, którymi zarządzasz, odpowiedni dla długoterminowych procesów.
- Zasób:
arn:aws:states:region:account:activity:name. - Funkcje Lambda: Wykonuje funkcje AWS Lambda.
- Zasób:
arn:aws:lambda:region:account:function:function-name. - Usługi AWS: Integruje się bezpośrednio z innymi usługami AWS, takimi jak DynamoDB lub S3.
- Zasób:
arn:partition:states:region:account:servicename:APIname. - Zadanie HTTP: Wywołuje interfejsy API stron trzecich.
- Pole zasobu:
arn:aws:states:::http:invoke. Następnie należy podać szczegóły konfiguracji punktu końcowego API, takie jak adres URL API, metoda i szczegóły uwierzytelnienia.
Poniższy przykład pokazuje definicję stanu Zadanie, która wywołuje funkcję Lambda o nazwie HelloWorld:
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:<region>:<account-id>:function:HelloWorld"
},
"End": true
}
Wybór
Stan Choice dodaje logikę warunkową do przepływu pracy, umożliwiając podejmowanie decyzji na podstawie danych wejściowych. Ocenia określone warunki i przechodzi do odpowiedniego stanu na podstawie wyników.
- Porównanie: Każda reguła wyboru zawiera operator porównania (np.
NumericEquals,StringEquals), który porównuje zmienną wejściową z określoną wartością lub inną zmienną. - Pole Next: Stany wyboru nie obsługują pola
End, zamiast tego definiują stanNext, do którego należy przejść, jeśli porównanie jest prawdziwe.
Przykład stanu Choice:
{
"Variable": "$.timeStamp",
"TimestampEquals": "2000-01-01T00:00:00Z",
"Next": "TimeState"
}
Fail/Succeed
Stan Fail zatrzymuje wykonanie maszyny stanów i oznacza ją jako błąd. Służy do określenia nazwy błędu i przyczyny, dostarczając szczegóły dotyczące awarii. Ten stan jest terminalny, co oznacza, że kończy przepływ wykonania.
Stan Succeed zatrzymuje wykonanie pomyślnie. Zwykle jest używany do zakończenia przepływu pracy, gdy zostanie pomyślnie zakończony. Ten stan nie wymaga pola Next.
"FailState": {
"Type": "Fail",
"Error": "ErrorName",
"Cause": "Error details"
}
Pass
Stan Pass przekazuje swoje dane wejściowe do wyjścia, albo nie wykonując żadnej pracy, albo przekształcając dane wejściowe JSON za pomocą filtrów, a następnie przekazując przekształcone dane do następnego stanu. Jest przydatny do testowania i konstruowania maszyn stanowych, umożliwiając wstrzykiwanie statycznych danych lub ich przekształcanie.
"PassState": {
"Type": "Pass",
"Result": {"key": "value"},
"ResultPath": "$.newField",
"Next": "NextState"
}
Wait
Stan Wait opóźnia wykonanie maszyny stanów na określony czas. Istnieją trzy główne metody konfigurowania czasu oczekiwania:
- X Seconds: Stała liczba sekund do oczekiwania.
"WaitState": {
"Type": "Wait",
"Seconds": 10,
"Next": "NextState"
}
- Absolute Timestamp: Dokładny czas, do którego należy czekać.
"WaitState": {
"Type": "Wait",
"Timestamp": "2024-03-14T01:59:00Z",
"Next": "NextState"
}
- Dynamic Wait: Na podstawie wejścia przy użyciu
SecondsPathlubTimestampPath.
jsonCopiar código
"WaitState": {
"Type": "Wait",
"TimestampPath": "$.expirydate",
"Next": "NextState"
}
Parallel
Stan Parallel pozwala na jednoczesne wykonywanie wielu gałęzi zadań w ramach twojego przepływu pracy. Każda gałąź działa niezależnie i przetwarza swoją własną sekwencję stanów. Wykonanie czeka, aż wszystkie gałęzie zakończą się przed przejściem do następnego stanu. Jego kluczowe pola to:
- Branches: Tablica definiująca równoległe ścieżki wykonania. Każda gałąź to osobna maszyna stanów.
- ResultPath: Definiuje, gdzie (w wejściu) umieścić połączony wynik gałęzi.
- Retry and Catch: Konfiguracje obsługi błędów dla stanu równoległego.
"ParallelState": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "Task1",
"States": { ... }
},
{
"StartAt": "Task2",
"States": { ... }
}
],
"Next": "NextState"
}
Map
Stan Map umożliwia wykonanie zestawu kroków dla każdego elementu w zbiorze danych. Jest używany do równoległego przetwarzania danych. W zależności od tego, jak chcesz przetwarzać elementy zbioru danych, Step Functions oferuje następujące tryby:
- Inline Mode: Wykonuje podzbiór stanów dla każdego elementu tablicy JSON. Odpowiedni dla małych zadań z mniej niż 40 równoległymi iteracjami, uruchamiając każdą z nich w kontekście przepływu pracy, który zawiera stan
Map.
"MapState": {
"Type": "Map",
"ItemsPath": "$.arrayItems",
"ItemProcessor": {
"ProcessorConfig": {
"Mode": "INLINE"
},
"StartAt": "AddState",
"States": {
"AddState": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "arn:aws:lambda:<region>:<account-id>:function:add-function"
},
"End": true
}
}
},
"End": true
"ResultPath": "$.detail.added",
"ItemsPath": "$.added"
}
- Distributed Mode: Zaprojektowany do przetwarzania równoległego na dużą skalę z wysoką współbieżnością. Obsługuje przetwarzanie dużych zbiorów danych, takich jak te przechowywane w Amazon S3, umożliwiając wysoką współbieżność do 10,000 równoległych wykonania dziecięcych przepływów pracy, uruchamiając te dzieci jako osobne wykonania.
"DistributedMapState": {
"Type": "Map",
"ItemReader": {
"Resource": "arn:aws:states:::s3:getObject",
"Parameters": {
"Bucket": "my-bucket",
"Key": "data.csv"
}
},
"ItemProcessor": {
"ProcessorConfig": {
"Mode": "DISTRIBUTED",
"ExecutionType": "EXPRESS"
},
"StartAt": "ProcessItem",
"States": {
"ProcessItem": {
"Type": "Task",
"Resource": "arn:aws:lambda:region:account-id:function:my-function",
"End": true
}
}
},
"End": true
"ResultWriter": {
"Resource": "arn:aws:states:::s3:putObject",
"Parameters": {
"Bucket": "myOutputBucket",
"Prefix": "csvProcessJobs"
}
}
}
Versions and aliases
Step Functions umożliwia również zarządzanie wdrożeniami przepływów pracy za pomocą wersji i aliasów maszyn stanów. Wersja reprezentuje migawkę maszyny stanów, która może być wykonana. Aliasy służą jako wskaźniki do maksymalnie dwóch wersji maszyny stanów.
- Versions: Te niezmienne migawki maszyny stanów są tworzone z najnowszej rewizji tej maszyny stanów. Każda wersja jest identyfikowana przez unikalny ARN, który łączy ARN maszyny stanów z numerem wersji, oddzielonym dwukropkiem (
arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number). Wersje nie mogą być edytowane, ale możesz zaktualizować maszynę stanów i opublikować nową wersję lub użyć pożądanej wersji maszyny stanów. - Aliases: Te wskaźniki mogą odnosić się do maksymalnie dwóch wersji tej samej maszyny stanów. Można utworzyć wiele aliasów dla jednej maszyny stanów, z których każdy jest identyfikowany przez unikalny ARN skonstruowany przez połączenie ARN maszyny stanów z nazwą aliasu, oddzielonym dwukropkiem (
arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName). Aliasy umożliwiają kierowanie ruchu między jedną z dwóch wersji maszyny stanów. Alternatywnie, alias może wskazywać na jedną konkretną wersję maszyny stanów, ale nie na inne aliasy. Mogą być aktualizowane, aby przekierować do innej wersji maszyny stanów w razie potrzeby, ułatwiając kontrolowane wdrożenia i zarządzanie przepływem pracy.
Aby uzyskać bardziej szczegółowe informacje na temat ASL, sprawdź: Amazon States Language.
IAM Roles for State machines
AWS Step Functions wykorzystuje role AWS Identity and Access Management (IAM) do kontrolowania dostępu do zasobów i działań w ramach maszyn stanów. Oto kluczowe aspekty związane z bezpieczeństwem i rolami IAM w AWS Step Functions:
- Execution Role: Każda maszyna stanów w AWS Step Functions jest powiązana z rolą wykonawczą IAM. Ta rola definiuje, jakie działania maszyna stanów może wykonywać w Twoim imieniu. Gdy maszyna stanów przechodzi między stanami, które wchodzą w interakcję z usługami AWS (takimi jak wywoływanie funkcji Lambda, dostęp do DynamoDB itp.), przyjmuje tę rolę wykonawczą, aby wykonać te działania.
- Permissions: Rola wykonawcza IAM musi być skonfigurowana z uprawnieniami, które pozwalają na niezbędne działania w innych usługach AWS. Na przykład, jeśli Twoja maszyna stanów musi wywołać funkcje AWS Lambda, rola IAM musi mieć uprawnienia
lambda:InvokeFunction. Podobnie, jeśli musi zapisać do DynamoDB, odpowiednie uprawnienia (dynamodb:PutItem,dynamodb:UpdateItem, itp.) muszą być przyznane.
Enumeration
Polityka ReadOnlyAccess jest wystarczająca dla wszystkich poniższych działań enumeracyjnych.
# State machines #
## List state machines
aws stepfunctions list-state-machines
## Retrieve informatio about the specified state machine
aws stepfunctions describe-state-machine --state-machine-arn <value>
## List versions for the specified state machine
aws stepfunctions list-state-machine-versions --state-machine-arn <value>
## List aliases for the specified state machine
aws stepfunctions list-state-machine-aliases --state-machine-arn <value>
## Retrieve information about the specified state machine alias
aws stepfunctions describe-state-machine-alias --state-machine-alias-arn <value>
## List executions of a state machine
aws stepfunctions list-executions --state-machine-arn <value> [--status-filter <RUNNING | SUCCEEDED | FAILED | TIMED_OUT | ABORTED | PENDING_REDRIVE>] [--redrive-filter <REDRIVEN | NOT_REDRIVEN>]
## Retrieve information and relevant metadata about a state machine execution (output included)
aws stepfunctions describe-execution --execution-arn <value>
## Retrieve information about the state machine associated to the specified execution
aws stepfunctions describe-state-machine-for-execution --execution-arn <value>
## Retrieve the history of the specified execution as a list of events
aws stepfunctions get-execution-history --execution-arn <value> [--reverse-order | --no-reverse-order] [--include-execution-data | --no-include-execution-data]
## List tags for the specified step Functions resource
aws stepfunctions list-tags-for-resource --resource-arn <value>
## Validate the definition of a state machine without creating the resource
aws stepfunctions validate-state-machine-definition --definition <value> [--type <STANDARD | EXPRESS>]
# Activities #
## List existing activities
aws stepfunctions list-activities
## Retrieve information about the specified activity
aws stepfunctions describe-activity --activity-arn <value>
# Map Runs #
## List map runs of an execution
aws stepfunctions list-map-runs --execution-arn <value>
## Provide information about the configuration, progress and results of a Map Run
aws stepfunctions describe-map-run --map-run-arn <value>
## Lists executions of a Map Run
aws stepfunctions list-executions --map-run-arn <value> [--status-filter <RUNNING | SUCCEEDED | FAILED | TIMED_OUT | ABORTED | PENDING_REDRIVE>] [--redrive-filter <REDRIVEN | NOT_REDRIVEN>]
Privesc
Na poniższej stronie możesz sprawdzić, jak nadużyć uprawnień Step Functions, aby eskalować uprawnienia:
Post Exploitation
AWS - Step Functions Post Exploitation
Persistence
AWS - Step Functions Persistence
References
- https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstepfunctions.html
- https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html
- https://states-language.net/spec.html
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

