Kubernetes Network Attacks
Giriş
Kubernetes'te, aynı düğümde bulunan tüm konteynerler arasında bağlantı kurulmasına izin veren bir varsayılan davranış gözlemlenir. Bu, ad alanı ayrımlarına bakılmaksızın geçerlidir. Bu bağlantı, Katman 2 (Ethernet) seviyesine kadar uzanır. Sonuç olarak, bu yapılandırma potansiyel olarak sistemi güvenlik açıklarına karşı savunmasız bırakır. Özellikle, bu, kötü niyetli bir konteynerin, aynı düğümde bulunan diğer konteynerlere karşı bir ARP sahtekarlığı saldırısı gerçekleştirmesine olanak tanır. Bu tür bir saldırı sırasında, kötü niyetli konteyner, diğer konteynerler için tasarlanmış ağ trafiğini aldatıcı bir şekilde onları hedef alarak yakalayabilir veya değiştirebilir.
ARP sahtekarlığı saldırıları, yerel bir ağ üzerinde sahtekarlık yapılmış ARP (Adres Çözümleme Protokolü) mesajlarının gönderilmesini içerir. Bu, saldırganın MAC adresini ağdaki meşru bir bilgisayarın veya sunucunun IP adresiyle ilişkilendirmesine neden olur. Bu tür bir saldırının başarılı bir şekilde gerçekleştirilmesinden sonra, saldırgan veri iletimi sırasında veriyi yakalayabilir, değiştirebilir veya hatta durdurabilir. Saldırı, OSI modelinin Katman 2'sinde gerçekleştirildiği için Kubernetes'teki bu katmanda varsayılan bağlantı güvenlik endişelerine neden olur.
Senaryoda 4 makine oluşturulacak:
ubuntu-pe: Düğümden kaçmak ve metrikleri kontrol etmek için ayrıcalıklı makine (saldırı için gerekli değil)
ubuntu-attack: Varsayılan ad alanında kötü niyetli bir konteyner
ubuntu-victim: kube-system ad alanında hedef makine
mysql: Varsayılan ad alanında hedef makine
Temel Kubernetes Ağlama
Burada tanıtılan ağlama konuları hakkında daha fazla ayrıntı isterseniz, referanslara gidin.
ARP
Genel olarak, düğüm içindeki podlar arası ağlama, tüm podları birleştiren bir köprü aracılığıyla mümkündür. Bu köprü "cbr0" olarak adlandırılır. (Bazı ağ eklentileri kendi köprülerini kurar.) cbr0 ayrıca ARP (Adres Çözümleme Protokolü) çözümlemesini de yönetebilir. Gelen bir paket cbr0'a geldiğinde, ARP kullanarak hedef MAC adresini çözebilir.
Bu gerçek, varsayılan olarak, aynı düğümde çalışan her podun, ethernet seviyesinde (katman 2) aynı düğümdeki diğer herhangi bir podla iletişim kurabileceği anlamına gelir (namespace bağımsız).
Bu nedenle, aynı düğümdeki podlar arasında ARP Sahtekarlığı saldırıları gerçekleştirmek mümkündür.
DNS
Kubernetes ortamlarında genellikle kube-system ad alanında çalışan 1 (veya daha fazla) DNS hizmeti bulunur:
Önceki bilgilerde ilginç bir şey görebilirsiniz, hizmetin IP'si 10.96.0.10 ancak hizmeti çalıştıran pod'un IP'si 172.17.0.2.
Herhangi bir pod içinde DNS adresini kontrol ederseniz şuna benzer bir şey bulacaksınız:
Ancak, podun bu durumda 172.17.0.10/26 olan pod aralığındaki adrese nasıl ulaşacağını bilmiyor.
Bu nedenle, pod, DNS isteklerini 10.96.0.10 adresine gönderecek ve bu adres cbr0 tarafından 172.17.0.2'ye çevrilecek.
Bu, bir podun DNS isteğinin, DNS sunucusunun pod ile aynı alt ağda olması durumunda bile her zaman köprüye (bridge) gideceği ve hizmet IP'sini uç nokta IP'sine çevireceği anlamına gelir.
Bunu bilerek ve ARP saldırılarının mümkün olduğunu bilerek, bir düğümdeki bir pod, alt ağdaki her pod ile köprü arasındaki trafiği ele geçirebilecek ve DNS sunucusundan gelen DNS yanıtlarını değiştirebilecektir (DNS Sahteciliği).
Dahası, DNS sunucusu, saldırganla aynı düğümde bulunuyorsa, saldırgan, kümedeki herhangi bir podun (DNS sunucusu ile köprü arasındaki) tüm DNS isteklerini ele geçirebilir ve yanıtları değiştirebilir.
Aynı Düğümdeki Podlarda ARP Sahteciliği
Amacımız, ubuntu-victim ile mysql arasındaki iletişimi en azından çalmaktır.
Scapy
ARPSpoof
ARPSpoof, ağdaki diğer cihazların ARP (Address Resolution Protocol) tablosunu manipüle etmek için kullanılan bir saldırıdır. Bu saldırı, ağdaki cihazların iletişimini engelleyebilir veya yönlendirebilir.
Bu saldırıyı gerçekleştirmek için, saldırgan ağdaki diğer cihazlara sahte ARP yanıtları gönderir. Bu yanıtlar, saldırganın MAC adresini hedef cihazın IP adresiyle ilişkilendirir. Böylece, hedef cihaz, saldırganın MAC adresine yönlendirilen tüm trafiği gönderir.
ARPSpoof saldırısı, ağdaki trafiği izlemek, paketleri yakalamak veya hedef cihazın verilerini çalmak için kullanılabilir. Bu saldırı, ağ güvenliği açısından ciddi bir tehdit oluşturabilir ve ağ yöneticileri tarafından izlenmelidir.
ARPSpoof saldırısından korunmanın bir yolu, ağdaki tüm cihazların ARP tablolarını düzenli olarak kontrol etmek ve sahte ARP yanıtlarını tespit etmek için bir IDS (Intrusion Detection System) kullanmaktır. Ayrıca, ağdaki trafiği şifrelemek ve güvenliği artırmak için VPN (Virtual Private Network) kullanılabilir.
DNS Spoofing
Daha önce belirtildiği gibi, eğer aynı düğümdeki DNS sunucusu pod'unu ele geçirirseniz, ARPSpoofing ile köprüyü ve DNS pod'unu MitM yapabilir ve tüm DNS yanıtlarını değiştirebilirsiniz.
Bu işlemi test etmek için gerçekten güzel bir araç ve öğreticiye https://github.com/danielsagi/kube-dnsspoof/ adresinden ulaşabilirsiniz.
Senaryomuzda, saldırgan pod'a aracı indirin ve hosts
adında bir dosya oluşturun. Bu dosyada spoof yapmak istediğiniz alan adlarını belirtin:
Ubuntu-hedef makineye saldırı gerçekleştirin:
Kendi DNS sahtecilik betiğinizi oluşturmaya çalışıyorsanız, yalnızca DNS yanıtını değiştirirseniz bu işe yaramayacak, çünkü yanıt, kötü niyetli pod'un IP adresini içerecek ve kabul edilmeyecektir. Kurbanın DNS isteğini gönderdiği DNS'nin src IP'si ile birlikte yeni bir DNS paketi oluşturmanız gerekmektedir (bu genellikle 172.16.0.2 gibi bir şeydir, 10.96.0.10 ise K8s DNS hizmeti IP'sidir ve DNS sunucusu IP'si değildir, bununla ilgili daha fazla bilgiye girişte yer alan kaynaklardan ulaşabilirsiniz).
Trafik Yakalama
Mizu aracı, Kubernetes için basit ancak güçlü bir API trafik görüntüleyicisidir. Hata ayıklama ve geriye dönük sorun giderme için mikro hizmetler arasındaki tüm API iletişimini görüntülemenizi sağlar. Seçilen pod'lara ajanlar kuracak ve trafiğe ilişkin bilgileri toplayarak bunları bir web sunucusunda size gösterecektir. Bunun için yüksek K8s izinlerine ihtiyacınız olacak (ve çok gizli değildir).
Referanslar
Last updated