Kubernetes Enumeration
Kubernetes Tokenları
Eğer bir makineye erişimi ele geçirdiyseniz, kullanıcının bir Kubernetes platformuna erişimi olabilir. Token genellikle KUBECONFIG
ortam değişkeni tarafından işaret edilen bir dosyada veya ~/.kube
içinde bulunur.
Bu klasörde, API sunucusuna bağlanmak için tokenlar ve yapılandırmalar içeren yapılandırma dosyaları bulabilirsiniz. Bu klasörde ayrıca daha önce alınmış bilgilerin bulunduğu bir önbellek klasörü de bulunabilir.
Eğer bir Kubernetes ortamında bir pod ele geçirdiyseniz, mevcut K8 ortamı hakkında tokenlar ve bilgiler bulabileceğiniz başka yerler de vardır:
Hizmet Hesabı Tokenları
Devam etmeden önce, Kubernetes'te bir hizmetin ne olduğunu bilmiyorsanız, bu bağlantıyı takip edin ve en azından Kubernetes mimarisi hakkındaki bilgileri okuyun.
Kubernetes belgelerinden alınan:
"Bir pod oluşturduğunuzda, bir hizmet hesabı belirtmezseniz, aynı ad alanında varsayılan hizmet hesabı otomatik olarak atanır."
ServiceAccount, Kubernetes tarafından yönetilen ve bir podda çalışan süreçlere kimlik sağlamak için kullanılan bir nesnedir. Her hizmet hesabının ona ilişkin bir sır vardır ve bu sır bir taşıyıcı belirteci içerir. Bu, iki taraf arasında güvenli bir şekilde talepleri temsil etmek için kullanılan bir JSON Web Token (JWT) yöntemidir.
Genellikle aşağıdaki dizinlerden biri:
/run/secrets/kubernetes.io/serviceaccount
/var/run/secrets/kubernetes.io/serviceaccount
/secrets/kubernetes.io/serviceaccount
aşağıdaki dosyaları içerir:
ca.crt: Kubernetes iletişimlerini kontrol etmek için CA sertifikasıdır
namespace: Geçerli ad alanını belirtir
token: Geçerli podun hizmet belirtecini içerir.
Artık belirtece sahip olduğunuza göre, API sunucusunu KUBECONFIG
ortam değişkeni içinde bulabilirsiniz. Daha fazla bilgi için (env | set) | grep -i "kuber|kube
"
komutunu çalıştırın.
Hizmet hesabı belirteci, sa.key dosyasında bulunan anahtar tarafından imzalanır ve sa.pub tarafından doğrulanır.
Kubernetes'te varsayılan konum:
/etc/kubernetes/pki
Minikube'de varsayılan konum:
/var/lib/localkube/certs
Sıcak Podlar
Sıcak podlar, ayrıcalıklı bir hizmet hesabı belirteci içeren podlardır. Ayrıcalıklı bir hizmet hesabı belirteci, gizli bilgileri listeleme, podlar oluşturma vb. gibi ayrıcalıklı görevleri yapma iznine sahip bir belirteçtir.
RBAC
RBAC'ın ne olduğunu bilmiyorsanız, bu bölümü okuyun.
Numaralandırma Hile Kağıdı
Bir K8s ortamını numaralandırmak için aşağıdakilere ihtiyacınız vardır:
Bir geçerli kimlik doğrulama belirteci. Önceki bölümde bir kullanıcı belirteci ve bir hizmet hesabı belirteci için nerede arama yapılacağını gördük.
Kubernetes API'nin adresi (https://host:port). Bu genellikle ortam değişkenlerinde ve/veya kube yapılandırma dosyasında bulunabilir.
İsteğe bağlı: API sunucusunu doğrulamak için ca.crt. Bu, belirtecin bulunduğu yerlerde bulunabilir. API sunucusu sertifikasını doğrulamak için kullanışlıdır, ancak
kubectl
ile--insecure-skip-tls-verify
veyacurl
ile-k
kullanarak bunu yapmanıza gerek yok.
Bu ayrıntılarla Kubernetes'i numaralandırabilirsiniz. API, bir şekilde İnternet üzerinden erişilebilir ise, bu bilgileri indirip platformu kendi makinenizden numaralandırabilirsiniz.
Ancak genellikle API sunucusu iç ağda bulunduğundan, erişimi ele geçirilen makineden API sunucusuna erişmek için bir tünel oluşturmanız veya kubectl ikilisini yüklemeniz veya curl/wget/herhangi bir şey
kullanarak API sunucusuna doğrudan HTTP istekleri yapmanız gerekecektir.
list
ve get
fiilleri arasındaki farklar
list
ve get
fiilleri arasındaki farklarget
izinleriyle belirli varlıkların bilgilerine erişebilirsiniz (kubectl
'deki describe
seçeneğiyle). API:
Eğer list
iznine sahipseniz, bir varlık türünü listelemek için API isteklerini gerçekleştirmenize izin verilir (kubectl
komutunda get
seçeneği):
Eğer watch
izniniz varsa, varlıkları izlemek için API isteklerini gerçekleştirmenize izin verilir:
Değiştiğinde (veya yeni bir tane oluşturulduğunda) bir Deployment'ın tam manifestini size döndüren bir akış bağlantısı açarlar.
Aşağıdaki kubectl
komutları sadece nesneleri listelemek için nasıl kullanılacağını gösterir. Verilere erişmek istiyorsanız get
yerine describe
kullanmanız gerekmektedir.
Curl kullanarak
Bir pod içinden, birkaç çevre değişkeni kullanabilirsiniz:
Varsayılan olarak, pod kube-api sunucusuna kubernetes.default.svc
alan adı üzerinden erişebilir ve kube ağına /etc/resolv.config
dosyasında erişebilirsiniz, burada kubernetes DNS sunucusunun adresini bulacaksınız (aynı aralığın ".1" noktası kube-api uç noktasıdır).
kubectl Kullanarak
Token ve API sunucusunun adresine sahip olduğunuzda, burada belirtildiği gibi kubectl veya curl kullanarak erişebilirsiniz:
Varsayılan olarak, APISERVER https://
şemasıyla iletişim kurar
Eğer URL'de
https://
yoksa, Kötü İstek gibi bir hata alabilirsiniz.
Burada resmi bir kubectl hile yaprağı bulabilirsiniz. Aşağıdaki bölümlerin amacı, erişim sağladığınız yeni K8s'yi sıralı bir şekilde numaralandırmak ve anlamaktır.
kubectl
'nin gönderdiği HTTP isteğini bulmak için -v=8
parametresini kullanabilirsiniz.
MitM kubectl - kubectl'i Proxy olarak kullanma
Mevcut Yapılandırma
Eğer bazı kullanıcı kimlik bilgilerini çalmayı başardıysanız, bunları yerel olarak yapılandırabilirsiniz. Bunun için şunu kullanabilirsiniz:
Desteklenen Kaynakları Al
Bu bilgiyle, listeleyebileceğiniz tüm hizmetleri bileceksiniz
Mevcut Yetkileri Al
Yetkilerinizi kontrol etmenin başka bir yolu, https://github.com/corneliusweig/rakkess**** aracını kullanmaktır.
Kubernetes RBAC hakkında daha fazla bilgi edinmek için şu sayfayı ziyaret edebilirsiniz:
Hangi yetkilere sahip olduğunuzu öğrendikten sonra, aşağıdaki sayfayı kontrol ederek bu yetkileri kötüye kullanıp yetkilerinizi yükseltebileceğinizi anlayabilirsiniz:
Diğer rolleri almak
Ad alanlarını al
Kubernetes, aynı fiziksel küme tarafından desteklenen çoklu sanal kümeleri destekler. Bu sanal kümeler ad alanları olarak adlandırılır.
Sırları al
Kubernetes kümesindeki sırları almak için aşağıdaki komutu kullanabilirsiniz:
Bu komut, kümedeki tüm sırları listeler. Sırların ayrıntılarını görmek için aşağıdaki komutu kullanabilirsiniz:
<secret_name>
yerine sırrın adını belirtmelisiniz. Bu komut, sırrın ayrıntılarını görüntüler, örneğin sırrın türünü, anahtarlarını ve değerlerini gösterir.
Sırların değerlerini görüntülemek için aşağıdaki komutu kullanabilirsiniz:
Bu komut, sırrın değerlerini JSON formatında görüntüler. Değerleri çözmek için aşağıdaki komutu kullanabilirsiniz:
<key>
yerine sırrın anahtarını belirtmelisiniz. Bu komut, sırrın belirtilen anahtarının değerini çözer ve görüntüler.
Sırların değerlerini görüntülemek için aşağıdaki komutu da kullanabilirsiniz:
Bu komut, sırrın değerlerini YAML formatında görüntüler. Değerleri çözmek için aşağıdaki komutu kullanabilirsiniz:
<key>
yerine sırrın anahtarını belirtmelisiniz. Bu komut, sırrın belirtilen anahtarının değerini çözer ve görüntüler.
API
Eğer sırları okuyabiliyorsanız, her bir token ile ilgili ayrıcalıkları almak için aşağıdaki satırları kullanabilirsiniz:
Hizmet Hesaplarını Al
Bu sayfanın başında tartışıldığı gibi, bir pod çalıştırıldığında genellikle ona bir hizmet hesabı atanır. Bu nedenle, hizmet hesaplarını, izinlerini ve nerede çalıştıklarını listelemek, bir kullanıcının ayrıcalıklarını yükseltmesine olanak sağlayabilir.
Dağıtımları Al
Dağıtımlar, çalıştırılması gereken bileşenleri belirtir.
Podları Al
Podlar, çalışacak olan gerçek konteynerlerdir.
Hizmetleri Al
Kubernetes hizmetleri, bir hizmeti belirli bir bağlantı noktasında ve IP'de sunmak için kullanılır (aslında hizmeti sunan podlara yük dengeleyici olarak hareket eder). Bu, saldırmaya çalışabileceğiniz diğer hizmetleri bulabileceğiniz yerleri bilmek açısından ilginçtir.
Düğümleri Al
Küme içinde yapılandırılmış olan tüm düğümleri alın.
API
DaemonSetleri Al
DaemonSetler, kümenin tüm düğümlerinde (veya seçilen düğümlerde) belirli bir pod'un çalıştığından emin olmayı sağlar. DaemonSet'i silerseniz, onun tarafından yönetilen pod'lar da kaldırılır.
Cronjobu al
Cron işleri, crontab benzeri bir sözdizimi kullanarak bir eylem gerçekleştirecek bir pod'un başlatılmasını zamanlamak için kullanılır.
ConfigMap Al
configMap her zaman kubernetes'te çalışan uygulamalara sağlanan birçok bilgi ve yapılandırma dosyası içerir. Genellikle, diğer iç/dış hizmetlere bağlanmak ve doğrulamak için kullanılan birçok parola, gizli bilgi ve belirteç bulabilirsiniz.
Podların tüketimini alın
Pod'dan Kaçma
Yeni pod'lar oluşturabiliyorsanız, onlardan düğüme kaçabilirsiniz. Bunun için bir yaml dosyası kullanarak yeni bir pod oluşturmanız, oluşturulan pod'a geçmeniz ve ardından düğümün sistemine chroot yapmanız gerekmektedir. Var olan pod'ları referans olarak kullanabilirsiniz çünkü mevcut görüntüleri ve yolları gösterirler.
Eğer belirli bir düğümde pod oluşturmanız gerekiyorsa, düğümdeki etiketleri almak için aşağıdaki komutu kullanabilirsiniz:
k get nodes --show-labels
Genellikle, kubernetes.io/hostname ve node-role.kubernetes.io/master etiketleri seçim için uygundur.
Ardından attack.yaml dosyanızı oluşturun.
Bundan sonra pod'u oluşturun.
Şimdi oluşturulan pod'a aşağıdaki gibi geçebilirsiniz:
Ve son olarak, düğümün sistemine chroot yaparsınız.
Referanslar
Last updated