AWS - Βασικές Πληροφορίες

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

Ιεραρχία Οργάνωσης

Λογαριασμοί

Στο AWS, υπάρχει ένας root account, ο οποίος είναι ο γονικός κάδος για όλους τους λογαριασμούς της οργάνωσής σας. Ωστόσο, δεν χρειάζεται να χρησιμοποιήσετε αυτόν τον λογαριασμό για να αναπτύξετε πόρους, μπορείτε να δημιουργήσετε άλλους λογαριασμούς για να διαχωρίσετε διαφορετικές υποδομές AWS μεταξύ τους.

Αυτό είναι πολύ ενδιαφέρον από την οπτική της ασφάλειας, καθώς ένας λογαριασμός δεν θα μπορεί να έχει πρόσβαση σε πόρους άλλου λογαριασμού (εκτός αν έχουν δημιουργηθεί συγκεκριμένες γέφυρες), έτσι μπορείτε να δημιουργήσετε όρια μεταξύ των αναπτύξεων.

Επομένως, υπάρχουν δύο τύποι λογαριασμών σε μια οργάνωση (μιλάμε για λογαριασμούς AWS και όχι λογαριασμούς χρηστών): ένας μόνο λογαριασμός που έχει οριστεί ως ο λογαριασμός διαχείρισης, και ένας ή περισσότεροι λογαριασμοί μελών.

  • Ο λογαριασμός διαχείρισης (ο root account) είναι ο λογαριασμός που χρησιμοποιείτε για να δημιουργήσετε την οργάνωση. Από τον λογαριασμό διαχείρισης της οργάνωσης, μπορείτε να κάνετε τα εξής:

  • Δημιουργία λογαριασμών στην οργάνωση

  • Πρόσκληση άλλων υπαρχόντων λογαριασμών στην οργάνωση

  • Αφαίρεση λογαριασμών από την οργάνωση

  • Διαχείριση προσκλήσεων

  • Εφαρμογή πολιτικών σε οντότητες (roots, OUs ή λογαριασμούς) εντός της οργάνωσης

  • Ενεργοποίηση ενσωμάτωσης με υποστηριζόμενες υπηρεσίες AWS για να παρέχετε λειτουργικότητα υπηρεσιών σε όλους τους λογαριασμούς στην οργάνωση.

  • Είναι δυνατή η σύνδεση ως root user χρησιμοποιώντας το email και τον κωδικό πρόσβασης που χρησιμοποιήθηκαν για τη δημιουργία αυτού του root account/οργάνωσης.

Ο λογαριασμός διαχείρισης έχει τις ευθύνες ενός λογαριασμού πληρωμής και είναι υπεύθυνος για την πληρωμή όλων των χρεώσεων που προκύπτουν από τους λογαριασμούς μελών. Δεν μπορείτε να αλλάξετε τον λογαριασμό διαχείρισης μιας οργάνωσης.

  • Οι λογαριασμοί μελών αποτελούν όλους τους υπόλοιπους λογαριασμούς σε μια οργάνωση. Ένας λογαριασμός μπορεί να είναι μέλος μόνο μιας οργάνωσης τη φορά. Μπορείτε να επισυνάψετε μια πολιτική σε έναν λογαριασμό για να εφαρμόσετε ελέγχους μόνο σε αυτόν τον λογαριασμό.
  • Οι λογαριασμοί μελών πρέπει να χρησιμοποιούν μια έγκυρη διεύθυνση email και μπορούν να έχουν ένα όνομα, γενικά δεν θα μπορούν να διαχειρίζονται την τιμολόγηση (αλλά μπορεί να τους δοθεί πρόσβαση σε αυτήν).
aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com

Οργανωτικές Μονάδες

Οι λογαριασμοί μπορούν να ομαδοποιηθούν σε Οργανωτικές Μονάδες (OU). Με αυτόν τον τρόπο, μπορείτε να δημιουργήσετε πολιτικές για την Οργανωτική Μονάδα που θα εφαρμόζονται σε όλους τους παιδικούς λογαριασμούς. Σημειώστε ότι μια OU μπορεί να έχει άλλες OUs ως παιδιά.

# You can get the root id from aws organizations list-roots
aws organizations create-organizational-unit --parent-id r-lalala --name TestOU

Service Control Policy (SCP)

Μια service control policy (SCP) είναι μια πολιτική που καθορίζει τις υπηρεσίες και τις ενέργειες που μπορούν να χρησιμοποιούν οι χρήστες και οι ρόλοι στους λογαριασμούς που επηρεάζει η SCP. Οι SCP είναι παρόμοιες με τις πολιτικές δικαιωμάτων IAM εκτός από το ότι δεν παρέχουν κανένα δικαίωμα. Αντίθετα, οι SCP καθορίζουν τα μέγιστα δικαιώματα για έναν οργανισμό, οργανωτική μονάδα (OU) ή λογαριασμό. Όταν επισυνάπτετε μια SCP στη ρίζα του οργανισμού σας ή σε μια OU, η SCP περιορίζει τα δικαιώματα για οντότητες σε μέλη λογαριασμούς.

Αυτή είναι η ΜΟΝΗ τρόπος που ακόμα και ο ριζικός χρήστης μπορεί να σταματήσει να κάνει κάτι. Για παράδειγμα, θα μπορούσε να χρησιμοποιηθεί για να σταματήσει τους χρήστες από το να απενεργοποιούν το CloudTrail ή να διαγράφουν αντίγραφα ασφαλείας.
Ο μόνος τρόπος να παρακαμφθεί αυτό είναι να παραβιαστεί επίσης ο κύριος λογαριασμός που ρυθμίζει τις SCP (ο κύριος λογαριασμός δεν μπορεί να αποκλειστεί).

Warning

Σημειώστε ότι οι SCP περιορίζουν μόνο τους κύριους στον λογαριασμό, επομένως άλλοι λογαριασμοί δεν επηρεάζονται. Αυτό σημαίνει ότι η ύπαρξη μιας SCP που αρνείται το s3:GetObject δεν θα σταματήσει τους ανθρώπους από το να έχουν πρόσβαση σε ένα δημόσιο S3 bucket στον λογαριασμό σας.

Παραδείγματα SCP:

  • Απαγόρευση του ριζικού λογαριασμού εντελώς
  • Επιτρέψτε μόνο συγκεκριμένες περιοχές
  • Επιτρέψτε μόνο υπηρεσίες που έχουν λευκή λίστα
  • Απαγόρευση του GuardDuty, CloudTrail και S3 Public Block Access από

να απενεργοποιηθούν

  • Απαγόρευση ρόλων ασφάλειας/αντίκτυπου από το να διαγραφούν ή

να τροποποιηθούν.

  • Απαγόρευση διαγραφής αντιγράφων ασφαλείας.
  • Απαγόρευση δημιουργίας χρηστών IAM και κλειδιών πρόσβασης

Βρείτε παραδείγματα JSON στο https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html

Resource Control Policy (RCP)

Μια resource control policy (RCP) είναι μια πολιτική που καθορίζει τα μέγιστα δικαιώματα για πόρους εντός του οργανισμού AWS σας. Οι RCP είναι παρόμοιες με τις πολιτικές IAM στη σύνταξη αλλά δεν παρέχουν δικαιώματα—μόνο περιορίζουν τα δικαιώματα που μπορούν να εφαρμοστούν στους πόρους από άλλες πολιτικές. Όταν επισυνάπτετε μια RCP στη ρίζα του οργανισμού σας, σε μια οργανωτική μονάδα (OU) ή σε έναν λογαριασμό, η RCP περιορίζει τα δικαιώματα πόρων σε όλους τους πόρους στην επηρεαζόμενη περιοχή.

Αυτή είναι η ΜΟΝΗ τρόπος για να διασφαλίσετε ότι οι πόροι δεν μπορούν να υπερβούν τα προκαθορισμένα επίπεδα πρόσβασης—ακόμα και αν μια πολιτική βασισμένη σε ταυτότητα ή πόρο είναι πολύ επιεικής. Ο μόνος τρόπος να παρακαμφθούν αυτοί οι περιορισμοί είναι να τροποποιηθεί επίσης η RCP που έχει ρυθμιστεί από τον λογαριασμό διαχείρισης του οργανισμού σας.

Warning

Οι RCP περιορίζουν μόνο τα δικαιώματα που μπορούν να έχουν οι πόροι. Δεν ελέγχουν άμεσα τι μπορούν να κάνουν οι κύριοι. Για παράδειγμα, αν μια RCP αρνείται την εξωτερική πρόσβαση σε ένα S3 bucket, διασφαλίζει ότι τα δικαιώματα του bucket δεν επιτρέπουν ποτέ ενέργειες πέρα από το καθορισμένο όριο—ακόμα και αν μια πολιτική βασισμένη σε πόρους είναι λανθασμένα ρυθμισμένη.

Παραδείγματα RCP:

  • Περιορίστε τα S3 buckets ώστε να μπορούν να προσπελαστούν μόνο από κύριους εντός του οργανισμού σας
  • Περιορίστε τη χρήση κλειδιών KMS ώστε να επιτρέπουν μόνο λειτουργίες από αξιόπιστους οργανωτικούς λογαριασμούς
  • Περιορίστε τα δικαιώματα στις SQS ουρές για να αποτρέψετε μη εξουσιοδοτημένες τροποποιήσεις
  • Επιβάλετε όρια πρόσβασης στα μυστικά του Secrets Manager για να προστατεύσετε ευαίσθητα δεδομένα

Βρείτε παραδείγματα στην τεκμηρίωση Πολιτικών Ελέγχου Πόρων AWS Organizations

ARN

Amazon Resource Name είναι το μοναδικό όνομα που έχει κάθε πόρος μέσα στο AWS, είναι διαμορφωμένο ως εξής:

arn:partition:service:region:account-id:resource-type/resource-id
arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env

Σημειώστε ότι υπάρχουν 4 διαμερίσματα στο AWS αλλά μόνο 3 τρόποι για να τα καλέσετε:

  • AWS Standard: aws
  • AWS China: aws-cn
  • AWS US public Internet (GovCloud): aws-us-gov
  • AWS Secret (US Classified): aws

IAM - Identity and Access Management

Το IAM είναι η υπηρεσία που θα σας επιτρέψει να διαχειριστείτε Authentication, Authorization και Access Control μέσα στον λογαριασμό σας στο AWS.

  • Authentication - Διαδικασία καθορισμού μιας ταυτότητας και της επαλήθευσης αυτής της ταυτότητας. Αυτή η διαδικασία μπορεί να υποδιαιρεθεί σε: Αναγνώριση και επαλήθευση.
  • Authorization - Καθορίζει τι μπορεί να έχει πρόσβαση μια ταυτότητα μέσα σε ένα σύστημα μόλις έχει επαληθευτεί σε αυτό.
  • Access Control - Η μέθοδος και η διαδικασία με την οποία παρέχεται πρόσβαση σε έναν ασφαλή πόρο.

Το IAM μπορεί να οριστεί από την ικανότητά του να διαχειρίζεται, ελέγχει και κυβερνά τους μηχανισμούς αυθεντικοποίησης, εξουσιοδότησης και ελέγχου πρόσβασης ταυτοτήτων στους πόρους σας μέσα στον λογαριασμό σας στο AWS.

AWS account root user

Όταν δημιουργείτε για πρώτη φορά έναν λογαριασμό Amazon Web Services (AWS), ξεκινάτε με μια μοναδική ταυτότητα σύνδεσης που έχει πλήρη πρόσβαση σε όλες τις υπηρεσίες και τους πόρους AWS στον λογαριασμό. Αυτός είναι ο root user του λογαριασμού AWS και αποκτάται με την είσοδο με τη διεύθυνση email και τον κωδικό πρόσβασης που χρησιμοποιήσατε για να δημιουργήσετε τον λογαριασμό.

Σημειώστε ότι ένας νέος admin user θα έχει λιγότερα δικαιώματα από τον root user.

Από άποψη ασφάλειας, συνιστάται να δημιουργήσετε άλλους χρήστες και να αποφύγετε τη χρήση αυτού.

IAM users

Ένας user IAM είναι μια οντότητα που δημιουργείτε στο AWS για να αντιπροσωπεύει το άτομο ή την εφαρμογή που το χρησιμοποιεί για να αλληλεπιδράσει με το AWS. Ένας χρήστης στο AWS αποτελείται από ένα όνομα και διαπιστευτήρια (κωδικός πρόσβασης και έως δύο κλειδιά πρόσβασης).

Όταν δημιουργείτε έναν χρήστη IAM, του παρέχετε δικαιώματα κάνοντάς τον μέλος μιας ομάδας χρηστών που έχει συνημμένες κατάλληλες πολιτικές δικαιωμάτων (συνιστάται), ή συνημμένα πολιτικές απευθείας στον χρήστη.

Οι χρήστες μπορούν να έχουν ενεργοποιημένο MFA για σύνδεση μέσω της κονσόλας. Τα API tokens των χρηστών με ενεργοποιημένο MFA δεν προστατεύονται από το MFA. Εάν θέλετε να περιορίσετε την πρόσβαση των κλειδιών API ενός χρήστη χρησιμοποιώντας MFA, πρέπει να υποδείξετε στην πολιτική ότι για να εκτελούνται ορισμένες ενέργειες πρέπει να είναι παρόν το MFA (παράδειγμα εδώ).

CLI

  • Access Key ID: 20 τυχαίοι χαρακτήρες αλφαριθμητικούς κεφαλαίους όπως AKHDNAPO86BSHKDIRYT
  • Secret access key ID: 40 τυχαίοι χαρακτήρες κεφαλαίους και πεζούς: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Δεν είναι δυνατή η ανάκτηση χαμένων κωδικών πρόσβασης).

Όποτε χρειάζεστε να αλλάξετε το Access Key, αυτή είναι η διαδικασία που πρέπει να ακολουθήσετε:
Δημιουργήστε ένα νέο access key -> Εφαρμόστε το νέο κλειδί στο σύστημα/εφαρμογή -> σημειώστε το αρχικό ως ανενεργό -> Δοκιμάστε και επαληθεύστε ότι το νέο access key λειτουργεί -> Διαγράψτε το παλιό access key

MFA - Multi Factor Authentication

Χρησιμοποιείται για να δημιουργήσει έναν επιπλέον παράγοντα για την αυθεντικοποίηση εκτός από τις υπάρχουσες μεθόδους σας, όπως ο κωδικός πρόσβασης, δημιουργώντας έτσι ένα επίπεδο πολλαπλής αυθεντικοποίησης.
Μπορείτε να χρησιμοποιήσετε μια δωρεάν εικονική εφαρμογή ή μια φυσική συσκευή. Μπορείτε να χρησιμοποιήσετε εφαρμογές όπως η Google Authentication δωρεάν για να ενεργοποιήσετε το MFA στο AWS.

Πολιτικές με συνθήκες MFA μπορούν να συνημμένες στα εξής:

  • Ένας χρήστης ή ομάδα IAM
  • Ένας πόρος όπως ένα Amazon S3 bucket, Amazon SQS queue ή Amazon SNS topic
  • Η πολιτική εμπιστοσύνης ενός IAM role που μπορεί να αναληφθεί από έναν χρήστη

Εάν θέλετε να έχετε πρόσβαση μέσω CLI σε έναν πόρο που ελέγχει για MFA, πρέπει να καλέσετε GetSessionToken. Αυτό θα σας δώσει ένα token με πληροφορίες σχετικά με το MFA.
Σημειώστε ότι τα διαπιστευτήρια AssumeRole δεν περιέχουν αυτές τις πληροφορίες.

aws sts get-session-token --serial-number <arn_device> --token-code <code>

Όπως αναφέρεται εδώ, υπάρχουν πολλές διαφορετικές περιπτώσεις όπου η MFA δεν μπορεί να χρησιμοποιηθεί.

Ομάδες χρηστών IAM

Μια ομάδα χρηστών IAM είναι ένας τρόπος για να συνδέσετε πολιτικές σε πολλούς χρήστες ταυτόχρονα, κάτι που μπορεί να διευκολύνει τη διαχείριση των δικαιωμάτων για αυτούς τους χρήστες. Οι ρόλοι και οι ομάδες δεν μπορούν να είναι μέρος μιας ομάδας.

Μπορείτε να συνδέσετε μια πολιτική βάσει ταυτότητας σε μια ομάδα χρηστών έτσι ώστε όλοι οι χρήστες στην ομάδα χρηστών να λαμβάνουν τα δικαιώματα της πολιτικής. Δεν μπορείτε να προσδιορίσετε μια ομάδα χρηστών ως Principal σε μια πολιτική (όπως μια πολιτική βάσης πόρων) επειδή οι ομάδες σχετίζονται με τα δικαιώματα, όχι με την αυθεντικοποίηση, και οι principals είναι αυθεντικοποιημένες οντότητες IAM.

Ακολουθούν μερικά σημαντικά χαρακτηριστικά των ομάδων χρηστών:

  • Μια ομάδα χρηστών μπορεί να περιέχει πολλούς χρήστες, και ένας χρήστης μπορεί να ανήκει σε πολλές ομάδες.
  • Οι ομάδες χρηστών δεν μπορούν να είναι φωλιασμένες; μπορούν να περιέχουν μόνο χρήστες, όχι άλλες ομάδες χρηστών.
  • Δεν υπάρχει καμία προεπιλεγμένη ομάδα χρηστών που να περιλαμβάνει αυτόματα όλους τους χρήστες στον λογαριασμό AWS. Εάν θέλετε να έχετε μια τέτοια ομάδα χρηστών, πρέπει να τη δημιουργήσετε και να αναθέσετε κάθε νέο χρήστη σε αυτήν.
  • Ο αριθμός και το μέγεθος των πόρων IAM σε έναν λογαριασμό AWS, όπως ο αριθμός των ομάδων και ο αριθμός των ομάδων στις οποίες μπορεί να είναι μέλος ένας χρήστης, είναι περιορισμένα. Για περισσότερες πληροφορίες, δείτε ποσοστά IAM και AWS STS.

Ρόλοι IAM

Ένας ρόλος IAM είναι πολύ παρόμοιος με έναν χρήστη, καθώς είναι μια ταυτότητα με πολιτικές δικαιωμάτων που καθορίζουν τι μπορεί και δεν μπορεί να κάνει στο AWS. Ωστόσο, ένας ρόλος δεν έχει καμία διαπιστευτήρια (κωδικό πρόσβασης ή κλειδιά πρόσβασης) που να σχετίζονται με αυτόν. Αντί να είναι μοναδικά συνδεδεμένος με ένα άτομο, ένας ρόλος προορίζεται να είναι αναλαμβανόμενος από οποιονδήποτε τον χρειάζεται (και έχει αρκετά δικαιώματα). Ένας χρήστης IAM μπορεί να αναλάβει έναν ρόλο για να αποκτήσει προσωρινά διαφορετικά δικαιώματα για μια συγκεκριμένη εργασία. Ένας ρόλος μπορεί να ανατεθεί σε έναν ομοσπονδωμένο χρήστη που συνδέεται χρησιμοποιώντας έναν εξωτερικό πάροχο ταυτότητας αντί για το IAM.

Ένας ρόλος IAM αποτελείται από δύο τύπους πολιτικών: Μια πολιτική εμπιστοσύνης, η οποία δεν μπορεί να είναι κενή, καθορίζοντας ποιος μπορεί να αναλάβει τον ρόλο, και μια πολιτική δικαιωμάτων, η οποία δεν μπορεί να είναι κενή, καθορίζοντας τι μπορεί να προσπελάσει.

Υπηρεσία ασφαλείας διακριτικών AWS (STS)

Η Υπηρεσία ασφαλείας διακριτικών AWS (STS) είναι μια διαδικτυακή υπηρεσία που διευκολύνει την έκδοση προσωρινών, περιορισμένων διαπιστευτηρίων. Είναι ειδικά προσαρμοσμένη για:

Προσωρινά διαπιστευτήρια στο IAM

Τα προσωρινά διαπιστευτήρια χρησιμοποιούνται κυρίως με ρόλους IAM, αλλά υπάρχουν και άλλες χρήσεις. Μπορείτε να ζητήσετε προσωρινά διαπιστευτήρια που έχουν ένα πιο περιορισμένο σύνολο δικαιωμάτων από τον τυπικό χρήστη IAM σας. Αυτό αποτρέπει να εκτελείτε κατά λάθος εργασίες που δεν επιτρέπονται από τα πιο περιορισμένα διαπιστευτήρια. Ένα πλεονέκτημα των προσωρινών διαπιστευτηρίων είναι ότι λήγουν αυτόματα μετά από μια καθορισμένη χρονική περίοδο. Έχετε έλεγχο πάνω στη διάρκεια που είναι έγκυρα τα διαπιστευτήρια.

Πολιτικές

Δικαιώματα Πολιτικής

Χρησιμοποιούνται για την ανάθεση δικαιωμάτων. Υπάρχουν 2 τύποι:

  • Πολιτικές διαχείρισης AWS (προρυθμισμένες από την AWS)
  • Πολιτικές διαχείρισης πελατών: Ρυθμισμένες από εσάς. Μπορείτε να δημιουργήσετε πολιτικές βασισμένες σε πολιτικές διαχείρισης AWS (τροποποιώντας μία από αυτές και δημιουργώντας τη δική σας), χρησιμοποιώντας τον γεννήτρια πολιτικών (μια GUI προβολή που σας βοηθά να παραχωρείτε και να αρνείστε δικαιώματα) ή γράφοντας τη δική σας.

Κατά προεπιλογή, η πρόσβαση είναι αρνητική, η πρόσβαση θα παραχωρηθεί εάν έχει καθοριστεί ρητά ένας ρόλος.
Εάν υπάρχει μία μόνο “Άρνηση”, θα υπερισχύσει της “Άδειας”, εκτός από αιτήματα που χρησιμοποιούν τα διαπιστευτήρια ασφαλείας του ριζικού λογαριασμού AWS (τα οποία επιτρέπονται από προεπιλογή).

{
"Version": "2012-10-17",  //Version of the policy
"Statement": [  //Main element, there can be more than 1 entry in this array
{
"Sid": "Stmt32894y234276923" //Unique identifier (optional)
"Effect": "Allow", //Allow or deny
"Action": [  //Actions that will be allowed or denied
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": [ //Resource the action and effect will be applied to
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:instance/*"
],
"Condition": { //Optional element that allow to control when the permission will be effective
"ArnEquals": {"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"}
}
}
]
}

Τα παγκόσμια πεδία που μπορούν να χρησιμοποιηθούν για συνθήκες σε οποιαδήποτε υπηρεσία είναι τεκμηριωμένα εδώ.
Τα συγκεκριμένα πεδία που μπορούν να χρησιμοποιηθούν για συνθήκες ανά υπηρεσία είναι τεκμηριωμένα εδώ.

Inline Policies

Αυτός ο τύπος πολιτικών είναι άμεσα ανατεθειμένος σε έναν χρήστη, ομάδα ή ρόλο. Έτσι, δεν εμφανίζονται στη λίστα Πολιτικών καθώς οποιοσδήποτε άλλος μπορεί να τις χρησιμοποιήσει.
Οι inline πολιτικές είναι χρήσιμες αν θέλετε να διατηρήσετε μια αυστηρή σχέση ένα προς ένα μεταξύ μιας πολιτικής και της ταυτότητας στην οποία εφαρμόζεται. Για παράδειγμα, θέλετε να είστε σίγουροι ότι οι άδειες σε μια πολιτική δεν ανατίθενται κατά λάθος σε μια ταυτότητα εκτός από αυτήν για την οποία προορίζονται. Όταν χρησιμοποιείτε μια inline πολιτική, οι άδειες στην πολιτική δεν μπορούν να προσαρτηθούν κατά λάθος στη λάθος ταυτότητα. Επιπλέον, όταν χρησιμοποιείτε την κονσόλα διαχείρισης AWS για να διαγράψετε αυτήν την ταυτότητα, οι πολιτικές που ενσωματώνονται στην ταυτότητα διαγράφονται επίσης. Αυτό συμβαίνει επειδή είναι μέρος της κύριας οντότητας.

Resource Bucket Policies

Αυτές είναι πολιτικές που μπορούν να οριστούν σε πόρους. Όλοι οι πόροι του AWS δεν τις υποστηρίζουν.

Εάν μια κύρια οντότητα δεν έχει ρητή άρνηση γι’ αυτές, και μια πολιτική πόρου τους παραχωρεί πρόσβαση, τότε επιτρέπεται.

IAM Boundaries

Οι IAM boundaries μπορούν να χρησιμοποιηθούν για να περιορίσουν τις άδειες που πρέπει να έχει πρόσβαση ένας χρήστης ή ρόλος. Με αυτόν τον τρόπο, ακόμη και αν μια διαφορετική σειρά αδειών παραχωρηθεί στον χρήστη από μια διαφορετική πολιτική, η λειτουργία θα αποτύχει αν προσπαθήσει να τις χρησιμοποιήσει.

Μια boundary είναι απλώς μια πολιτική που συνδέεται με έναν χρήστη και υποδεικνύει το μέγιστο επίπεδο αδειών που μπορεί να έχει ο χρήστης ή ο ρόλος. Έτσι, ακόμη και αν ο χρήστης έχει πρόσβαση Διαχειριστή, αν η boundary υποδεικνύει ότι μπορεί να διαβάσει μόνο S· buckets, αυτό είναι το μέγιστο που μπορεί να κάνει.

Αυτό, SCPs και η τήρηση της αρχής της ελάχιστης προνομίας είναι οι τρόποι ελέγχου ώστε οι χρήστες να μην έχουν περισσότερες άδειες από αυτές που χρειάζονται.

Session Policies

Μια πολιτική συνεδρίας είναι μια πολιτική που ορίζεται όταν αναλαμβάνεται ένας ρόλος με κάποιο τρόπο. Αυτό θα είναι σαν μια IAM boundary για αυτή τη συνεδρία: Αυτό σημαίνει ότι η πολιτική συνεδρίας δεν παραχωρεί άδειες αλλά περιορίζει αυτές στις αναφερόμενες στην πολιτική (με τις μέγιστες άδειες να είναι αυτές που έχει ο ρόλος).

Αυτό είναι χρήσιμο για μέτρα ασφαλείας: Όταν ένας διαχειριστής πρόκειται να αναλάβει έναν πολύ προνομιακό ρόλο, θα μπορούσε να περιορίσει την άδεια μόνο στις αναφερόμενες στην πολιτική συνεδρίας σε περίπτωση που η συνεδρία παραβιαστεί.

aws sts assume-role \
--role-arn <value> \
--role-session-name <value> \
[--policy-arns <arn_custom_policy1> <arn_custom_policy2>]
[--policy <file://policy.json>]

Σημειώστε ότι από προεπιλογή η AWS μπορεί να προσθέσει πολιτικές συνεδρίας σε συνεδρίες που πρόκειται να δημιουργηθούν λόγω τρίτων λόγων. Για παράδειγμα, σε μη αυθεντικοποιημένους ρόλους cognito από προεπιλογή (χρησιμοποιώντας ενισχυμένη αυθεντικοποίηση), η AWS θα δημιουργήσει διαπιστευτήρια συνεδρίας με πολιτική συνεδρίας που περιορίζει τις υπηρεσίες που μπορεί να έχει πρόσβαση η συνεδρία στην παρακάτω λίστα.

Επομένως, αν σε κάποια στιγμή αντιμετωπίσετε το σφάλμα “… επειδή καμία πολιτική συνεδρίας δεν επιτρέπει το …”, και ο ρόλος έχει πρόσβαση για να εκτελέσει την ενέργεια, είναι επειδή υπάρχει μια πολιτική συνεδρίας που το εμποδίζει.

Ομοσπονδία Ταυτότητας

Η ομοσπονδία ταυτότητας επιτρέπει στους χρήστες από παρόχους ταυτότητας που είναι εξωτερικοί στην AWS να έχουν ασφαλή πρόσβαση σε πόρους της AWS χωρίς να χρειάζεται να παρέχουν διαπιστευτήρια χρήστη AWS από έγκυρο λογαριασμό IAM.
Ένα παράδειγμα παρόχου ταυτότητας μπορεί να είναι το δικό σας εταιρικό Microsoft Active Directory (μέσω SAML) ή υπηρεσίες OpenID (όπως Google). Η ομοσπονδία πρόσβασης θα επιτρέπει στους χρήστες εντός της να έχουν πρόσβαση στην AWS.

Για να ρυθμίσετε αυτήν την εμπιστοσύνη, θα δημιουργηθεί ένας Πάροχος Ταυτότητας IAM (SAML ή OAuth) που θα εμπιστεύεται την άλλη πλατφόρμα. Στη συνέχεια, τουλάχιστον ένας ρόλος IAM ανατίθεται (εμπιστευόμενος) στον Πάροχο Ταυτότητας. Εάν ένας χρήστης από την εμπιστευμένη πλατφόρμα αποκτήσει πρόσβαση στην AWS, θα έχει πρόσβαση ως ο αναφερόμενος ρόλος.

Ωστόσο, συνήθως θα θέλετε να δώσετε έναν διαφορετικό ρόλο ανάλογα με την ομάδα του χρήστη στην τρίτη πλατφόρμα. Στη συνέχεια, αρκετοί ρόλοι IAM μπορούν να εμπιστεύονται τον τρίτο Πάροχο Ταυτότητας και η τρίτη πλατφόρμα θα είναι αυτή που θα επιτρέπει στους χρήστες να αναλαμβάνουν έναν ρόλο ή τον άλλο.

Κέντρο Ταυτότητας IAM

Το AWS IAM Identity Center (διάδοχος του AWS Single Sign-On) επεκτείνει τις δυνατότητες της Διαχείρισης Ταυτότητας και Πρόσβασης AWS (IAM) για να παρέχει ένα κεντρικό σημείο που συγκεντρώνει τη διαχείριση χρηστών και την πρόσβασή τους σε λογαριασμούς AWS και εφαρμογές cloud.

Ο τομέας σύνδεσης θα είναι κάτι σαν <user_input>.awsapps.com.

Για να συνδεθούν οι χρήστες, υπάρχουν 3 πηγές ταυτότητας που μπορούν να χρησιμοποιηθούν:

  • Κατάλογος Κέντρου Ταυτότητας: Κανονικοί χρήστες AWS
  • Active Directory: Υποστηρίζει διάφορους συνδέσμους
  • Εξωτερικός Πάροχος Ταυτότητας: Όλοι οι χρήστες και οι ομάδες προέρχονται από έναν εξωτερικό Πάροχο Ταυτότητας (IdP)

Στην απλούστερη περίπτωση του καταλόγου Κέντρου Ταυτότητας, το Κέντρο Ταυτότητας θα έχει μια λίστα χρηστών & ομάδων και θα μπορεί να αναθέτει πολιτικές σε αυτούς για οποιουσδήποτε από τους λογαριασμούς της οργάνωσης.

Για να δώσετε πρόσβαση σε έναν χρήστη/ομάδα του Κέντρου Ταυτότητας σε έναν λογαριασμό, θα δημιουργηθεί ένας Πάροχος Ταυτότητας SAML που εμπιστεύεται το Κέντρο Ταυτότητας, και θα δημιουργηθεί ένας ρόλος που εμπιστεύεται τον Πάροχο Ταυτότητας με τις καθορισμένες πολιτικές στον προορισμένο λογαριασμό.

AwsSSOInlinePolicy

Είναι δυνατόν να δώσετε άδειες μέσω ενσωματωμένων πολιτικών σε ρόλους που δημιουργούνται μέσω του IAM Identity Center. Οι ρόλοι που δημιουργούνται στους λογαριασμούς που λαμβάνουν ενσωματωμένες πολιτικές στο AWS Identity Center θα έχουν αυτές τις άδειες σε μια ενσωματωμένη πολιτική που ονομάζεται AwsSSOInlinePolicy.

Επομένως, ακόμη και αν δείτε 2 ρόλους με μια ενσωματωμένη πολιτική που ονομάζεται AwsSSOInlinePolicy, αυτό δεν σημαίνει ότι έχει τις ίδιες άδειες.

Διασυνοριακές Εμπιστοσύνες και Ρόλοι

Ένας χρήστης (εμπιστευόμενος) μπορεί να δημιουργήσει έναν Διασυνοριακό Ρόλο με κάποιες πολιτικές και στη συνέχεια, να επιτρέψει σε έναν άλλο χρήστη (εμπιστευμένος) να έχει πρόσβαση στον λογαριασμό του αλλά μόνο έχοντας την πρόσβαση που υποδεικνύεται στις νέες πολιτικές ρόλου. Για να το δημιουργήσετε αυτό, απλώς δημιουργήστε έναν νέο Ρόλο και επιλέξτε Διασυνοριακό Ρόλο. Οι ρόλοι για Διασυνοριακή Πρόσβαση προσφέρουν δύο επιλογές. Παρέχοντας πρόσβαση μεταξύ λογαριασμών AWS που κατέχετε, και παρέχοντας πρόσβαση μεταξύ ενός λογαριασμού που κατέχετε και ενός τρίτου λογαριασμού AWS.
Συνιστάται να καθορίσετε τον χρήστη που είναι εμπιστευμένος και να μην βάλετε κάτι γενικό γιατί αν όχι, άλλοι αυθεντικοποιημένοι χρήστες όπως οι ομοσπονδικοί χρήστες θα μπορούν επίσης να εκμεταλλευτούν αυτήν την εμπιστοσύνη.

AWS Simple AD

Δεν υποστηρίζεται:

  • Σχέσεις Εμπιστοσύνης
  • Κέντρο Διαχείρισης AD
  • Πλήρης υποστήριξη PS API
  • Κάδος Ανακύκλωσης AD
  • Διαχειριζόμενοι Λογαριασμοί Υπηρεσιών Ομάδας
  • Επεκτάσεις Σχήματος
  • Καμία Άμεση πρόσβαση στο OS ή στις Εγκαταστάσεις

Ομοσπονδία Ιστού ή Αυθεντικοποίηση OpenID

Η εφαρμογή χρησιμοποιεί το AssumeRoleWithWebIdentity για να δημιουργήσει προσωρινά διαπιστευτήρια. Ωστόσο, αυτό δεν παρέχει πρόσβαση στην κονσόλα AWS, μόνο πρόσβαση σε πόρους εντός της AWS.

Άλλες επιλογές IAM

  • Μπορείτε να ρυθμίσετε μια πολιτική κωδικού πρόσβασης με επιλογές όπως ελάχιστο μήκος και απαιτήσεις κωδικού πρόσβασης.
  • Μπορείτε να κατεβάσετε την “Έκθεση Διαπιστευτηρίων” με πληροφορίες σχετικά με τα τρέχοντα διαπιστευτήρια (όπως χρόνος δημιουργίας χρήστη, αν είναι ενεργοποιημένος ο κωδικός πρόσβασης…). Μπορείτε να δημιουργήσετε μια έκθεση διαπιστευτηρίων όσο συχνά κάθε τέσσερις ώρες.

Η Διαχείριση Ταυτότητας και Πρόσβασης AWS (IAM) παρέχει λεπτομερή έλεγχο πρόσβασης σε όλη την AWS. Με το IAM, μπορείτε να καθορίσετε ποιος μπορεί να έχει πρόσβαση σε ποιες υπηρεσίες και πόρους, και υπό ποιες συνθήκες. Με τις πολιτικές IAM, διαχειρίζεστε τις άδειες στην εργατική σας δύναμη και τα συστήματα για να διασφαλίσετε τις ελάχιστες άδειες.

Πρόθεμα ID IAM

Στην αυτή τη σελίδα μπορείτε να βρείτε τα προθέματα ID IAM των κλειδιών ανάλογα με τη φύση τους:

Κωδικός ΑναγνωριστικούΠεριγραφή
ABIAAWS STS service bearer token

| ACCA | Διαπιστευτήριο συγκεκριμένου πλαισίου | | AGPA | Ομάδα χρηστών | | AIDA | Χρήστης IAM | | AIPA | Προφίλ στιγμής Amazon EC2 | | AKIA | Κλειδί πρόσβασης | | ANPA | Διαχειριζόμενη πολιτική | | ANVA | Έκδοση σε μια διαχειριζόμενη πολιτική | | APKA | Δημόσιο κλειδί | | AROA | Ρόλος | | ASCA | Πιστοποιητικό | | ASIA | Προσωρινά (AWS STS) αναγνωριστικά κλειδιών πρόσβασης χρησιμοποιούν αυτό το πρόθεμα, αλλά είναι μοναδικά μόνο σε συνδυασμό με το μυστικό κλειδί πρόσβασης και το διακριτικό συνεδρίας. |

Συνιστώμενες άδειες για έλεγχο λογαριασμών

Οι παρακάτω προνόμια παρέχουν διάφορη ανάγνωση μεταδεδομένων:

  • arn:aws:iam::aws:policy/SecurityAudit
  • arn:aws:iam::aws:policy/job-function/ViewOnlyAccess
  • codebuild:ListProjects
  • config:Describe*
  • cloudformation:ListStacks
  • logs:DescribeMetricFilters
  • directconnect:DescribeConnections
  • dynamodb:ListTables

Διάφορα

Αυθεντικοποίηση CLI

Για να μπορέσει ένας κανονικός χρήστης να αυθεντικοποιηθεί στην AWS μέσω CLI, πρέπει να έχει τοπικά διαπιστευτήρια. Από προεπιλογή μπορείτε να τα ρυθμίσετε χειροκίνητα στο ~/.aws/credentials ή τρέχοντας aws configure.
Σε αυτό το αρχείο μπορείτε να έχετε περισσότερα από ένα προφίλ, αν δεν καθοριστεί προφίλ χρησιμοποιώντας το aws cli, το προφίλ που ονομάζεται [default] σε αυτό το αρχείο θα χρησιμοποιηθεί.
Παράδειγμα αρχείου διαπιστευτηρίων με περισσότερα από 1 προφίλ:

[default]
aws_access_key_id = AKIA5ZDCUJHF83HDTYUT
aws_secret_access_key = uOcdhof683fbOUGFYEQug8fUGIf68greoihef

[Admin]
aws_access_key_id = AKIA8YDCu7TGTR356SHYT
aws_secret_access_key = uOcdhof683fbOUGFYEQuR2EIHG34UY987g6ff7
region = eu-west-2

Αν χρειάζεστε να έχετε πρόσβαση σε διαφορετικούς λογαριασμούς AWS και το προφίλ σας έχει δοθεί πρόσβαση για να αναλάβετε έναν ρόλο μέσα σε αυτούς τους λογαριασμούς, δεν χρειάζεται να καλείτε χειροκίνητα το STS κάθε φορά (aws sts assume-role --role-arn <role-arn> --role-session-name sessname) και να ρυθμίζετε τα διαπιστευτήρια.

Μπορείτε να χρησιμοποιήσετε το αρχείο ~/.aws/config για να υποδείξετε ποιους ρόλους να αναλάβετε, και στη συνέχεια να χρησιμοποιήσετε την παράμετρο --profile όπως συνήθως (η assume-role θα εκτελείται με διαφάνεια για τον χρήστη).
Ένα παράδειγμα αρχείου ρυθμίσεων:

[profile acc2]
region=eu-west-2
role_arn=arn:aws:iam::<account-id>:role/<role-path>
role_session_name = <session_name>
source_profile = <profile_with_assume_role>
sts_regional_endpoints = regional

Με αυτό το αρχείο ρυθμίσεων μπορείτε στη συνέχεια να χρησιμοποιήσετε το aws cli όπως:

aws --profile acc2 ...

Αν ψάχνετε για κάτι παρόμοιο με αυτό αλλά για τον περιηγητή, μπορείτε να ελέγξετε την επέκταση AWS Extend Switch Roles.

Αυτοματοποίηση προσωρινών διαπιστευτηρίων

Αν εκμεταλλεύεστε μια εφαρμογή που δημιουργεί προσωρινά διαπιστευτήρια, μπορεί να είναι κουραστικό να τα ενημερώνετε στο τερματικό σας κάθε λίγα λεπτά όταν λήγουν. Αυτό μπορεί να διορθωθεί χρησιμοποιώντας μια οδηγία credential_process στο αρχείο ρυθμίσεων. Για παράδειγμα, αν έχετε κάποια ευάλωτη webapp, θα μπορούσατε να κάνετε:

[victim]
credential_process = curl -d 'PAYLOAD' https://some-site.com

Σημειώστε ότι τα διαπιστευτήρια πρέπει να επιστραφούν στο STDOUT με την εξής μορφή:

{
"Version": 1,
"AccessKeyId": "an AWS access key",
"SecretAccessKey": "your AWS secret access key",
"SessionToken": "the AWS session token for temporary credentials",
"Expiration": "ISO8601 timestamp when the credentials expire"
}

Αναφορές

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