Terraform Security
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HashiCorp Terraform, kod olarak altyapı aracıdır ve 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, tüm altyapınızı yaşam döngüsü boyunca 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önetebilir ve DNS girişleri ve SaaS özellikleri gibi yüksek seviyeli bileşenleri de yönetebilir.
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.
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 ü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 ö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ını dikkate alarak ö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.
Bilgisayarınıza terraform'u kurun.
Burada bir rehber ve burada terraform'u indirmenin en iyi yolu var.
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.
Ancak, terraform, düzgün çalışabilmesi için farklı konumlara ayrılmış 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:
Atlantis SecurityEğer 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.
Terraform planı, terraform'da en çok kullanılan komutdur ve 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.
Dış sağlayıcı kullanarak
Terraform, Terraform ile dış programlar arasında bir arayüz sağlamak için external
sağlayıcısını sunar. plan
sırasında rastgele kod çalıştırmak için external
veri kaynağını kullanabilirsiniz.
Aşağıdaki gibi bir şeyi terraform yapılandırma dosyasına enjekte etmek, terraform plan
çalıştırıldığında bir rev shell çalıştıracaktır:
Özel bir sağlayıcı kullanma
Bir saldırgan, Terraform Registry 'ye bir özel sağlayıcı gönderebilir ve ardından bunu bir özellik dalındaki Terraform koduna ekleyebilir (buradan örnek):
Sağlayıcı init
içinde indirilir ve plan
çalıştırıldığında kötü niyetli kodu çalıştırır.
Bir örneği https://github.com/rung/terraform-provider-cmdexec adresinde bulabilirsiniz.
Dış bir referans kullanma
Bahsedilen her iki seçenek de faydalıdır ancak çok gizli değildir (ikincisi daha gizli ama birincisinden 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:
You can find the rev shell code in 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
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** ile enjekte ederek RCE elde etmek için de kötüye kullanılabilir.**
Sadece aşağıdaki gibi bazı yüklerin main.tf
dosyasında sona erdiğinden emin olmanız gerekir:
Aşağıdaki önceki teknikten gelen önerileri takip ederek bu saldırıyı daha gizli bir şekilde dış referanslar kullanarak gerçekleştirin.
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 durum dosyalarına yazma erişiminiz varsa ancak terraform kodunu değiştiremiyorsanız, bu araştırma dosyadan yararlanmak için bazı ilginç seçenekler sunmaktadır:
Kaynakları yok etmenin 2 yolu vardır:
Gerçek silinecek kaynağa işaret eden rastgele bir isimle durum dosyasına 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:
Silinecek kaynağı, güncellenemeyecek şekilde değiştirme (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.
Ayrıca, özel bir sağlayıcı oluşturmak 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:
hashicorp/external
'ın blacklist'e alındığı 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 adresinde yayınlanan external sağlayıcısının bir fork'unu kullanıyoruz. Kendi fork'unuzu veya yeniden uygulamanızı da yayınlayabilirsiniz.
Sonra external
'ı normal şekilde kullanabilirsiniz.
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.
Özellikler:
Güvenlik açıkları ve uyumluluk sorunları için gerçek zamanlı tarama.
Versiyon kontrol sistemleriyle (GitHub, GitLab, Bitbucket) entegrasyon.
Otomatik düzeltme pull istekleri.
Ayrıntılı düzeltme tavsiyeleri.
Kaydolun: Snyk üzerinde bir hesap oluşturun.
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şimi analizi (SCA) aracıdır.
Terraform kullanılarak sağlanan bulut altyapısını, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates veya OpenTofu kullanarak tarar ve grafik tabanlı tarama ile güvenlik ve uyumluluk 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şimi Analizi (SCA) taraması gerçekleştirir.
From the docs: 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.
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 kurun veya docker
üzerinden çalıştırın. Kurulum 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.
Maalesef, 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.
From the docs: 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
⛔ Yüzlerce yerleşik kural
🪆 Modülleri tarar (yerel ve uzaktan)
➕ HCL ifadelerini ve literal değerleri değerlendirir
↪️ Terraform fonksiyonlarını değerlendirir örn. 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: güzel (varsayılan), JSON, SARIF, CSV, CheckStyle, JUnit, metin, 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
Geliştirme döngüsünün erken aşamalarında KICS ile altyapınızın kodu olarak güvenlik açıklarını, uyumluluk sorunlarını ve altyapı yanlış yapılandırmalarını bulun.
KICS, Keeping Infrastructure as Code Secure'in kısaltmasıdır, açık kaynaklıdır ve herhangi bir bulut yerel proje için gereklidir.
From the docs: Terrascan, Kod Olarak Altyapı için statik bir kod analizörüdür. Terrascan, şunları yapmanıza olanak tanır:
Yanlış yapılandırmalar için altyapıyı kod olarak sorunsuz bir şekilde tarayın.
Sağlanan bulut altyapısını, duruş kayması oluşturan yapılandırma değişiklikleri için izleyin ve güvenli bir duruşa geri dönmeyi sağlayın.
Güvenlik açıklarını ve uyum ihlallerini tespit edin.
Bulut yerel altyapıyı sağlamadan önce riskleri azaltın.
Yerel olarak çalıştırma veya CI\CD'nizle entegre etme esnekliği sunar.
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Ekip Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Ekip Uzmanı (GRTE)