AWS - EFS 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.
EFS
Basic Information
Το Amazon Elastic File System (EFS) παρουσιάζεται ως ένα πλήρως διαχειριζόμενο, κλιμακούμενο και ελαστικό δίκτυο αρχείων από την AWS. Η υπηρεσία διευκολύνει τη δημιουργία και διαμόρφωση συστημάτων αρχείων που μπορούν να προσπελαστούν ταυτόχρονα από πολλαπλές EC2 instances και άλλες υπηρεσίες AWS. Τα κύρια χαρακτηριστικά του EFS περιλαμβάνουν την ικανότητά του να κλιμακώνεται αυτόματα χωρίς χειροκίνητη παρέμβαση, να παρέχει πρόσβαση χαμηλής καθυστέρησης, να υποστηρίζει φορτία εργασίας υψηλής απόδοσης, να εγγυάται την ανθεκτικότητα των δεδομένων και να ενσωματώνεται απρόσκοπτα με διάφορους μηχανισμούς ασφαλείας της AWS.
Από προεπιλογή, ο φάκελος EFS που θα προσαρτηθεί θα είναι / αλλά μπορεί να έχει ένα διαφορετικό όνομα.
Network Access
Ένα EFS δημιουργείται σε ένα VPC και θα είναι κατά προεπιλογή προσβάσιμο σε όλα τα υποδίκτυα VPC. Ωστόσο, το EFS θα έχει μια Ομάδα Ασφαλείας. Για να δώσετε πρόσβαση σε μια EC2 (ή οποιαδήποτε άλλη υπηρεσία AWS) να προσαρτήσει το EFS, είναι απαραίτητο να επιτρέψετε στην ομάδα ασφαλείας EFS έναν κανόνα εισερχόμενου NFS (θύρα 2049) από την Ομάδα Ασφαλείας EC2.
Χωρίς αυτό, δεν θα μπορείτε να επικοινωνήσετε με την υπηρεσία NFS.
Για περισσότερες πληροφορίες σχετικά με το πώς να το κάνετε αυτό, ελέγξτε: https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount
Enumeration
# Get filesystems and access policies (if any)
aws efs describe-file-systems
aws efs describe-file-system-policy --file-system-id <id>
# Get subnetworks and IP addresses where you can find the file system
aws efs describe-mount-targets --file-system-id <id>
aws efs describe-mount-target-security-groups --mount-target-id <id>
aws ec2 describe-security-groups --group-ids <sg_id>
# Get other access points
aws efs describe-access-points
# Get replication configurations
aws efs describe-replication-configurations
# Search for NFS in EC2 networks
sudo nmap -T4 -Pn -p 2049 --open 10.10.10.0/20 # or /16 to be sure
Caution
Μπορεί να συμβαίνει ότι το σημείο προσάρτησης EFS είναι μέσα στην ίδια VPC αλλά σε διαφορετικό υποδίκτυο. Αν θέλετε να είστε σίγουροι ότι θα βρείτε όλα τα σημεία EFS, θα ήταν καλύτερα να σαρώσετε το
/16netmask.
Mount EFS
sudo mkdir /efs
## Mount found
sudo apt install nfs-common
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport <IP>:/ /efs
## Mount with efs type
## You need to have installed the package amazon-efs-utils
sudo yum install amazon-efs-utils # If centos
sudo apt-get install amazon-efs-utils # If ubuntu
sudo mount -t efs <file-system-id/EFS DNS name>:/ /efs/
IAM Access
Κατά προεπιλογή, οποιοσδήποτε έχει δικτύωση πρόσβαση στο EFS θα μπορεί να τοποθετήσει, να διαβάσει και να το γράψει ακόμη και ως χρήστης root. Ωστόσο, οι πολιτικές του File System μπορεί να είναι σε εφαρμογή επιτρέποντας μόνο σε κύριους με συγκεκριμένες άδειες να έχουν πρόσβαση σε αυτό.
Για παράδειγμα, αυτή η πολιτική File System δεν θα επιτρέπει ακόμη και να τοποθετηθεί το file system αν δεν έχετε την άδεια IAM:
{
"Version": "2012-10-17",
"Id": "efs-policy-wizard-2ca2ba76-5d83-40be-8557-8f6c19eaa797",
"Statement": [
{
"Sid": "efs-statement-e7f4b04c-ad75-4a7f-a316-4e5d12f0dbf5",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "",
"Resource": "arn:aws:elasticfilesystem:us-east-1:318142138553:file-system/fs-0ab66ad201b58a018",
"Condition": {
"Bool": {
"elasticfilesystem:AccessedViaMountTarget": "true"
}
}
}
]
}
Ή αυτό θα αποτρέψει την ανώνυμη πρόσβαση:
.png)
Σημειώστε ότι για να προσαρτήσετε συστήματα αρχείων που προστατεύονται από IAM ΠΡΕΠΕΙ να χρησιμοποιήσετε τον τύπο “efs” στην εντολή προσαρτήσεως:
sudo mkdir /efs
sudo mount -t efs -o tls,iam <file-system-id/EFS DNS name>:/ /efs/
# To use a different pforile from ~/.aws/credentials
# You can use: -o tls,iam,awsprofile=namedprofile
Access Points
Access points είναι ειδικοί σημεία εισόδου σε ένα EFS file system που διευκολύνουν τη διαχείριση της πρόσβασης εφαρμογών σε κοινά σύνολα δεδομένων.
Όταν δημιουργείτε ένα access point, μπορείτε να καθορίσετε τον ιδιοκτήτη και τα δικαιώματα POSIX για τα αρχεία και τους καταλόγους που δημιουργούνται μέσω του access point. Μπορείτε επίσης να ορίσετε έναν προσαρμοσμένο ριζικό κατάλογο για το access point, είτε καθορίζοντας έναν υπάρχοντα κατάλογο είτε δημιουργώντας έναν νέο με τα επιθυμητά δικαιώματα. Αυτό σας επιτρέπει να ελέγχετε την πρόσβαση στο EFS file system σας ανά εφαρμογή ή ανά χρήστη, διευκολύνοντας τη διαχείριση και την ασφάλεια των κοινών αρχείων σας.
Μπορείτε να προσαρτήσετε το File System από ένα access point με κάτι σαν:
# Use IAM if you need to use iam permissions
sudo mount -t efs -o tls,[iam],accesspoint=<access-point-id> \
<file-system-id/EFS DNS> /efs/
Warning
Σημειώστε ότι ακόμη και αν προσπαθήσετε να συνδέσετε ένα access point, πρέπει να μπορείτε να επικοινωνήσετε με την υπηρεσία NFS μέσω δικτύου, και αν το EFS έχει μια πολιτική συστήματος αρχείων, χρειάζεστε αρκετές IAM άδειες για να το συνδέσετε.
Τα access points μπορούν να χρησιμοποιηθούν για τους εξής σκοπούς:
- Απλοποίηση της διαχείρισης αδειών: Ορίζοντας έναν χρήστη και μια ομάδα POSIX για κάθε access point, μπορείτε να διαχειριστείτε εύκολα τις άδειες πρόσβασης για διαφορετικές εφαρμογές ή χρήστες χωρίς να τροποποιήσετε τις άδειες του υποκείμενου συστήματος αρχείων.
- Επιβολή ριζικού καταλόγου: Τα access points μπορούν να περιορίσουν την πρόσβαση σε έναν συγκεκριμένο κατάλογο εντός του συστήματος αρχείων EFS, διασφαλίζοντας ότι κάθε εφαρμογή ή χρήστης λειτουργεί εντός του καθορισμένου φακέλου του. Αυτό βοηθά στην αποφυγή τυχαίας έκθεσης ή τροποποίησης δεδομένων.
- Ευκολότερη πρόσβαση στο σύστημα αρχείων: Τα access points μπορούν να συσχετιστούν με μια λειτουργία AWS Lambda ή μια εργασία AWS Fargate, απλοποιώντας την πρόσβαση στο σύστημα αρχείων για serverless και κοντενέρισμένες εφαρμογές.
EFS IP διεύθυνση
Χρησιμοποιώντας τις πληροφορίες που σχετίζονται με τη διεύθυνση IP του EFS, το παρακάτω σενάριο Python μπορεί να βοηθήσει στην ανάκτηση λεπτομερειών σχετικά με το σύστημα EFS. Αυτές οι πληροφορίες είναι χρήσιμες για την κατασκευή της εντολής συστήματος σύνδεσης ή για την εκτέλεση περαιτέρω αρίθμησης με γνώση του ID υποδικτύου. Επιπλέον, το σενάριο δείχνει τα access points, τα οποία μπορεί να είναι πολύτιμα όταν ο ριζικός κατάλογος ή η κύρια διαδρομή σύνδεσης είναι περιορισμένα. Σε τέτοιες περιπτώσεις, τα access points παρέχουν εναλλακτικές διαδρομές για την πρόσβαση σε ευαίσθητες πληροφορίες.
Usage: python efs_ip_enum.py <IP_ADDRESS>
import boto3
import sys
def get_efs_info(ip_address):
try:
session = boto3.Session(profile_name="profile")
ec2_client = session.client('ec2')
efs_client = session.client('efs')
print(f"[*] Enumerating EFS information for IP address: {ip_address}\n")
try:
response = ec2_client.describe_network_interfaces(Filters=[
{'Name': 'addresses.private-ip-address', 'Values': [ip_address]}
])
if not response['NetworkInterfaces']:
print(f"[!] No network interface found for IP address {ip_address}")
return
network_interface = response['NetworkInterfaces'][0]
network_interface_id = network_interface['NetworkInterfaceId']
print(f"[+] Found network interface: {network_interface_id}\n")
except Exception as e:
print(f"[!] Error retrieving network interface: {str(e)}")
return
try:
efs_response = efs_client.describe_file_systems()
file_systems = efs_response['FileSystems']
except Exception as e:
print(f"[!] Error retrieving EFS file systems: {str(e)}")
return
for fs in file_systems:
fs_id = fs['FileSystemId']
try:
mount_targets = efs_client.describe_mount_targets(FileSystemId=fs_id)['MountTargets']
for mt in mount_targets:
if mt['NetworkInterfaceId'] == network_interface_id:
try:
policy = efs_client.describe_file_system_policy(FileSystemId=fs_id).get('Policy', 'No policy attached')
except Exception as e:
policy = f"Error retrieving policy: {str(e)}"
print("[+] Found matching EFS File System:\n")
print(f" FileSystemId: {fs_id}")
print(f" MountTargetId: {mt['MountTargetId']}")
print(f" DNSName: {fs_id}.efs.{session.region_name}.amazonaws.com")
print(f" LifeCycleState: {mt['LifeCycleState']}")
print(f" SubnetId: {mt['SubnetId']}")
print(f" SecurityGroups: {', '.join(mt.get('SecurityGroups', [])) if mt.get('SecurityGroups') else 'None'}")
print(f" Policy: {policy}\n")
try:
access_points = efs_client.describe_access_points(FileSystemId=fs_id)['AccessPoints']
if access_points:
print(f"[+] Access Points for FileSystemId {fs_id}:")
for ap in access_points:
print(f" AccessPointId: {ap['AccessPointId']}")
print(f" Name: {ap.get('Name', 'N/A')}")
print(f" OwnerId: {ap['OwnerId']}")
posix_user = ap.get('PosixUser', {})
print(f" PosixUser: UID={posix_user.get('Uid', 'N/A')}, GID={posix_user.get('Gid', 'N/A')}")
root_dir = ap.get('RootDirectory', {})
print(f" RootDirectory: Path={root_dir.get('Path', 'N/A')}")
creation_info = root_dir.get('CreationInfo', {})
print(f" CreationInfo: OwnerUID={creation_info.get('OwnerUid', 'N/A')}, OwnerGID={creation_info.get('OwnerGid', 'N/A')}, Permissions={creation_info.get('Permissions', 'N/A')}\n")
else:
print(f"[!] No Access Points found for FileSystemId {fs_id}\n")
except Exception as e:
print(f"[!] Error retrieving access points for FileSystemId {fs_id}: {str(e)}\n")
except Exception as e:
print(f"[!] Error processing file system {fs_id}: {str(e)}\n")
except Exception as e:
print(f"[!] General Error: {str(e)}\n")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python efs_enum.py <IP_ADDRESS>")
sys.exit(1)
ip_address = sys.argv[1]
get_efs_info(ip_address)
Privesc
Post Exploitation
Persistence
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

