AWS - Step Functions Enum
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Step Functions
AWS Step Functions είναι μια υπηρεσία ροής εργασιών που σας επιτρέπει να συντονίζετε και να οργανώνετε πολλές υπηρεσίες AWS σε serverless ροές εργασιών. Χρησιμοποιώντας το AWS Step Functions, μπορείτε να σχεδιάσετε και να εκτελέσετε ροές εργασιών που συνδέουν διάφορες υπηρεσίες AWS όπως AWS Lambda, Amazon S3, Amazon DynamoDB και πολλές άλλες, σε μια ακολουθία βημάτων. Αυτή η υπηρεσία ορχήστρωσης παρέχει μια οπτική διεπαφή ροής εργασιών και προσφέρει δυνατότητες μηχανής καταστάσεων, επιτρέποντάς σας να ορίσετε κάθε βήμα της ροής εργασιών με δηλωτικό τρόπο χρησιμοποιώντας τη γλώσσα Amazon States Language (ASL) που βασίζεται σε JSON.
Key concepts
Standard vs. Express Workflows
Το AWS Step Functions προσφέρει δύο τύπους ροών εργασιών μηχανής καταστάσεων: Standard και Express.
- Standard Workflow: Αυτός ο προεπιλεγμένος τύπος ροής εργασιών έχει σχεδιαστεί για διαδικασίες που διαρκούν πολύ, είναι ανθεκτικές και ελέγξιμες. Υποστηρίζει ακριβώς-μία εκτέλεση, διασφαλίζοντας ότι οι εργασίες εκτελούνται μόνο μία φορά εκτός αν καθοριστούν επαναλήψεις. Είναι ιδανικό για ροές εργασιών που χρειάζονται λεπτομερή ιστορικό εκτέλεσης και μπορεί να εκτελείται για έως και ένα έτος.
- Express Workflow: Αυτός ο τύπος είναι ιδανικός για εργασίες υψηλού όγκου και σύντομης διάρκειας, εκτελούμενες έως πέντε λεπτά. Υποστηρίζουν τουλάχιστον-μία εκτέλεση, κατάλληλο για ιδεατές εργασίες όπως η επεξεργασία δεδομένων. Αυτές οι ροές εργασιών είναι βελτιστοποιημένες για κόστος και απόδοση, χρεώνοντας με βάση τις εκτελέσεις, τη διάρκεια και τη χρήση μνήμης.
States
Οι καταστάσεις είναι οι βασικές μονάδες των μηχανών καταστάσεων. Ορίζουν τα ατομικά βήματα μέσα σε μια ροή εργασιών, ικανές να εκτελούν μια ποικιλία λειτουργιών ανάλογα με τον τύπο τους:
- Task: Εκτελεί μια εργασία, συχνά χρησιμοποιώντας μια υπηρεσία AWS όπως η Lambda.
- Choice: Παίρνει αποφάσεις με βάση την είσοδο.
- Fail/Succeed: Τερματίζει την εκτέλεση με αποτυχία ή επιτυχία.
- Pass: Μεταφέρει την είσοδο στην έξοδο ή εισάγει δεδομένα.
- Wait: Καθυστερεί την εκτέλεση για μια καθορισμένη χρονική περίοδο.
- Parallel: Ξεκινά παράλληλες διακλαδώσεις.
- Map: Δυναμικά επαναλαμβάνει βήματα σε αντικείμενα.
Task
Μια κατάσταση Task αντιπροσωπεύει μια μοναδική μονάδα εργασίας που εκτελείται από μια μηχανή καταστάσεων. Οι εργασίες μπορούν να καλέσουν διάφορους πόρους, συμπεριλαμβανομένων δραστηριοτήτων, λειτουργιών Lambda, υπηρεσιών AWS ή APIs τρίτων.
- Activities: Προσαρμοσμένοι εργαζόμενοι που διαχειρίζεστε, κατάλληλοι για διαδικασίες που διαρκούν πολύ.
- Resource:
arn:aws:states:region:account:activity:name. - Lambda Functions: Εκτελεί λειτουργίες AWS Lambda.
- Resource:
arn:aws:lambda:region:account:function:function-name. - AWS Services: Ενσωματώνεται άμεσα με άλλες υπηρεσίες AWS, όπως το DynamoDB ή το S3.
- Resource:
arn:partition:states:region:account:servicename:APIname. - HTTP Task: Καλεί APIs τρίτων.
- Resource field:
arn:aws:states:::http:invoke. Στη συνέχεια, θα πρέπει να παρέχετε τις λεπτομέρειες διαμόρφωσης του API endpoint, όπως το URL του API, τη μέθοδο και τις λεπτομέρειες αυθεντικοποίησης.
Το παρακάτω παράδειγμα δείχνει έναν ορισμό κατάστασης Task που καλεί μια λειτουργία Lambda με όνομα HelloWorld:
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:<region>:<account-id>:function:HelloWorld"
},
"End": true
}
Επιλογή
Μια Choice κατάσταση προσθέτει λογική συνθήκης σε μια ροή εργασίας, επιτρέποντας αποφάσεις με βάση τα δεδομένα εισόδου. Αξιολογεί τις καθορισμένες συνθήκες και μεταβαίνει στην αντίστοιχη κατάσταση με βάση τα αποτελέσματα.
- Σύγκριση: Κάθε κανόνας επιλογής περιλαμβάνει έναν τελεστή σύγκρισης (π.χ.,
NumericEquals,StringEquals) που συγκρίνει μια μεταβλητή εισόδου με μια καθορισμένη τιμή ή μια άλλη μεταβλητή. - Πεδίο Επόμενου: Οι καταστάσεις επιλογής δεν υποστηρίζουν το πεδίο
End, αντίθετα, καθορίζουν την κατάστασηNextστην οποία θα μεταβούν αν η σύγκριση είναι αληθής.
Παράδειγμα κατάστασης Choice:
{
"Variable": "$.timeStamp",
"TimestampEquals": "2000-01-01T00:00:00Z",
"Next": "TimeState"
}
Αποτυχία/Επιτυχία
Μια Fail κατάσταση σταματά την εκτέλεση μιας μηχανής καταστάσεων και την επισημαίνει ως αποτυχία. Χρησιμοποιείται για να καθορίσει ένα όνομα σφάλματος και μια αιτία, παρέχοντας λεπτομέρειες σχετικά με την αποτυχία. Αυτή η κατάσταση είναι τερματική, που σημαίνει ότι τερματίζει τη ροή εκτέλεσης.
Μια Succeed κατάσταση σταματά την εκτέλεση με επιτυχία. Χρησιμοποιείται συνήθως για να τερματίσει τη ροή εργασίας όταν ολοκληρωθεί με επιτυχία. Αυτή η κατάσταση δεν απαιτεί ένα πεδίο Next.
"FailState": {
"Type": "Fail",
"Error": "ErrorName",
"Cause": "Error details"
}
Pass
Μια Pass κατάσταση μεταφέρει την είσοδό της στην έξοδό της είτε χωρίς να εκτελεί καμία εργασία είτε μετασχηματίζοντας την είσοδο JSON χρησιμοποιώντας φίλτρα, και στη συνέχεια μεταφέρει τα μετασχηματισμένα δεδομένα στην επόμενη κατάσταση. Είναι χρήσιμη για τη δοκιμή και την κατασκευή μηχανών καταστάσεων, επιτρέποντάς σας να εισάγετε στατικά δεδομένα ή να τα μετασχηματίσετε.
"PassState": {
"Type": "Pass",
"Result": {"key": "value"},
"ResultPath": "$.newField",
"Next": "NextState"
}
Wait
Μια Wait κατάσταση καθυστερεί την εκτέλεση της μηχανής καταστάσεων για μια καθορισμένη διάρκεια. Υπάρχουν τρεις κύριες μέθοδοι για να ρυθμίσετε τον χρόνο αναμονής:
- X Seconds: Ένας σταθερός αριθμός δευτερολέπτων για αναμονή.
"WaitState": {
"Type": "Wait",
"Seconds": 10,
"Next": "NextState"
}
- Absolute Timestamp: Μια ακριβής ώρα για αναμονή μέχρι.
"WaitState": {
"Type": "Wait",
"Timestamp": "2024-03-14T01:59:00Z",
"Next": "NextState"
}
- Dynamic Wait: Βασισμένο σε είσοδο χρησιμοποιώντας
SecondsPathήTimestampPath.
jsonCopiar código
"WaitState": {
"Type": "Wait",
"TimestampPath": "$.expirydate",
"Next": "NextState"
}
Parallel
Μια Parallel κατάσταση σας επιτρέπει να εκτελείτε πολλαπλά κλαδιά εργασιών ταυτόχρονα μέσα στη ροή εργασίας σας. Κάθε κλάδος εκτελείται ανεξάρτητα και επεξεργάζεται τη δική του ακολουθία καταστάσεων. Η εκτέλεση περιμένει μέχρι να ολοκληρωθούν όλα τα κλαδιά πριν προχωρήσει στην επόμενη κατάσταση. Τα κύρια πεδία της είναι:
- Branches: Ένας πίνακας που ορίζει τις παράλληλες διαδρομές εκτέλεσης. Κάθε κλάδος είναι μια ξεχωριστή μηχανή καταστάσεων.
- ResultPath: Ορίζει πού (στην είσοδο) να τοποθετηθεί η συνδυασμένη έξοδος των κλαδιών.
- Retry and Catch: Ρυθμίσεις διαχείρισης σφαλμάτων για την παράλληλη κατάσταση.
"ParallelState": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "Task1",
"States": { ... }
},
{
"StartAt": "Task2",
"States": { ... }
}
],
"Next": "NextState"
}
Χάρτης
Μια Map κατάσταση επιτρέπει την εκτέλεση ενός συνόλου βημάτων για κάθε στοιχείο σε ένα σύνολο δεδομένων. Χρησιμοποιείται για παράλληλη επεξεργασία δεδομένων. Ανάλογα με το πώς θέλετε να επεξεργαστείτε τα στοιχεία του συνόλου δεδομένων, οι Step Functions παρέχουν τους εξής τρόπους:
- Inline Mode: Εκτελεί ένα υποσύνολο καταστάσεων για κάθε στοιχείο JSON array. Κατάλληλο για μικρής κλίμακας εργασίες με λιγότερες από 40 παράλληλες επαναλήψεις, εκτελώντας καθεμία από αυτές στο πλαίσιο της ροής εργασίας που περιέχει την
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: Σχεδιασμένο για επεξεργασία μεγάλης κλίμακας με υψηλή ταυτόχρονη εκτέλεση. Υποστηρίζει την επεξεργασία μεγάλων συνόλων δεδομένων, όπως αυτά που αποθηκεύονται στο Amazon S3, επιτρέποντας υψηλή ταυτόχρονη εκτέλεση έως 10,000 παράλληλων εκτελέσεων παιδιών ροής εργασίας, εκτελώντας αυτά τα παιδιά ως ξεχωριστή εκτέλεση παιδιού.
"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"
}
}
}
Εκδόσεις και ψευδώνυμα
Οι Step Functions σας επιτρέπουν επίσης να διαχειρίζεστε τις αναπτύξεις ροών εργασίας μέσω εκδόσεων και ψευδωνύμων μηχανών καταστάσεων. Μια έκδοση αντιπροσωπεύει μια στιγμιότυπο μιας μηχανής κατάστασης που μπορεί να εκτελεστεί. Τα ψευδώνυμα λειτουργούν ως δείκτες σε έως δύο εκδόσεις μιας μηχανής κατάστασης.
- Εκδόσεις: Αυτά τα αμετάβλητα στιγμιότυπα μιας μηχανής κατάστασης δημιουργούνται από την πιο πρόσφατη αναθεώρηση αυτής της μηχανής κατάστασης. Κάθε έκδοση αναγνωρίζεται από έναν μοναδικό ARN που συνδυάζει τον ARN της μηχανής κατάστασης με τον αριθμό έκδοσης, χωρισμένο με άνω και κάτω τελεία (
arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number). Οι εκδόσεις δεν μπορούν να επεξεργαστούν, αλλά μπορείτε να ενημερώσετε τη μηχανή κατάστασης και να δημοσιεύσετε μια νέα έκδοση ή να χρησιμοποιήσετε την επιθυμητή έκδοση μηχανής κατάστασης. - Ψευδώνυμα: Αυτοί οι δείκτες μπορούν να αναφέρονται σε έως δύο εκδόσεις της ίδιας μηχανής κατάστασης. Πολλαπλά ψευδώνυμα μπορούν να δημιουργηθούν για μια μόνο μηχανή κατάστασης, καθένα αναγνωριζόμενο από έναν μοναδικό ARN που κατασκευάζεται συνδυάζοντας τον ARN της μηχανής κατάστασης με το όνομα ψευδωνύμου, χωρισμένο με άνω και κάτω τελεία (
arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName). Τα ψευδώνυμα επιτρέπουν τη δρομολόγηση της κίνησης μεταξύ μιας από τις δύο εκδόσεις μιας μηχανής κατάστασης. Εναλλακτικά, ένα ψευδώνυμο μπορεί να δείχνει σε μια συγκεκριμένη έκδοση της μηχανής κατάστασης, αλλά όχι σε άλλα ψευδώνυμα. Μπορούν να ενημερωθούν για να ανακατευθύνουν σε μια διαφορετική έκδοση της μηχανής κατάστασης όπως απαιτείται, διευκολύνοντας τις ελεγχόμενες αναπτύξεις και τη διαχείριση ροών εργασίας.
Για περισσότερες λεπτομέρειες σχετικά με το ASL, ελέγξτε: Amazon States Language.
IAM Ρόλοι για Μηχανές Καταστάσεων
Οι AWS Step Functions χρησιμοποιούν ρόλους AWS Identity and Access Management (IAM) για να ελέγχουν την πρόσβαση σε πόρους και ενέργειες εντός των μηχανών καταστάσεων. Ακολουθούν οι βασικές πτυχές που σχετίζονται με την ασφάλεια και τους ρόλους IAM στις AWS Step Functions:
- Ρόλος Εκτέλεσης: Κάθε μηχανή κατάστασης στις AWS Step Functions συνδέεται με έναν ρόλο εκτέλεσης IAM. Αυτός ο ρόλος καθορίζει ποιες ενέργειες μπορεί να εκτελεί η μηχανή κατάστασης εκ μέρους σας. Όταν μια μηχανή κατάστασης μεταβαίνει μεταξύ καταστάσεων που αλληλεπιδρούν με υπηρεσίες AWS (όπως η κλήση λειτουργιών Lambda, η πρόσβαση σε DynamoDB κ.λπ.), αναλαμβάνει αυτόν τον ρόλο εκτέλεσης για να εκτελέσει αυτές τις ενέργειες.
- Δικαιώματα: Ο ρόλος εκτέλεσης IAM πρέπει να είναι ρυθμισμένος με δικαιώματα που επιτρέπουν τις απαραίτητες ενέργειες σε άλλες υπηρεσίες AWS. Για παράδειγμα, αν η μηχανή κατάστασης χρειάζεται να καλέσει λειτουργίες AWS Lambda, ο ρόλος IAM πρέπει να έχει δικαιώματα
lambda:InvokeFunction. Ομοίως, αν χρειάζεται να γράψει σε DynamoDB, πρέπει να παραχωρηθούν κατάλληλα δικαιώματα (dynamodb:PutItem,dynamodb:UpdateItem, κ.λπ.).
Αρίθμηση
Η πολιτική ReadOnlyAccess είναι αρκετή για όλες τις παρακάτω ενέργειες αρίθμησης.
# 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
Στην παρακάτω σελίδα, μπορείτε να ελέγξετε πώς να καταχραστείτε τις άδειες των Step Functions για να κλιμακώσετε τα προνόμια:
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
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

