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, ayrıca 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, herhangi bir kaynak bağımlılığını dikkate alarak önerilen işlemleri doğru sırayla gerçekleştirir. Örneğin, bir VPC'nin özelliklerini günceller ve 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
komutunu ç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, bir 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çeren dış bir kaynağı yükleyebilirsiniz:
Rev shell kodunu https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules adresinde bulabilirsiniz.
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 uygulaması, 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 gerekiyor:
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:
Silinmesi gereken kaynağı, güncellenemeyecek şekilde 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.
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 de mümkündür. Orijinal araştırmadan örnek:
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 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.
tfsec: tfsec, terraform kodunuzun statik analizini kullanarak potansiyel yanlış yapılandırmaları tespit eder.
terascan: Terrascan, Kod Olarak Altyapı için bir statik kod analizörüdür.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Ekip Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Ekip Uzmanı (GRTE)