GCP <–> Workspace Pivoting

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

GCP’den GWS’ye

Alan Genel Yetkilendirme Temelleri

Google Workspace’in Alan Genel Yetkilendirmesi, bir kimlik nesnesinin, ya bir harici uygulama Google Workspace Marketplace’ten ya da bir iç GCP Hizmet Hesabı olarak, kullanıcılar adına Workspace’teki verilere erişmesine olanak tanır.

Note

Bu, temelde GCP projeleri içindeki hizmet hesaplarının, aynı organizasyondaki (veya farklı bir organizasyondaki) Workspace kullanıcılarını taklit edebilme yeteneğine sahip olabileceği anlamına gelir.

Bu işlemin tam olarak nasıl çalıştığı hakkında daha fazla bilgi için kontrol edin:

GCP - Understanding Domain-Wide Delegation

Mevcut Yetkilendirmeyi Ele Geçirme

Eğer bir saldırgan GCP üzerinde bazı erişimleri ele geçirmişse ve şirketin geçerli bir Workspace kullanıcı e-posta adresini (tercihen süper admin) biliyorsa, erişim sağladığı tüm projeleri listeleyebilir, projelerin tüm SA’lerini listeleyebilir, hangi hizmet hesaplarına erişimi olduğunu kontrol edebilir ve taklit edebileceği her SA ile bu adımları tekrarlayabilir.
Elde ettiği tüm hizmet hesaplarının listesi ve Workspace e-posta adresleri ile saldırgan, her hizmet hesabı ile kullanıcıyı taklit etmeye çalışabilir.

Caution

Alan genel yetkilendirme yapılandırılırken hiçbir Workspace kullanıcısına ihtiyaç olmadığını unutmayın, bu nedenle sadece bir geçerli kullanıcı bilmek yeterlidir ve taklit için gereklidir.
Ancak, taklit edilen kullanıcının ayrıcalıkları kullanılacaktır, bu nedenle eğer Süper Admin ise her şeye erişebileceksiniz. Eğer hiçbir erişimi yoksa bu işe yaramaz.

GCP Yetkilendirme Token’ı Oluştur

Bu basit betik, yetkilendirilmiş kullanıcı olarak bir OAuth token’ı oluşturur ve bunu gcloud ile veya onsuz diğer Google API’lerine erişmek için kullanabilirsiniz:

# Impersonate indicated user
python3 gen_delegation_token.py --user-email <user-email> --key-file <path-to-key-file>

# Impersonate indicated user and add additional scopes
python3 gen_delegation_token.py --user-email <user-email> --key-file <path-to-key-file> --scopes "https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid"

DelePwn

Aşağıdaki DeleFriend aracına dayanmaktadır, ancak alanı, sürücüyü, gmail’i, takvimi listeleme ve diğer işlemleri gerçekleştirme yeteneği gibi bazı eklemelerle birlikte.

DeleFriend

Bu, saldırıyı şu adımları izleyerek gerçekleştirebilen bir araçtır:

  1. GCP Projelerini Listele Resource Manager API’sini kullanarak.
  2. Her proje kaynağı üzerinde yineleme yapın ve ilk IAM kullanıcısının erişim iznine sahip olduğu GCP Hizmet hesabı kaynaklarını listeleyin GetIAMPolicy kullanarak.
  3. Her hizmet hesabı rolü üzerinde yineleme yapın ve hedef hizmet hesabı kaynağında serviceAccountKeys.create iznine sahip yerleşik, temel ve özel rolleri bulun. Editör rolünün bu izni doğası gereği taşıdığına dikkat edilmelidir.
  4. IAM politikasında ilgili izne sahip bulunan her hizmet hesabı kaynağı için yeni bir KEY_ALG_RSA_2048 özel anahtar oluşturun.
  5. Her yeni hizmet hesabı üzerinde yineleme yapın ve bunun için bir JWT nesnesi oluşturun; bu nesne SA özel anahtar kimlik bilgileri ve bir OAuth kapsamından oluşur. Yeni bir JWT nesnesi oluşturma süreci, oauth_scopes.txt listesindeki tüm mevcut OAuth kapsamı kombinasyonları üzerinde yineleme yaparak tüm delege etme olasılıklarını bulacaktır. oauth_scopes.txt listesi, Workspace kimliklerini kötüye kullanmak için ilgili bulduğumuz tüm OAuth kapsamlarıyla güncellenir.
  6. _make_authorization_grant_assertion yöntemi, DWD altında JWT’ler oluşturmak için bir target workspace user olarak adlandırılan subject belirtmenin gerekliliğini ortaya koyar. Bu, belirli bir kullanıcı gerektiriyormuş gibi görünse de, DWD’nin bir alan içindeki her kimliği etkilediğini anlamak önemlidir. Sonuç olarak, herhangi bir alan kullanıcısı için bir JWT oluşturmak, o alandaki tüm kimlikleri etkiler; bu, kombinasyon listeleme kontrolümüzle tutarlıdır. Kısacası, ilerlemek için bir geçerli Workspace kullanıcısı yeterlidir.
    Bu kullanıcı, DeleFriend’in config.yaml dosyasında tanımlanabilir. Hedef bir workspace kullanıcısı henüz bilinmiyorsa, araç, GCP projelerinde rolleri olan alan kullanıcılarını tarayarak geçerli workspace kullanıcılarının otomatik olarak tanımlanmasını kolaylaştırır. JWT’lerin alan spesifik olduğunu ve her kullanıcı için oluşturulmadığını (tekrar) belirtmek önemlidir; bu nedenle, otomatik süreç her alan için tek bir benzersiz kimliği hedef alır.
  7. Her JWT için yeni bir bearer erişim token’ı listeleyin ve token’ı tokeninfo API’si ile doğrulayın.

Gitlab’ın Python scripti

Gitlab, SA kimlik bilgileri ve taklit edilecek kullanıcı ile birlikte bir json belirterek kullanıcı dizinini listeleyip yeni bir yönetici hesabı oluşturabilen bu Python scriptini oluşturmuştur. İşte nasıl kullanacağınız:

# Install requirements
pip install --upgrade --user oauth2client

# Validate access only
./gcp_delegation.py --keyfile ./credentials.json \
--impersonate steve.admin@target-org.com \
--domain target-org.com

# List the directory
./gcp_delegation.py --keyfile ./credentials.json \
--impersonate steve.admin@target-org.com \
--domain target-org.com \
--list

# Create a new admin account
./gcp_delegation.py --keyfile ./credentials.json \
--impersonate steve.admin@target-org.com \
--domain target-org.com \
--account pwned

Yeni bir delegasyon oluşturma (Süreklilik)

Domain Wide Delegations’ı kontrol etmek mümkündür https://admin.google.com/u/1/ac/owl/domainwidedelegation.

GCP projesinde hizmet hesapları oluşturma yeteneğine ve GWS için süper admin ayrıcalığına sahip bir saldırgan, bazı GWS kullanıcılarını taklit etmelerine izin veren yeni bir delegasyon oluşturabilir:

  1. Yeni Bir Hizmet Hesabı ve İlgili Anahtar Çifti Oluşturma: GCP’de, yeni hizmet hesabı kaynakları ya konsol aracılığıyla etkileşimli olarak ya da doğrudan API çağrıları ve CLI araçları kullanılarak programlı olarak üretilebilir. Bu, iam.serviceAccountAdmin rolünü veya iam.serviceAccounts.create izinine sahip herhangi bir özel rolü gerektirir. Hizmet hesabı oluşturulduktan sonra, ilişkili bir anahtar çifti oluşturmak için devam edeceğiz (iam.serviceAccountKeys.create izni).
  2. Yeni delegasyonun oluşturulması: Sadece Süper Admin rolünün Google Workspace’te küresel Domain-Wide delegasyonu kurma yeteneğine sahip olduğunu anlamak önemlidir ve Domain-Wide delegasyonu programlı olarak kurulamaz, yalnızca Google Workspace konsolu aracılığıyla manuel olarak oluşturulabilir ve ayarlanabilir.
  • Kuralın oluşturulması, API kontrolleri → Google Workspace Admin konsolunda Domain-Wide delegasyonu yönet sayfasında bulunabilir.
  1. OAuth kapsamı ayrıcalığını ekleme: Yeni bir delegasyon yapılandırırken, Google yalnızca 2 parametre gerektirir: GCP Hizmet Hesabı kaynağının OAuth ID’si olan İstemci Kimliği ve delegasyonun gerektirdiği API çağrılarını tanımlayan OAuth kapsamları.
  • OAuth kapsamlarının tam listesi burada bulunabilir, ancak burada bir öneri: https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid
  1. Hedef kimlik adına hareket etme: Bu noktada, GWS’de işlevsel bir delegasyon nesnesine sahibiz. Artık, GCP Hizmet Hesabı özel anahtarını kullanarak API çağrıları gerçekleştirebiliriz (OAuth kapsamı parametresinde tanımlanan kapsamda) ve Google Workspace’te mevcut olan herhangi bir kimlik adına hareket edebiliriz. Öğrendiğimiz gibi, hizmet hesabı ihtiyaçlarına göre ve REST API uygulamalarına sahip olduğu izinlere göre erişim jetonları üretecektir.
  • Bu delegasyonu kullanmak için bazı araçlar için önceki bölüme bakın.

Kurumsal Dışı delegasyon

OAuth SA ID’si küreseldir ve kurumsal dışı delegasyon için kullanılabilir. Kurumsal dışı delegasyonu önlemek için herhangi bir kısıtlama uygulanmamıştır. Basitçe ifade etmek gerekirse, farklı GCP organizasyonlarından hizmet hesapları, diğer Workspace organizasyonlarında domain-wide delegasyonu yapılandırmak için kullanılabilir. Bu, sadece Workspace için Süper Admin erişimine ihtiyaç duyulması anlamına gelir ve aynı GCP hesabına erişim gerektirmez, çünkü saldırgan kendi kontrolündeki GCP hesabında Hizmet Hesapları ve özel anahtarlar oluşturabilir.

Workspace’i listelemek için bir Proje Oluşturma

Varsayılan olarak Workspace kullanıcıları yeni projeler oluşturma iznine sahiptir ve yeni bir proje oluşturulduğunda oluşturucu, üzerinde Sahip rolü alır.

Bu nedenle, bir kullanıcı bir proje oluşturabilir, yeni projesinde Workspace’i listelemek için API’leri etkinleştirebilir ve bunu listelemeye çalışabilir.

[!DİKKAT] Bir kullanıcının Workspace’i listeleyebilmesi için yeterli Workspace izinlerine de sahip olması gerekir (her kullanıcı dizini listeleyemez).

# Create project
gcloud projects create <uniq-projec-name> --name=proj-name
# Set project
gcloud config set project <uniq-projec-name>
# Enable svcs
gcloud services enable admin.googleapis.com
gcloud services enable cloudidentity.googleapis.com
# Get org ID
gcloud organizations list
# Get currents email user groups (at least you can check the groups and members of the groups you belong to)
gcloud identity groups memberships search-transitive-groups --member-email <email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
gcloud identity groups memberships list --group-email=g<group-email>

# FROM HERE THE USER NEEDS TO HAVE ENOUGH WORKSPACE ACCESS
gcloud beta identity groups preview --customer <org-cust-id>

Daha fazla numaralandırma için kontrol edin:

GCP - IAM, Principals & Org Policies Enum

Gcloud kimlik bilgilerini kötüye kullanma

Giriş yapmak için gcloud akışı hakkında daha fazla bilgi bulabilirsiniz:

GCP - Token Persistence

Orada açıklandığı gibi, gcloud https://www.googleapis.com/auth/drive kapsamını talep edebilir, bu da bir kullanıcının sürücüsüne erişmesine izin verir.
Bir saldırgan olarak, eğer bir kullanıcının bilgisayarını fiziksel olarak ele geçirdiyseniz ve kullanıcı hala hesabıyla oturum açmışsa, sürücüye erişim sağlayan bir token oluşturarak giriş yapabilirsiniz:

gcloud auth login --enable-gdrive-access

Eğer bir saldırgan bir kullanıcının bilgisayarını ele geçirirse, google-cloud-sdk/lib/googlecloudsdk/core/config.py dosyasını değiştirebilir ve CLOUDSDK_SCOPES içine 'https://www.googleapis.com/auth/drive' kapsamını ekleyebilir:

Warning

Bu nedenle, kullanıcı bir sonraki giriş yaptığında, saldırganın drive’a erişim sağlamak için kötüye kullanabileceği drive’a erişim izni olan bir token oluşturacaktır. Açıkça, tarayıcı oluşturulan token’ın drive’a erişim izni olduğunu gösterecektir, ancak kullanıcı gcloud auth login komutunu kendisi çağıracağı için, muhtemelen hiçbir şeyden şüphelenmeyecektir.

Drive dosyalarını listelemek için: curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://www.googleapis.com/drive/v3/files"

GWS’den GCP’ye

Ayrıcalıklı GCP kullanıcılarına erişim

Eğer bir saldırgan GWS üzerinde tam erişime sahipse, GCP üzerinde ayrıcalıklı erişime sahip gruplara veya kullanıcılara erişim sağlayabilecektir, bu nedenle GWS’den GCP’ye geçiş genellikle daha “basit“dir çünkü GWS’deki kullanıcılar GCP üzerinde yüksek ayrıcalıklara sahiptir.

Google Grupları Ayrıcalık Yükseltme

Varsayılan olarak kullanıcılar Organizasyonun Workspace gruplarına serbestçe katılabilir ve bu gruplar GCP izinlerine sahip olabilir (gruplarınızı https://groups.google.com/ adresinde kontrol edin).

google groups privesc’i kötüye kullanarak, GCP’ye bazı türde ayrıcalıklı erişim sağlayan bir gruba yükseltme yapabilirsiniz.

Referanslar

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