Terraform Security
Last updated
Last updated
HashiCorp Terraform, insan tarafından okunabilir yapılandırma dosyalarında bulut ve yerinde kaynakları tanımlamanıza olanak tanıyan bir altyapı kodu aracıdır. Bu dosyaları sürümleyebilir, yeniden kullanabilir ve paylaşabilirsiniz. Ardından, tüm altyapınızın yaşam döngüsü boyunca bir tutarlı iş akışını kullanarak altyapınızı sağlamlaştırabilir ve yönetebilirsiniz. Terraform, hesaplama, depolama ve ağ kaynakları gibi düşük seviyeli bileşenleri yönetebilirken, DNS girişleri ve SaaS özellikleri gibi yüksek seviyeli bileşenleri de yönetebilir.
Terraform, bulut platformlarında ve diğer hizmetlerde kaynakları oluşturur ve yönetirken uygulama programlama arayüzleri (API'ler) aracılığıyla çalışır. Sağlananlar, Terraform'un erişilebilir bir API ile neredeyse herhangi bir platform veya hizmetle çalışmasını sağlar.
HashiCorp ve Terraform topluluğu 1700'den fazla sağlayıcı yazmıştır ve binlerce farklı türde kaynağı ve hizmeti yönetmek için bu sayı devam etmektedir. Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog ve daha birçok sağlayıcıyı içeren tüm genel olarak kullanılabilir sağlayıcıları Terraform Registry üzerinde bulabilirsiniz.
Temel Terraform iş akışı üç aşamadan oluşur:
Yazma: Kaynakları tanımlarsınız, bu kaynaklar birden fazla bulut sağlayıcı ve hizmette olabilir. Örneğin, bir uygulamayı sanal makinelerde bir Sanal Özel Ağ (VPC) ağındaki güvenlik grupları ve bir yük dengeleyici ile dağıtmak için bir yapılandırma oluşturabilirsiniz.
Planlama: Terraform, mevcut altyapı ve yapılandırmanıza dayanarak oluşturacağı, güncelleyeceği veya sileceği altyapıyı tanımlayan bir yürütme planı oluşturur.
Uygulama: Onaylandığında, Terraform önerilen işlemleri doğru sırayla gerçekleştirir ve herhangi bir kaynak bağımlılığını dikkate alır. Örneğin, bir VPC'nin özelliklerini güncellerseniz ve bu VPC'deki sanal makinelerin sayısını değiştirirseniz, Terraform önce VPC'yi yeniden oluşturacak ve ardından sanal makineleri ölçeklendirecektir.
Sadece bilgisayarınıza terraform yükleyin.
İşte bir kılavuz ve işte terraform'ı indirmenin en iyi yolu.
Terraform'ın bir web sayfası veya ağ hizmeti sunan bir platformu yoktur, bu nedenle terraform'ı kompromize etmenin tek yolu terraform yapılandırma dosyalarını ekleyebilmek/değiştirebilmektir.
Ancak, terraform, farklı konumlara ayrıcalıklı erişim sağlayacak şekilde çalışabilmesi için çok hassas bir bileşendir.
Bir saldırganın terraform'ın çalıştığı sistemdeki sistemi kompromize edebilmesi için temel yol, terraform yapılandırmalarını depolayan depoyu kompromize etmesidir, çünkü bir noktada bunlar yorumlanacaklardır.
Aslında, bir PR oluşturulduktan sonra otomatik olarak terraform plan/apply işlemini gerçekleştiren çözümler vardır, örneğin Atlantis:
Bir terraform dosyasını ele geçirebilirseniz, birisi terraform plan
veya terraform apply
çalıştırdığında farklı yollarla RCE gerçekleştirebilirsiniz.
Terraform plan, terraform'da en çok kullanılan komuttur ve geliştiriciler/terraform kullanan çözümler sürekli olarak bunu çağırır, bu nedenle RCE almanın en kolay yolu, bir terraform plan
sırasında keyfi komutları çalıştıracak şekilde zehirlemiş bir terraform yapılandırma dosyası oluşturmaktır.
Terraform, Terraform ve harici programlar arasında bir arayüz sağlayan external
sağlayıcıyı sunar. external
veri kaynağını kullanarak bir plan
sırasında keyfi kod çalıştırabilirsiniz.
Bir terraform yapılandırma dosyasına aşağıdakine benzer bir şey enjekte etmek, terraform plan
çalıştırıldığında bir ters shell çalıştıracaktır:
Bir saldırgan, özel bir sağlayıcıyı Terraform Registry'e gönderebilir ve daha sonra bunu bir özellik dalında Terraform koduna ekleyebilir (buradan örnek):
Sağlayıcı init
te indirilir ve plan
çalıştırıldığında kötü amaçlı kodu çalıştıracaktır.
Örneği https://github.com/rung/terraform-provider-cmdexec adresinde bulabilirsiniz.
Bahsedilen her iki seçenek de faydalıdır ancak çok gizli değildir (ikincisi birinci seçeneğe göre daha gizli ancak daha karmaşıktır). Bu saldırıyı hatta daha gizli bir şekilde gerçekleştirebilirsiniz, aşağıdaki önerileri takip ederek:
Terraform dosyasına doğrudan ters kabuk eklemek yerine, ters kabuğu içeren harici bir kaynağı yükleyebilirsiniz:
Rev shell kodunu https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules adresinde bulabilirsiniz.
Dış kaynağı kullanırken, ref özelliğini kullanarak repo içinde bir dalda terraform rev shell kodunu gizlemek için şöyle bir şey yapabilirsiniz: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Tüm değişiklikleri uygulamak için Terraform apply komutu çalıştırılacaktır, ayrıca yerel yürütme ile RCE elde etmek için kötü niyetli bir Terraform dosyası enjekte edebilirsiniz.
Sadece aşağıdaki gibi bir payload'ın main.tf
dosyasında yer aldığından emin olmanız yeterlidir:
terraform apply
komutunu çalıştırarak terraform tarafından kullanılan gizli değerlerin sızdırılmasını sağlamak için terraform dosyasına şöyle bir şey ekleyebilirsiniz:
Eğer terraform durum dosyaları üzerinde yazma erişiminiz varsa ancak terraform kodunu değiştiremiyorsanız, bu araştırma dosyadan faydalanmanın bazı ilginç seçeneklerini sunar:
Kaynakları yok etmek için 2 yol vardır:
Gerçek kaynağa işaret eden rastgele bir isimle bir kaynak durum dosyasına ekleyin
Çünkü terraform, kaynağın var olmaması gerektiğini görecek ve onu yok edecektir (belirtilen gerçek kaynak kimliğini takip ederek). Önceki sayfadaki örnek:
Kaynağı silmek için değiştirin, güncellenemeyecek şekilde (böylece silinecek ve yeniden oluşturulacak)
Bir EC2 örneği için, örneğin türünü değiştirmek, terraform'un silip yeniden oluşturmasını sağlamak 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ıyla boş bir kaynak eklemek de mümkündür. Özgün araştırmadan bir örnek:
Eğer hashicorp/external
durumunda kara listeye alındığınız bir durumla karşılaşırsanız, aşağıdakileri yaparak external
sağlayıcısını yeniden uygulayabilirsiniz. Not: https://registry.terraform.io/providers/nazarewk/external/latest adresinde yayınlanan dış sağlayıcı çatalını kullanıyoruz. Kendi çatalınızı yayınlayabilir veya yeniden uygulayabilirsiniz.
Ardından external
'ı normal şekilde kullanabilirsiniz.
tfsec: tfsec, terraform kodunuzu statik analiz ederek potansiyel yanlış yapılandırmaları tespit etmek için kullanır.
terascan: Terrascan, Altyapı olarak Kod için bir statik kod analizcisi.