Cezeri

Yönetici
1. BÖLÜM - TEHDİTLER HAKKINDA

Son yıllarda, konteynerizasyon teknolojileri yaygın hale geldi ve konteynerleri kontrol etmek için en ünlü çözüm haklı olarak Kubernetes (kısaltılmış hali K8s) olarak kabul edilmektedir. Kubernetes, konteyner uygulamaların otomatik dağıtım ve ölçeklendirilmesi sistemidir. Bu sistem, açık kaynaklı yazılım altyapısıyla oluşturulmuştur. Başlangıçta, bu çözüm 2014 yılından bu yana Google uzmanları tarafından geliştirildi ve şirketin iç sorunlarını çözmeyi amaçladı. Ancak, daha sonra Kubernetes açık kaynaklı çözüm haline geldi ve dünya çapında yaygınlaştı.

Kubernetes, konteynerlardan cluster'ları yönetmek için bir sistem olarak, olaylara gerçek zamanlı olarak yanıt vermek, “düşmüş” hizmetleri canlandırmak ve istek üzerine ölçeklendirmeye olanak tanıyan dinamik bir çözümdür. Özellikle Kubernetes'in stabil çalışma açısından avantajları geliştiriciler tarafından değerlendirildi. Örnek olarak, konteynere yerleştirilmiş bir uygulamanın hafızası “sızdırmaya” başlaması gibi bir hikaye belirtilebilir. Ancak, geliştiriciler bunu sadece birkaç ay sonra, uygulamanın günlükleriyle (loglarıyla) ilgilenmeye başladıklarında öğrendiler. Ve bunca zaman, Kubernetes konteynerdeki bu uygulamaları düzenli olarak takip etti ve uygulamalarının donma durumunda bu uygulamaları hemen tekrar çalıştırdı. Dolayısıyla, bu sistem konteyner uygulamalarının canlılığını mükemmel bi şekilde sağlayabilir.
Genel olarak, K8s çeşitli düzeyde olan kuruluşlarda modern DevOps ortamlar için bir standart olarak adlandırılabilir. Örneğin, Kubernetes AWS, Microsoft Azure veya Google Cloud gibi bulut hizmetlerinde kullanılabilmektedir.


KUBERNETES YAPISI

Ancak, herhangi bir yazılım gibi Kubernetes de güvenlik sorunlarından yoksun değildir. Ancak, bu sorunlar hakkında konuşmaya başlamadan önce, bu çözümün mimarisiyle tanışmanız gerekir. Şematik olarak, Kubernetes mimarisinin ana bileşenleri aşağıdaki görselde sunulmaktadır.

1695815282182.png

Kubernetes yönetiminin temel kavramı, pod (pods) kavramıdır. Pod, hem mikro servis hem de çeşitli makinelerde çalışan ciddi bir uygulama olabilen ve ortak bir görevle birleştirilen bir konteyner grubudur. K8S, yükü cluster'lar arasında geçerli yüke, belirli hizmetlere ihtiyacında ve yük dengelemeye gibi bağlı kriterlere göre konteynerları yeniden dağıtır.

K8s ana bileşenleri şunlardır:

Master Node - Pod'ların tüm cluster'ını kontrol eden ana sunucudur.
Worker Node - Uygulama konteynerlerinin ve Kubernetes'in diğer bileşenlerinin başlatıldığı çalışma sunucularıdır.
Pods - Kubernetes'in çalıştığı ve kendi IP adresine sahip olduğu ana öğedir.
Services - Cluster'in çalışmasını sağlayan ağ hizmetleridir.
System Components - Kubernetes cluster'ını kontrol etmek için kullanılan anahtar sistem bileşenleridir.

Özetle, Kubernetes tarafından çözülen ana görevlerin, birçok fiziksel makinedeki çok sayıda konteynerin başlatılması ve kontrolü olduğunu, konteynerlerin durumunu izleyerek ve değişikliklere zamanında yanıt vermek bir de cluster'ın içindeki konteynerleri ölçeklendirme ve dengeleme olduğunu belirtmek gerekir.


KUBERNETES (K8S) GÜVENLİK AÇIKLARI/ZAFİYETLERİ NELERDİR?

Şimdi güvenlik sorunlarına geçelim. Ancak K8s kendisinin güvenlik açıklarıyla değil, mevcut türlerini anlamakla başlayacağız.
Tüm güvenlik açıkları/zafiyetleri üç türe ayrılabilir:
  • Tasarım
  • Geliştirme
  • Kullanım/Operasyonel
Tasarım Zafiyetleri
Bir yazılım ürünü, protokol, cihaz mimarisinin yapımında yapılan hatalardır (örneğin, tüm verilerin Telnet, HTTP, FTP protokolleri üzerinden şifreleme olmadan aktarılması). Yani, çözümün mimarisini oluştururken mimarları ve tasarımcıları tarafından yapılan hatalardır.

Geliştirme Zafiyetleri
Bir çözüm oluştururken geliştiriciler tarafından yapılan hatalardır. Örneğin, Buffer Overflow hataları, format string zafiyetleri vb. Aslında, bunlar bir uygulama kodu yazarken yazılımcıların yaptığı hatalardır.

Kullanım/Operasyonel Zafiyetler
Bir yazılım ürününün, protokolün, cihazın vb. çalışması sırasında yapılan hatalardır. Örneğin, varsayılan şifreleri ve varsayılan güvenlik ayarları, güvenli olmayan hizmetlerin kullanımı, basit şifreler vb. Sistemin ne kadar iyi tasarlandığı ve geliştirildiği bazı noktalarda yetersiz kalabiliyor. Çünkü, güvensiz ayarlar güvenliğinin genel seviyesini önemli ölçüde azaltabilir.

Kubernetes (K8S) Tasarım Zafiyetleri

Tasarımın güvenlik açıklarıyla başlayalım. Tabi ki, K8S mimarisini baştan savunmasız olarak adlandıramazsınız. Yukarıdaki şemadan görülebileceği gibi, Kubernetes birkaç bileşenden oluşan oldukça karmaşık bir mimariye sahiptir ve elbette, saldırganlar belirli bir uygulamanın mimari özelliklerini kullanabildiklerinde, hedeflerini yerine getirebilirler. Örneğin, konteynerler birbirinden bağımsız birkaç cloud'da dinamik olarak dağıtılırsa, bu cluster'ın içindeki veri alışverişinin trafiğini önemli ölçüde artırabilir. Konteynerlerin coğrafi olarak birbirinden uzakta olduğunu bilen hacker, cloud'lar arasındaki kanala DDOS saldırısını gerçekleştirmek için cloud'lardan birindeki konteynerleri devre dışı bırakır ve konteynerler hareket edip kanalda bir yük oluşturur.

Kubernetes (K8S) Geliştirme (Uygulama) Zafiyetleri

Tasarımın güvenlik açıklarından farklı olarak, geliştiricilerin hatalarını tespit etmek biraz daha basittir, ancak bu işi kolaylaştırmıyor.
Örneğin, Kubernetes'i yönetmek için kullanılan ve arayüz sorunları olan kubectl komutundaki CVE-2019-1002101 güvenlik zafiyetini ele alalım. CP kopyalama komutu aracılığıyla yapılan kopyalama işlemi sırasında konteynerde binary tar arşivi oluşturulur. Daha sonra bu arşiv ağ üzerinden iletilir ve kullanıcı cihazında kubectl aracılığıyla açılır. Ancak, konteynerde zararlı bir tar dosyası varsa, bir saldırgan sistemin herhangi bir yerine herhangi bir dosya yerleştirebilir, gizli bilgileri çalabilir ve root hakları da dahil olmak üzere kubectl yetkileriyle herhangi bir uygulama başlatabilir.

Başka bir güvenlik açığı olan CVE-2019-5736, enfekte olmuş bir konteynere ana bilgisayardaki çalıştırılabilir bir dosyanın üzerine yazma ve bu dosyaya root erişimi elde etme yeteneği veriyor.

Mart 2019'da bir önceki açığa benzeyen CVE-2019-11246 güvenlik açığı keşfedilmiş. Normal kubectl cp komutunu kullanarak saldırgan pod'tan operatörün bilgisayarına dosyaları yükleyebilir veya çalıştırılabilir binary TAR dosyasını değiştirerek, bu dosyaları değiştirebilir.

CVE güvenlik zafiyeti veritabanları gibi özel kaynaklarda, Kubernetes'in program kodundaki zafiyetleri exploit etmek için birçok farklı seçenek bulabilirsiniz. Dahası, birçok güvenlik zafiyeti zaten 2022 veya 2023 tarihli olup taze olacaktır. Bununla birlikte, kural olarak, geliştiriciler tüm bu güvenlik açıklarına hızlı bir şekilde yamalar üretir ve güvenlik açıklarının yayınlandığı sırada bu güncellemeler zaten yayınlanmış olur. Bu nedenle, güvenlik güncellemeleri zamanında yüklenirse, bu güvenlik açıklarının başarılı bir şekilde çalışması tehdidi önemli ölçüde azaltabilir.

Kubernetes (K8S) Operasyonel/Kullanım Zafiyetleri

Güvenli olmayan ayarlarından kaynaklanan güvenlik açıklarını tespit etmek genellikle daha zordur. Örnek olarak, bir konteynerin saldırganların eline geçirmesi tarzında bir saldırı olabilir. Cluster'daki konteynerler güvensiz olarak ayarlandıysa, yani basit parolalar, güvensiz hizmetler veya savunmasız uygulamalar kullanıldıysa, bireysel konteynerlere erişim kazanan saldırganlar tüm uygulamayı veya bileşenlerinin önemli bir kısmını eline geçirebilir. Halbuki konteynerde izole kod çalıştırma olasılığı, Kubernetes'in ana özelliklerinden biridir.

Cluster'in yanlış ayarlanmasının sonucu, tek bir cluster'ın içindeki pod'ların arasında yetkisiz bağlantılar olasılığı çıkmaktadır. Bu durumda, saldırganın eline geçen konteynerler, herhangi bir saldırı başlatmak için kendi veya başka bir ana host'ta olan konteynerlerle bağlantı kurabilir. Böyle bir saldırı pod'ları L2 veya L3'e bölünmesiyle önlenebilir, ancak bazı durumlarda bu saldırının uygulanması oldukça mümkündür.


SONUÇ

Bu yazımızda Kubernetes çözümünün ne olduğundan bahsettik, mimarisinin ana bileşenlerine baktık ve yazılım bileşenlerinde bulunabilecek güvenlik zafiyetlerinin türlerini ve bunların ayarlarını tartıştık.

Bir sonraki yazımızda K8 zafiyetleri ve güvenli olmayan ayarları nasıl tespit edebileceğinizi ve olası saldırılardan kendinizi nasıl koruyabileceğinize bakacağız.
 
Üst