Kubernetes Pivoting to Clouds
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Eğer GCP içinde bir k8s kümesi çalıştırıyorsanız, muhtemelen küme içinde çalışan bazı uygulamaların GCP'ye erişimi olmasını istersiniz. Bunu yapmanın 2 yaygın yolu vardır:
Kubernetes uygulamasına GCP'ye erişim vermenin yaygın bir yolu:
Bir GCP Hizmet Hesabı oluşturmak
Üzerine istenen izinleri bağlamak
Oluşturulan SA'nın bir json anahtarını indirmek
Bunu pod içinde bir gizli olarak bağlamak
json dosyasının bulunduğu yola işaret eden GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini ayarlamak.
Bu nedenle, bir saldırgan olarak, bir pod içindeki bir konteyneri ele geçirirseniz, o env değişkenini ve GCP kimlik bilgileri ile json dosyalarını kontrol etmelisiniz.
Bir GSA'ya GKE kümesine erişim vermenin bir yolu, onları şu şekilde bağlamaktır:
Aşağıdaki komutu kullanarak GKE kümenizle aynı ad alanında bir Kubernetes hizmet hesabı oluşturun:
GKE kümesine erişim vermek istediğiniz GCP hizmet hesabının kimlik bilgilerini içeren bir Kubernetes Secret oluşturun. Bunu aşağıdaki örnekte gösterildiği gibi gcloud
komut satırı aracıyla yapabilirsiniz:
Aşağıdaki komutu kullanarak Kubernetes Secret'ı Kubernetes hizmet hesabına bağlayın:
İkinci adımda, GSA'nın kimlik bilgileri KSA'nın sırrı olarak ayarlandı. Ardından, eğer GKE kümesinin içinden bu sırrı okuyabiliyorsanız, bu GCP hizmet hesabına yükseltebilirsiniz.
İş Yükü Kimliği ile, bir Kubernetes hizmet hesabını Google hizmet hesabı olarak hareket edecek şekilde yapılandırabiliriz. Kubernetes hizmet hesabıyla çalışan Pod'lar, Google Cloud API'lerine erişirken otomatik olarak Google hizmet hesabı olarak kimlik doğrulaması yapacaktır.
Bu davranışı etkinleştirmek için ilk adımlar dizisi, GCP'de İş Yükü Kimliğini etkinleştirmek (adımlar) ve k8s'nin taklit etmesini istediğiniz GCP SA'yı oluşturmaktır.
Yeni bir kümede İş Yükü Kimliğini etkinleştir
Yeni bir nodepool oluşturun/güncelleyin (Autopilot kümeleri buna ihtiyaç duymaz)
K8s'den GCP izinleri ile taklit edilecek GCP Hizmet Hesabı oluşturun:
Küme ile bağlanın ve kullanmak için hizmet hesabı oluşturun
GSA'yı KSA ile bağlayın
KSA ile bir pod çalıştırın ve GSA'ya erişimi kontrol edin:
Aşağıdaki komutu, gerekirse kimlik doğrulamak için kontrol edin:
K8s içinde bir saldırgan olarak, iam.gke.io/gcp-service-account
anotasyonu olan SAs'yi aramalısınız çünkü bu, SA'nın GCP'de bir şeye erişebileceğini gösterir. Diğer bir seçenek, kümedeki her KSA'yı kötüye kullanmaya çalışmak ve erişimi olup olmadığını kontrol etmektir.
GCP'den, bağlamaları listelemek ve Kubernetes içindeki SAs'ye hangi erişimi verdiğinizi bilmek her zaman ilginçtir.
Bu, o anotasyonu aramak için tüm podların tanımlarında kolayca döngü yapmayı sağlayan bir betiktir:
Podlara IAM Rolleri vermenin (eski) bir yolu, bir Kiam veya bir Kube2IAM sunucusu kullanmaktır. Temelde, kümenizde bir tür ayrıcalıklı IAM rolü ile bir daemonset çalıştırmanız gerekecek. Bu daemonset, ihtiyaç duyan podlara IAM rolleri erişimi sağlayacak olanıdır.
Öncelikle, hangi rollerin namespace içinde erişilebileceğini yapılandırmanız gerekiyor ve bunu namespace nesnesi içinde bir açıklama ile yapıyorsunuz:
Bir namespace IAM rolleri ile yapılandırıldığında, Pod'ların sahip olabileceği her pod tanımında istediğiniz rolü şu şekilde belirtebilirsiniz:
Bir saldırgan olarak, eğer pod'larda veya ad alanlarında bu notları bulursanız veya çalışan bir kiam/kube2iam sunucusu (muhtemelen kube-system'de) varsa, pod'lar tarafından zaten kullanılan her rolü taklit edebilirsiniz ve daha fazlasını (AWS hesabına erişiminiz varsa rolleri listeleyin).
Belirtilen IAM rolü, kiam/kube2iam rolü ile aynı AWS hesabında olmalı ve o rol buna erişim sağlayabilmelidir.
Bu, AWS tarafından önerilen yoldur.
Ardından, SA'nın ihtiyaç duyacağı izinlerle bir IAM rolü oluşturun.
IAM rolü ile SA arasında bir güven ilişkisi oluşturun adı (veya rolü tüm namespace'lerin SAs'ına erişim sağlayacak namespace'ler). Güven ilişkisi esasen OIDC sağlayıcı adı, namespace adı ve SA adını kontrol edecektir.
Son olarak, rolün ARN'sini belirten bir anotasyon ile bir SA oluşturun ve o SA ile çalışan podlar rolün token'ına erişime sahip olacaktır. Token, bir dosyaya yazılır ve yol AWS_WEB_IDENTITY_TOKEN_FILE
içinde belirtilir (varsayılan: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
)
To get aws using the token from /var/run/secrets/eks.amazonaws.com/serviceaccount/token
run:
Bir saldırgan olarak, eğer bir K8s kümesini sayabiliyorsanız, AWS'ye yükseltmek için o anotasyona sahip hizmet hesaplarını kontrol edin. Bunu yapmak için, sadece exec/create bir pod kullanarak bir IAM yetkili hizmet hesabı ile token'ı çalın.
Ayrıca, bir pod'un içindeyseniz, AWS_ROLE_ARN ve AWS_WEB_IDENTITY_TOKEN gibi ortam değişkenlerini kontrol edin.
Bazen bir rolün Güven Politikası kötü yapılandırılmış olabilir ve beklenen hizmet hesabına AssumeRole erişimi vermek yerine tüm hizmet hesaplarına verir. Bu nedenle, kontrol edilen bir hizmet hesabında bir anotasyon yazma yeteneğiniz varsa, role erişebilirsiniz.
Daha fazla bilgi için aşağıdaki sayfayı kontrol edin:
Bu, o anotasyonu aramak için tüm pod'lar ve sas tanımlarını kolayca döngüye sokan bir betiktir:
Önceki bölüm, podlar ile IAM Rolleri nasıl çalınır hakkında idi, ancak K8s kümesinin bir Node'u bir bulut içindeki örnek olacağını unutmayın. Bu, Node'un çalmaya değer yeni bir IAM rolüne sahip olma olasılığının yüksek olduğu anlamına gelir (genellikle bir K8s kümesinin tüm node'ları aynı IAM rolüne sahip olacağından, her node'u kontrol etmeye çalışmak çok da mantıklı olmayabilir).
Ancak, node'dan metadata uç noktasına erişim için önemli bir gereklilik vardır, node'da olmanız gerekir (ssh oturumu?) veya en azından aynı ağda olmalısınız:
Daha önce IAM Rolleri Pod'lara nasıl eklenir veya örneği bağlı olan IAM Rolünü çalmak için Node'a nasıl kaçılır konularını tartıştık.
Aşağıdaki scripti kullanarak çalıştığınız yeni IAM rolü kimlik bilgilerini çalabilirsiniz:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Ekip Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Ekip Uzmanı (GRTE)