Translated ['src/pentesting-cloud/aws-security/aws-services/aws-efs-enum

This commit is contained in:
Translator
2025-02-02 18:22:49 +00:00
parent 9b4fd0910c
commit 1f90c62e98

View File

@@ -4,21 +4,21 @@
## EFS
### Taarifa za Msingi
### Basic Information
Amazon Elastic File System (EFS) inawasilishwa kama **sistema ya faili ya mtandao inayosimamiwa kikamilifu, inayoweza kupanuka, na elastiki** na AWS. Huduma hii inarahisisha uundaji na usanidi wa **sistema za faili** ambazo zinaweza kufikiwa kwa pamoja na EC2 instances nyingi na huduma nyingine za AWS. Vipengele muhimu vya EFS ni pamoja na uwezo wake wa kupanuka kiotomatiki bila kuingilia kati kwa mikono, kutoa ufikiaji wa latency ya chini, kusaidia mzigo wa kazi zenye kupitia nyingi, kuhakikisha kudumu kwa data, na kuunganishwa kwa urahisi na mifumo mbalimbali ya usalama ya AWS.
Amazon Elastic File System (EFS) inawasilishwa kama **sistema ya faili ya mtandao inayosimamiwa kikamilifu, inayoweza kupanuka, na elastiki** na AWS. Huduma hii inarahisisha uundaji na usanidi wa **sistema za faili** ambazo zinaweza kufikiwa kwa pamoja na mifano mingi ya EC2 na huduma nyingine za AWS. Vipengele muhimu vya EFS ni pamoja na uwezo wake wa kupanuka kiotomatiki bila kuingilia kati kwa mikono, kutoa ufikiaji wa latency ya chini, kusaidia mzigo wa kazi wa juu, kuhakikisha kudumu kwa data, na kuunganishwa kwa urahisi na mitambo mbalimbali ya usalama ya AWS.
Kwa **kawaida**, folda ya EFS ya kuunganisha itakuwa **`/`** lakini inaweza kuwa na **jina tofauti**.
### Ufikiaji wa Mtandao
### Network Access
EFS inaundwa katika VPC na itakuwa **kwa kawaida inapatikana katika subnetworks zote za VPC**. Hata hivyo, EFS itakuwa na Kundi la Usalama. Ili **kutoa ufikiaji kwa EC2** (au huduma nyingine yoyote ya AWS) kuunganisha EFS, inahitajika **kuruhusu katika kundi la usalama la EFS sheria ya NFS ya kuingia** (bandari 2049) **kutoka kwa Kundi la Usalama la EC2**.
EFS inaundwa katika VPC na itakuwa **kwa kawaida inapatikana katika mitandao yote ya VPC**. Hata hivyo, EFS itakuwa na Kundi la Usalama. Ili **kutoa ufikiaji kwa EC2** (au huduma nyingine yoyote ya AWS) kuunganisha EFS, inahitajika **kuruhusu katika kundi la usalama la EFS sheria ya NFS ya kuingia** (bandari 2049) **kutoka kwa Kundi la Usalama la EC2**.
Bila hii, **hutaweza kuwasiliana na huduma ya NFS**.
Kwa maelezo zaidi kuhusu jinsi ya kufanya hivi angalia: [https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount](https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount)
### Uhesabuji
### Enumeration
```bash
# Get filesystems and access policies (if any)
aws efs describe-file-systems
@@ -39,7 +39,7 @@ aws efs describe-replication-configurations
sudo nmap -T4 -Pn -p 2049 --open 10.10.10.0/20 # or /16 to be sure
```
> [!CAUTION]
> Inaweza kuwa kwamba EFS mount point iko ndani ya VPC hiyo hiyo lakini katika subnet tofauti. Ikiwa unataka kuwa na uhakika kwamba unapata **EFS points zote, itakuwa bora skana `/16` netmask**.
> Inaweza kuwa kwamba EFS mount point iko ndani ya VPC hiyo hiyo lakini katika subnet tofauti. Ikiwa unataka kuwa na uhakika kwamba unapata **EFS points zote itakuwa bora skana `/16` netmask**.
### Mount EFS
```bash
@@ -94,9 +94,9 @@ sudo mount -t efs -o tls,iam <file-system-id/EFS DNS name>:/ /efs/
```
### Access Points
**Access points** ni **vituo** maalum vya kuingia **katika mfumo wa faili wa EFS** vinavyorahisisha usimamizi wa ufikiaji wa programu kwa seti za data zinazoshirikiwa.
**Access points** ni **vituo** maalum vya kuingia **katika mfumo wa faili wa EFS** ambavyo vinarahisisha usimamizi wa ufikiaji wa programu kwa seti za data zinazoshirikiwa.
Unapounda kituo cha ufikiaji, unaweza **kueleza mmiliki na ruhusa za POSIX** kwa faili na saraka zinazoundwa kupitia kituo cha ufikiaji. Pia unaweza **kufafanua saraka ya mizizi ya kawaida** kwa kituo cha ufikiaji, ama kwa kueleza saraka iliyopo au kwa kuunda mpya yenye ruhusa zinazohitajika. Hii inakuwezesha **kudhibiti ufikiaji wa mfumo wako wa faili wa EFS kwa msingi wa programu au mtumiaji**, na kuifanya iwe rahisi kusimamia na kulinda data zako za faili zinazoshirikiwa.
Unapounda kituo cha ufikiaji, unaweza **kueleza mmiliki na ruhusa za POSIX** kwa faili na saraka zinazoundwa kupitia kituo cha ufikiaji. Pia unaweza **kufafanua saraka ya mizizi ya kawaida** kwa kituo cha ufikiaji, ama kwa kueleza saraka iliyopo au kwa kuunda mpya yenye ruhusa zinazohitajika. Hii inakuwezesha **kudhibiti ufikiaji wa mfumo wako wa faili wa EFS kwa msingi wa programu au mtumiaji**, na kufanya iwe rahisi kusimamia na kulinda data zako za faili zinazoshirikiwa.
**Unaweza kuunganisha Mfumo wa Faili kutoka kwa kituo cha ufikiaji kwa kitu kama:**
```bash
@@ -110,9 +110,107 @@ sudo mount -t efs -o tls,[iam],accesspoint=<access-point-id> \
Sehemu za ufikiaji zinaweza kutumika kwa madhumuni yafuatayo:
- **Rahisisha usimamizi wa ruhusa**: Kwa kufafanua mtumiaji wa POSIX na kundi kwa kila sehemu ya ufikiaji, unaweza kwa urahisi kusimamia ruhusa za ufikiaji kwa programu au watumiaji tofauti bila kubadilisha ruhusa za mfumo wa faili wa msingi.
- **Kuthibitisha saraka ya mzizi**: Sehemu za ufikiaji zinaweza kuzuia ufikiaji kwa saraka maalum ndani ya mfumo wa faili wa EFS, kuhakikisha kwamba kila programu au mtumiaji anafanya kazi ndani ya folda yake iliyotengwa. Hii husaidia kuzuia kufichuliwa au kubadilishwa kwa data kwa bahati.
- **Kuthibitisha saraka ya mzizi**: Sehemu za ufikiaji zinaweza kuzuia ufikiaji kwa saraka maalum ndani ya mfumo wa faili wa EFS, kuhakikisha kwamba kila programu au mtumiaji anafanya kazi ndani ya folda yake iliyotengwa. Hii husaidia kuzuia kufichuliwa au kubadilishwa kwa data kwa bahati mbaya.
- **Ufikiaji rahisi wa mfumo wa faili**: Sehemu za ufikiaji zinaweza kuunganishwa na kazi ya AWS Lambda au kazi ya AWS Fargate, rahisisha ufikiaji wa mfumo wa faili kwa programu zisizo na seva na zilizofungwa kwenye kontena.
## EFS IP anwani
Kwa kutumia taarifa zinazohusiana na anwani ya IP ya EFS, skripti ifuatayo ya Python inaweza kusaidia katika kupata maelezo kuhusu mfumo wa EFS. Taarifa hii ni muhimu kwa kujenga amri ya mfumo wa kuunganisha au kufanya uainishaji zaidi kwa maarifa ya ID ya subnet. Zaidi ya hayo, skripti inaonyesha sehemu za ufikiaji, ambazo zinaweza kuwa na thamani wakati saraka ya mzizi au njia kuu ya kuunganisha imezuiliwa. Katika hali kama hizo, sehemu za ufikiaji zinatoa njia mbadala za kufikia taarifa nyeti.
```bash
Usage: python efs_ip_enum.py <IP_ADDRESS>
```
```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 <IP_ADDRESS>")
sys.exit(1)
ip_address = sys.argv[1]
get_efs_info(ip_address)
```
## Privesc
{{#ref}}