Kubernetes Network Attacks
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)
Kubernetes'te, aynı düğümde bulunan tüm konteynerler arasında bağlantı kurulmasına izin veren varsayılan bir davranışın gözlemlendiği görülmektedir. Bu, namespace farklılıklarına bakılmaksızın geçerlidir. Bu tür bir bağlantı, Layer 2 (Ethernet) seviyesine kadar uzanır. Sonuç olarak, bu yapılandırma sistemi potansiyel olarak zafiyetlere maruz bırakmaktadır. Özellikle, kötü niyetli bir konteynerin aynı düğümde bulunan diğer konteynerlere karşı bir ARP sahtekarlığı saldırısı gerçekleştirme olasılığını açar. Böyle bir saldırı sırasında, kötü niyetli konteyner, diğer konteynerler için hedeflenen ağ trafiğini aldatıcı bir şekilde kesebilir veya değiştirebilir.
ARP sahtekarlığı saldırıları, saldırganın yerel alan ağında sahte ARP (Adres Çözümleme Protokolü) mesajları göndermesini içerir. Bu, saldırganın MAC adresinin ağdaki meşru bir bilgisayar veya sunucunun IP adresiyle ilişkilendirilmesine yol açar. Böyle bir saldırının başarılı bir şekilde gerçekleştirilmesinin ardından, saldırgan verileri kesebilir, değiştirebilir veya hatta durdurabilir. Saldırı, OSI modelinin Layer 2'sinde gerçekleştirilir, bu nedenle Kubernetes'teki varsayılan bağlantı bu katmanda güvenlik endişeleri doğurmaktadır.
Senaryoda 4 makine oluşturulacaktır:
ubuntu-pe: Düğüme kaçmak ve metrikleri kontrol etmek için ayrıcalıklı makine (saldırı için gerekli değil)
ubuntu-attack: Kötü niyetli konteyner varsayılan namespace'te
ubuntu-victim: kube-system namespace'inde Kurban makine
mysql: varsayılan namespace'te Kurban makine
Eğer burada tanıtılan ağ konuları hakkında daha fazla detay istiyorsanız, referanslara gidin.
Genel olarak, düğüm içindeki pod-pod ağı tüm pod'ları bağlayan bir köprü aracılığıyla mevcuttur. Bu köprü “cbr0” olarak adlandırılır. (Bazı ağ eklentileri kendi köprülerini kuracaktır.) cbr0, ARP (Adres Çözümleme Protokolü) çözümlemesini de gerçekleştirebilir. cbr0'a gelen bir paket geldiğinde, hedef MAC adresini ARP kullanarak çözümleyebilir.
Bu durum, varsayılan olarak, aynı düğümde çalışan her pod'un iletişim kurabileceği anlamına gelir; bu, aynı düğümdeki herhangi bir diğer pod ile (namespace'den bağımsız olarak) ethernet seviyesinde (katman 2) iletişim kurabileceği anlamına gelir.
Bu nedenle, aynı düğümdeki podlar arasında ARP Spoofing saldırıları gerçekleştirmek mümkündür.
Kubernetes ortamlarında genellikle 1 (veya daha fazla) DNS hizmetinin çalıştığını göreceksiniz, genellikle kube-system namespace'inde:
Önceki bilgide ilginç bir şey görebilirsiniz, servisin IP'si 10.96.0.10 ama servisi çalıştıran pod'un IP'si 172.17.0.2.
Herhangi bir pod içinde DNS adresini kontrol ederseniz, şöyle bir şey bulacaksınız:
Ancak, pod o adrese nasıl ulaşacağını bilmez çünkü bu durumda pod aralığı 172.17.0.10/26'dır.
Bu nedenle, pod DNS isteklerini 10.96.0.10 adresine gönderecek ve bu istek cbr0 tarafından 172.17.0.2'ye çevrilecektir.
Bu, bir podun DNS isteğinin her zaman servis IP'sini endpoint IP'sine çevirmek için köprüye gideceği anlamına gelir, DNS sunucusu pod ile aynı alt ağda olsa bile.
Bunu bilerek ve ARP saldırılarının mümkün olduğunu bilerek, bir pod bir düğümde her podun alt ağdaki ve köprüdeki trafiği yakalamak ve DNS sunucusundan gelen DNS yanıtlarını değiştirmek için yeteneğe sahip olacaktır (DNS Spoofing).
Ayrıca, eğer DNS sunucusu saldırganla aynı düğümde ise, saldırgan kümedeki herhangi bir podun tüm DNS isteklerini (DNS sunucusu ile köprü arasında) yakalayabilir ve yanıtları değiştirebilir.
Amacımız, en azından ubuntu-victim ile mysql arasındaki iletişimi çalmak.
Daha önce belirtildiği gibi, eğer DNS sunucu pod'unun aynı düğümünde bir pod'u ele geçirirseniz, ARPSpoofing ile köprü ve DNS pod'u arasında MitM yapabilir ve tüm DNS yanıtlarını değiştirebilirsiniz.
Bunu test etmek için gerçekten güzel bir araç ve öğretici var https://github.com/danielsagi/kube-dnsspoof/
Senaryomuzda, saldırgan pod'da aracı indirin ve spoof yapmak istediğiniz alan adları ile birlikte ** hosts
** adında bir dosya oluşturun:
Ubuntu-victim makinesine saldırıyı gerçekleştir:
Kendi DNS spoofing scriptinizi oluşturmaya çalışırsanız, eğer sadece DNS yanıtını değiştirirseniz bu çalışmayacak, çünkü yanıt kötü niyetli podun IP adresi olan bir src IP içerecek ve kabul edilmeyecek. Kurbanın DNS isteğini gönderdiği DNS'in src IP'si ile yeni bir DNS paketi oluşturmanız gerekiyor (bu, 172.16.0.2 gibi bir şeydir, 10.96.0.10 değil, bu K8s DNS hizmetinin IP'sidir ve DNS sunucusunun IP'si değildir, bununla ilgili daha fazla bilgi giriş bölümünde).
Mizu aracı, mikro hizmetler arasındaki tüm API iletişimini görmenizi sağlayan basit ama güçlü bir API trafik görüntüleyicisidir. Bu, hata ayıklamanıza ve gerilemeleri çözmenize yardımcı olur. Seçilen podlarda ajanlar kuracak ve trafik bilgilerini toplayarak bir web sunucusunda gösterecektir. Ancak, bunun için yüksek K8s izinlerine ihtiyacınız olacak (ve çok gizli değil).
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)