GCP - Temel Bilgiler
Tip
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)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Kaynak hiyerarşisi
Google Cloud, geleneksel bir dosya sistemine kavramsal olarak benzer bir Kaynak hiyerarşisi kullanır. Bu, politikalar ve izinler için belirli ekleme noktaları ile mantıksal bir ebeveyn/çocuk iş akışı sağlar.
Yüksek seviyede, bu şekilde görünür:
Organization
--> Folders
--> Projects
--> Resources
Sanal bir makine (Compute Instance olarak adlandırılır) bir kaynaktır. Bir kaynak, muhtemelen diğer Compute Instance’lar, depolama kovaları vb. ile birlikte bir projede bulunur.
 (1) (1) (1) (1) (1) (1).png)
https://cloud.google.com/static/resource-manager/img/cloud-hierarchy.svg
Projelerin Taşınması
Bir projeyi herhangi bir organizasyonsuz bir organizasyona taşımak mümkündür; bunun için roles/resourcemanager.projectCreator ve roles/resourcemanager.projectMover izinlerine sahip olmanız gerekir. Proje başka bir organizasyonun içindeyse, öncelikle organizasyondan çıkarmak için GCP desteği ile iletişime geçmek gereklidir. Daha fazla bilgi için bunu kontrol edin.
Organizasyon Politikaları
Organizasyonunuzun bulut kaynakları üzerinde merkezi kontrol sağlamaya olanak tanır:
- Organizasyonunuzun kaynaklarının nasıl kullanılabileceği konusunda kısıtlamaları yapılandırmak için merkezi kontrol sağlayın.
- Geliştirme ekiplerinizin uyum sınırları içinde kalmasını sağlamak için koruma önlemleri tanımlayın ve oluşturun.
- Proje sahiplerine ve ekiplerine uyumu ihlal etme endişesi olmadan hızlı hareket etme konusunda yardımcı olun.
Bu politikalar, tam organizasyonu, klasör(ler) veya proje(ler) etkilemek üzere oluşturulabilir. Hedeflenen kaynak hiyerarşi düğümünün altındaki nesiller organizasyon politikasını miras alır.
Bir organizasyon politikasını tanımlamak için bir kısıtlama seçersiniz; bu, bir Google Cloud hizmetine veya bir grup Google Cloud hizmetine karşı belirli bir kısıtlama türüdür. Bu kısıtlamayı istediğiniz kısıtlamalarla yapılandırırsınız.
.png)
https://cloud.google.com/resource-manager/img/org-policy-concepts.svg
Yaygın kullanım durumları
- Alan adına dayalı kaynak paylaşımını sınırlayın.
- Kimlik ve Erişim Yönetimi hizmet hesaplarının kullanımını sınırlayın.
- Yeni oluşturulan kaynakların fiziksel konumunu kısıtlayın.
- Hizmet hesabı oluşturmayı devre dışı bırakın.
.png)
Organizasyonunuzun kaynakları üzerinde ince ayar kontrolü sağlayan daha birçok kısıtlama vardır. Daha fazla bilgi için, Tüm Organizasyon Politikası Hizmeti kısıtlamalarının listesinigörebilirsiniz.
Varsayılan Organizasyon Politikaları
GCP organizasyonunuzu kurarken Google'ın varsayılan olarak ekleyeceği politikalar şunlardır:
Erişim Yönetimi Politikaları
- Alan kısıtlamalı kişiler: Belirtilen alanlarınızın dışındaki Temel Kişilere kullanıcı eklenmesini engeller. Bu, Temel Kişilerin yalnızca seçilen alanlarınızdaki yönetilen kullanıcı kimliklerinin platform bildirimlerini almasına izin verir.
- Alan kısıtlamalı paylaşım: Belirtilen alanlarınızın dışındaki IAM politikalarına kullanıcı eklenmesini engeller. Bu, IAM politikalarının yalnızca seçilen alanlarınızdaki yönetilen kullanıcı kimliklerinin bu organizasyondaki kaynaklara erişmesine izin vermesiyle sınırlıdır.
- Halka açık erişim önleme: Cloud Storage kovalarının halka açılmasını engeller. Bu, bir geliştiricinin Cloud Storage kovalarını kimlik doğrulaması yapılmamış internet erişimine sahip olacak şekilde yapılandırmasını engeller.
- Eşit düzeyde kova erişimi: Cloud Storage kovalarında nesne düzeyinde erişim kontrol listelerini (ACL’ler) engeller. Bu, erişim yönetiminizi Cloud Storage kovalarındaki tüm nesneler üzerinde IAM politikalarını tutarlı bir şekilde uygulayarak basitleştirir.
- OS girişini zorunlu kıl: Yeni projelerde oluşturulan VM’lerde OS Girişi etkinleştirilecektir. Bu, SSH erişimini IAM kullanarak yönetmenizi sağlar; bireysel SSH anahtarları oluşturup yönetmenize gerek kalmaz.
Hizmet hesapları için ek güvenlik politikaları
- Otomatik IAM atamalarını devre dışı bırak: Varsayılan App Engine ve Compute Engine hizmet hesaplarının oluşturulurken projeye Editor IAM rolü otomatik olarak verilmesini engeller. Bu, hizmet hesaplarının oluşturulurken aşırı izinli IAM rollerini almamasını sağlar.
- Hizmet hesabı anahtarı oluşturmayı devre dışı bırak: Kamuya açık hizmet hesabı anahtarlarının oluşturulmasını engeller. Bu, kalıcı kimlik bilgilerini açığa çıkarma riskini azaltmaya yardımcı olur.
- Hizmet hesabı anahtarı yüklemeyi devre dışı bırak: Kamuya açık hizmet hesabı anahtarlarının yüklenmesini engeller. Bu, sızdırılan veya yeniden kullanılan anahtar materyali riskini azaltmaya yardımcı olur.
Güvenli VPC ağ yapılandırma politikaları
- VM örnekleri için izin verilen dış IP’leri tanımlayın: Kamu IP’sine sahip Compute örneklerinin oluşturulmasını engeller; bu, onları internet trafiğine maruz bırakabilir.
- VM iç içe sanallaştırmayı devre dışı bırak: Compute Engine VM’lerinde iç içe VM’lerin oluşturulmasını engeller. Bu, izlenmeyen iç içe VM’lerin güvenlik riskini azaltır.
- VM seri portunu devre dışı bırak: Compute Engine VM’lerine seri port erişimini engeller. Bu, bir sunucunun seri portuna Compute Engine API’si kullanarak giriş yapılmasını engeller.
- Cloud SQL örneklerinde yetkilendirilmiş ağları kısıtla: Kamuya açık veya dahili olmayan ağ aralıklarının Cloud SQL veritabanlarınıza erişmesini engeller.
- IP adresinin türüne göre protokol yönlendirmeyi kısıtla: Dış IP adresleri için VM protokol yönlendirmesini engeller.
- Cloud SQL örneklerinde kamu IP erişimini kısıtla: Kamu IP’sine sahip Cloud SQL örneklerinin oluşturulmasını engeller; bu, onları internet trafiğine maruz bırakabilir.
- Paylaşılan VPC proje iptalini kısıtla: Paylaşılan VPC ana projelerinin kazara silinmesini engeller.
- Yeni projeler için dahili DNS ayarını Zonal DNS Sadece olarak ayarla: Hizmet kullanılabilirliğini azaltan eski bir DNS ayarının kullanılmasını engeller.
- Varsayılan ağ oluşturmayı atla: Varsayılan VPC ağının ve ilgili kaynakların otomatik olarak oluşturulmasını engeller. Bu, aşırı izinli varsayılan güvenlik duvarı kurallarını önler.
- VPC Dış IPv6 kullanımını devre dışı bırak: Yetkisiz internet erişimine maruz kalabilecek dış IPv6 alt ağlarının oluşturulmasını engeller.
IAM Rolleri
Bunlar, her rolün bir dizi izin içerdiği AWS’deki IAM politikalarına benzer.
Ancak, AWS’deki gibi, rollerin merkezi bir deposu yoktur. Bunun yerine, kaynaklar Y ilkelerine X erişim rolleri verir ve bir kaynağa kimin erişimi olduğunu öğrenmenin tek yolu, o kaynak üzerindeki get-iam-policy yöntemini kullanmaktır.
Bu, bir ilkenin hangi izinlere sahip olduğunu öğrenmenin tek yolunun her kaynağa kimin izin verdiğini sormak olduğu anlamına gelir ve bir kullanıcının tüm kaynaklardan izinleri alma yetkisi olmayabilir.
IAM’de üç tür rol vardır:
- Temel/Primitif roller, Sahip, Düzenleyici ve Görüntüleyici rollerini içerir; bu roller IAM’ın tanıtılmasından önce mevcuttu.
- Önceden tanımlanmış roller, belirli bir hizmet için ayrıntılı erişim sağlar ve Google Cloud tarafından yönetilir. Birçok önceden tanımlanmış rol vardır; bunların hepsini sahip oldukları ayrıcalıklarla birlikte buradan görebilirsiniz.
- Özel roller, kullanıcı tarafından belirtilen bir izin listesine göre ayrıntılı erişim sağlar.
GCP’de binlerce izin vardır. Bir rolün izinlere sahip olup olmadığını kontrol etmek için buradan izni arayabilirsiniz ve hangi rollerin buna sahip olduğunu görebilirsiniz.
Ayrıca, buradan önceden tanımlanmış rolleri her ürün tarafından sunulan görebilirsiniz. Bazı rollerin kullanıcılara eklenemeyeceğini ve yalnızca SA’lara eklenebileceğini unutmayın; çünkü içerdiği bazı izinler vardır.
Ayrıca, izinlerin yalnızca ilgili hizmete eklenmesi durumunda geçerli olacağını unutmayın.
Veya bir özel rolün burada belirli bir izni kullanıp kullanamayacağınıkontrol edebilirsiniz.
GCP - IAM, Principals & Org Policies Enum
Kullanıcılar
GCP konsolunda Kullanıcılar veya Gruplar yönetimi yoktur; bu, Google Workspace içinde yapılır. Ancak, Google Workspace’te farklı bir kimlik sağlayıcısını senkronize edebilirsiniz.
Workspace kullanıcıları ve gruplarına https://admin.google.com adresinden erişebilirsiniz.
MFA, Workspace kullanıcılarına zorunlu kılınabilir, ancak bir saldırgan, MFA ile korunmayan GCP’ye cli üzerinden erişmek için bir token kullanabilir (bu, yalnızca kullanıcının oluşturmak için giriş yaptığı zaman MFA ile korunacaktır: gcloud auth login).
Gruplar
Bir organizasyon oluşturulduğunda birkaç grup oluşturulması şiddetle önerilir. Eğer bunlardan herhangi birini yönetiyorsanız, organizasyonun tamamını veya önemli bir kısmını tehlikeye atmış olabilirsiniz:
| Grup | Fonksiyon |
gcp-organization-admins(kontrol listesi için grup veya bireysel hesaplar gereklidir) | Organizasyona ait herhangi bir kaynağı yönetmek. Bu rolü dikkatli bir şekilde atayın; organizasyon yöneticileri, Google Cloud kaynaklarınızın tamamına erişim sağlar. Alternatif olarak, bu işlev yüksek ayrıcalıklı olduğundan, bir grup oluşturmak yerine bireysel hesaplar kullanmayı düşünün. |
gcp-network-admins(kontrol listesi için gereklidir) | Ağlar, alt ağlar, güvenlik duvarı kuralları ve Cloud Router, Cloud VPN ve bulut yük dengeleyicileri gibi ağ cihazları oluşturma. |
gcp-billing-admins(kontrol listesi için gereklidir) | Faturalama hesaplarını ayarlama ve kullanımını izleme. |
gcp-developers(kontrol listesi için gereklidir) | Uygulamaları tasarlama, kodlama ve test etme. |
gcp-security-admins | Tüm organizasyon için erişim yönetimi ve organizasyon kısıtlama politikaları dahil olmak üzere güvenlik politikalarını oluşturma ve yönetme. Google Cloud güvenlik altyapınızı planlamak için daha fazla bilgi için Google Cloud güvenlik temelleri kılavuzuna bakın. |
gcp-devops | Sürekli entegrasyon ve teslimatı destekleyen uçtan uca boru hatları oluşturma veya yönetme, izleme ve sistem sağlama. |
gcp-logging-admins | |
gcp-logging-viewers | |
gcp-monitor-admins | |
gcp-billing-viewer(artık varsayılan değil) | Projelerdeki harcamaları izleme. Tipik üyeler finans ekibinin bir parçasıdır. |
gcp-platform-viewer(artık varsayılan değil) | Google Cloud organizasyonu genelinde kaynak bilgilerini gözden geçirme. |
gcp-security-reviewer(artık varsayılan değil) | Bulut güvenliğini gözden geçirme. |
gcp-network-viewer(artık varsayılan değil) | Ağ yapılandırmalarını gözden geçirme. |
grp-gcp-audit-viewer(artık varsayılan değil) | Denetim günlüklerini görüntüleme. |
gcp-scc-admin(artık varsayılan değil) | Güvenlik Komut Merkezi'ni yönetme. |
gcp-secrets-admin(artık varsayılan değil) | Secret Manager'da gizli bilgileri yönetme. |
Varsayılan Şifre Politikası
- Güçlü şifreleri zorunlu kıl
- 8 ile 100 karakter arasında
- Yeniden kullanım yok
- Süre sona erme yok
- İnsanlar Workspace’e üçüncü taraf bir sağlayıcı aracılığıyla erişiyorsa, bu gereklilikler uygulanmaz.
.png)
.png)
Hizmet hesapları
Bunlar, kaynakların eklenebileceği ve GCP ile kolayca etkileşimde bulunmak için erişim sağlayabileceği ilkellerdir. Örneğin, bir VM’ye eklenmiş bir Hizmet Hesabının kimlik doğrulama tokenine metadata’dan erişmek mümkündür.
IAM ve erişim kapsamlarını kullanırken bazı çelişkilerle karşılaşmak mümkündür. Örneğin, hizmet hesabınızın compute.instanceAdmin IAM rolü olabilir, ancak ihlal ettiğiniz örnek, https://www.googleapis.com/auth/compute.readonly kapsam kısıtlaması ile sınırlı olabilir. Bu, otomatik olarak örneğinize atanan OAuth tokenini kullanarak herhangi bir değişiklik yapmanızı engeller.
Bu, AWS’deki IAM rollerine benzer. Ancak AWS’deki gibi, herhangi bir hizmet hesabı herhangi bir hizmete eklenebilir (bunu bir politika aracılığıyla izin vermesi gerekmez).
Bulacağınız birçok hizmet hesabı aslında bir hizmet kullanmaya başladığınızda GCP tarafından otomatik olarak oluşturulur, örneğin:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com
Ancak, özel hizmet hesapları oluşturmak ve bunlara eklemek de mümkündür, bu da şöyle görünecektir:
SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
Anahtarlar ve Tokenlar
GCP’ye bir hizmet hesabı olarak erişmenin 2 ana yolu vardır:
- OAuth tokenları aracılığıyla: Bunlar, metadata uç noktalarından veya http isteklerini çalarak alacağınız tokenlardır ve erişim kapsamları ile sınırlıdır.
- Anahtarlar: Bunlar, hizmet hesabı olarak istekleri imzalamanıza ve hatta hizmet hesabı olarak eylemler gerçekleştirmek için OAuth tokenları oluşturmanıza olanak tanıyan genel ve özel anahtar çiftleridir. Bu anahtarlar tehlikelidir çünkü sınırlamak ve kontrol etmek daha karmaşıktır, bu yüzden GCP bunları oluşturmanızı önermemektedir.
- Her seferinde bir SA oluşturulduğunda, GCP hizmet hesabı için bir anahtar oluşturur ve kullanıcı bu anahtara erişemez (ve web uygulamasında listelenmez). bu başlığa göre bu anahtar, GCP tarafından dahili olarak erişilebilir OAuth tokenları oluşturmak için metadata uç noktalarına erişim vermek amacıyla kullanılmaktadır.
Erişim Kapsamları
Erişim kapsamları, GCP API uç noktalarına erişmek için oluşturulan OAuth tokenlarına eklenir. Bunlar, OAuth tokenının izinlerini kısıtlar.
Bu, bir token bir kaynağın sahibi olsa bile, token kapsamı o kaynağa erişim izni vermiyorsa, tokenın bu ayrıcalıkları (kötüye) kullanmak için kullanılamayacağı anlamına gelir.
Google aslında önerir ki erişim kapsamları kullanılmasın ve tamamen IAM’e güvenilsin. Web yönetim portalı aslında bunu zorunlu kılar, ancak erişim kapsamları yine de özel hizmet hesapları kullanılarak örneklere programatik olarak uygulanabilir.
Hangi kapsamların atanmış olduğunu sorgulayarak görebilirsiniz:
curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'
{
"issued_to": "223044615559.apps.googleusercontent.com",
"audience": "223044615559.apps.googleusercontent.com",
"user_id": "139746512919298469201",
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/sqlservice.login https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/accounts.reauth",
"expires_in": 2253,
"email": "username@testing.com",
"verified_email": true,
"access_type": "offline"
}
Önceki scopes, veriye erişmek için gcloud kullanarak varsayılan olarak oluşturulanlardır. Bunun nedeni, gcloud kullandığınızda önce bir OAuth token’ı oluşturmanız ve ardından bunu uç noktalarla iletişim kurmak için kullanmanızdır.
Bu potansiyel scopes arasında en önemli olanı cloud-platform’dur, bu temelde GCP’deki herhangi bir hizmete erişmenin mümkün olduğu anlamına gelir.
Burada tüm olası scopes listesini bulabilirsiniz.
Eğer gcloud tarayıcı kimlik bilgilerine sahipseniz, diğer scopes ile bir token elde etmek mümkündür, şöyle bir şey yaparak:
# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db
# Set new scopes for SDKs credentials
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.login,https://www.googleapis.com/auth/appengine.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/accounts.reauth,https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.domain,https://www.googleapis.com/auth/admin.directory.user
# Print new token
gcloud auth application-default print-access-token
# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"
Terraform IAM Politikaları, Bağlantılar ve Üyelikler
Terraform tarafından tanımlandığı gibi https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam GCP ile terraform kullanarak bir kaynağa erişim sağlamak için farklı yollar vardır:
- Üyelikler: Prensipleri rollerin üyeleri olarak kısıtlama olmaksızın belirlersiniz. Bir kullanıcıyı bir rolün üyesi olarak atayabilir ve ardından aynı rolün bir üyesi olarak bir grubu da atayabilir ve ayrıca bu prensipleri (kullanıcı ve grup) diğer rollerin üyesi olarak belirleyebilirsiniz.
- Bağlantılar: Birden fazla prensip bir role bağlanabilir. Bu prensipler hala diğer rollerin üyeleri veya bağlanmış olabilir. Ancak, bir role bağlı olmayan bir prensip bağlı bir rolün üyesi olarak belirlendiğinde, bağlantı uygulandığında, üyelik kaybolacaktır.
- Politikalar: Bir politika otoritativdir, roller ve prensipleri belirtir ve ardından, bu prensiplerin daha fazla rolü olamaz ve bu rollerin daha fazla prensibi olamaz; bu politika değiştirilmedikçe (diğer politikalar, bağlantılar veya üyeliklerde bile değil). Bu nedenle, bir politika içinde bir rol veya prensip belirtildiğinde, tüm ayrıcalıkları o politika ile sınırlıdır. Açıkça, bu, prensibe politikayı değiştirme veya ayrıcalık yükseltme izinleri (yeni bir prensip oluşturma ve ona yeni bir rol bağlama gibi) verildiğinde aşılabilir.
Referanslar
- https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/
- https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy
Tip
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)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

