From fee0a7c2a03b20c489905611f11294a4016c8590 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 2 Feb 2025 18:22:51 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-services/aws-efs-enum --- .../aws-security/aws-services/aws-efs-enum.md | 122 ++++++++++++++++-- 1 file changed, 110 insertions(+), 12 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md index f172f9e05..f57d292f7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md @@ -6,7 +6,7 @@ ### Основна інформація -Amazon Elastic File System (EFS) представлений як **повністю керована, масштабована та еластична мережна файлова система** від AWS. Сервіс полегшує створення та налаштування **файлових систем**, до яких можуть одночасно отримувати доступ кілька EC2 екземплярів та інших сервісів AWS. Ключові особливості EFS включають його здатність автоматично масштабуватися без ручного втручання, забезпечувати доступ з низькою затримкою, підтримувати навантаження з високою пропускною здатністю, гарантувати довговічність даних та безшовно інтегруватися з різними механізмами безпеки AWS. +Amazon Elastic File System (EFS) представлений як **повністю керована, масштабована та еластична мережна файлова система** від AWS. Сервіс полегшує створення та налаштування **файлових систем**, до яких можуть одночасно отримувати доступ кілька EC2 екземплярів та інших сервісів AWS. Ключові особливості EFS включають його здатність автоматично масштабуватися без ручного втручання, забезпечувати доступ з низькою затримкою, підтримувати навантаження з високою пропускною здатністю, гарантувати довговічність даних та безперешкодно інтегруватися з різними механізмами безпеки AWS. За **замовчуванням**, папка EFS для монтування буде **`/`**, але вона може мати **іншу назву**. @@ -41,7 +41,7 @@ sudo nmap -T4 -Pn -p 2049 --open 10.10.10.0/20 # or /16 to be sure > [!CAUTION] > Можливо, що точка монтування EFS знаходиться в тій же VPC, але в іншій підмережі. Якщо ви хочете бути впевненими, що знайдете всі **точки EFS, краще просканувати мережу з маскою `/16`**. -### Монтування EFS +### Mount EFS ```bash sudo mkdir /efs @@ -57,8 +57,8 @@ sudo mount -t efs :/ /efs/ ``` ### IAM Access -За **замовчуванням** будь-хто з **мережевим доступом до EFS** зможе монтувати, **читати та записувати його навіть як користувач root**. Однак, політики файлової системи можуть бути встановлені, **дозволяючи доступ лише принципалам з конкретними дозволами**.\ -Наприклад, ця політика файлової системи **не дозволить навіть монтувати** файлову систему, якщо ви **не маєте дозволу IAM**: +За **замовчуванням** будь-хто з **мережевим доступом до EFS** зможе монтувати, **читати та писати його навіть як користувач root**. Однак, політики файлової системи можуть бути встановлені, **дозволяючи доступ лише принципалам з конкретними дозволами**.\ +Наприклад, ця політика файлової системи **не дозволить навіть монтувати** файлову систему, якщо у вас **немає дозволу IAM**: ```json { "Version": "2012-10-17", @@ -81,7 +81,7 @@ sudo mount -t efs :/ /efs/ ] } ``` -Або це **запобігне анонімному доступу**: +Або це **запобігатиме анонімному доступу**:
@@ -94,18 +94,18 @@ sudo mount -t efs -o tls,iam :/ /efs/ ``` ### Точки доступу -**Точки доступу** - це **специфічні для програми** точки входу **в систему файлів EFS**, які спрощують управління доступом програми до спільних наборів даних. +**Точки доступу** є **специфічними для застосунку** точками входу **в EFS файлову систему**, які спрощують управління доступом застосунків до спільних наборів даних. -Коли ви створюєте точку доступу, ви можете **вказати власника та POSIX дозволи** для файлів і каталогів, створених через точку доступу. Ви також можете **визначити власний кореневий каталог** для точки доступу, вказавши існуючий каталог або створивши новий з бажаними дозволами. Це дозволяє вам **контролювати доступ до вашої системи файлів EFS на основі програми або користувача**, що спрощує управління та захист ваших спільних файлових даних. +Коли ви створюєте точку доступу, ви можете **вказати власника та POSIX дозволи** для файлів і каталогів, створених через точку доступу. Ви також можете **визначити власний кореневий каталог** для точки доступу, вказавши існуючий каталог або створивши новий з бажаними дозволами. Це дозволяє вам **контролювати доступ до вашої EFS файлової системи на основі застосунку або користувача**, що спрощує управління та захист ваших спільних файлових даних. -**Ви можете змонтувати систему файлів з точки доступу за допомогою чогось на зразок:** +**Ви можете змонтувати файлову систему з точки доступу за допомогою чогось на кшталт:** ```bash # Use IAM if you need to use iam permissions sudo mount -t efs -o tls,[iam],accesspoint= \ /efs/ ``` > [!WARNING] -> Зверніть увагу, що навіть намагаючись змонтувати точку доступу, вам все ще потрібно **зв'язатися з NFS сервісом через мережу**, і якщо у EFS є **політика** файлової системи, вам потрібні **достатні IAM дозволи** для її монтування. +> Зверніть увагу, що навіть намагаючись змонтувати точку доступу, вам все ще потрібно **зв'язатися з NFS-сервісом через мережу**, і якщо у EFS є **політика** файлової системи, вам потрібні **достатні IAM дозволи** для її монтування. Точки доступу можуть використовуватися для наступних цілей: @@ -113,19 +113,117 @@ sudo mount -t efs -o tls,[iam],accesspoint= \ - **Забезпечення кореневої директорії**: Точки доступу можуть обмежувати доступ до конкретної директорії в файловій системі EFS, забезпечуючи, щоб кожен додаток або користувач працював у своїй призначеній папці. Це допомагає запобігти випадковому витоку або модифікації даних. - **Легший доступ до файлової системи**: Точки доступу можуть бути асоційовані з функцією AWS Lambda або завданням AWS Fargate, спрощуючи доступ до файлової системи для безсерверних і контейнеризованих додатків. -## Privesc +## EFS IP адреса + +Використовуючи інформацію, пов'язану з IP адресою EFS, наступний скрипт на Python може допомогти у отриманні деталей про систему EFS. Ця інформація корисна для побудови команди системи монтування або виконання подальшої енумерації з знанням ID підмережі. Крім того, скрипт показує точки доступу, які можуть бути цінними, коли коренева директорія або основний шлях монтування обмежені. У таких випадках точки доступу надають альтернативні шляхи для доступу до чутливої інформації. +```bash +Usage: python efs_ip_enum.py +``` + +```python +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 ") +sys.exit(1) + +ip_address = sys.argv[1] +get_efs_info(ip_address) + +``` +## Привілегії {{#ref}} ../aws-privilege-escalation/aws-efs-privesc.md {{#endref}} -## Post Exploitation +## Після експлуатації {{#ref}} ../aws-post-exploitation/aws-efs-post-exploitation.md {{#endref}} -## Persistence +## Постійність {{#ref}} ../aws-persistence/aws-efs-persistence.md