Az - AzureAD (AAD)

Az - AzureAD (AAD)

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

Azure Active Directory (Azure AD), Microsoft'un kimlik ve erişim yönetimi için bulut tabanlı hizmetidir. Çalışanların Microsoft 365, Azure portalı ve birçok diğer SaaS uygulaması dahil olmak üzere kuruluş içi ve dışındaki kaynaklara giriş yapmasını sağlamak için önemli bir rol oynar. Azure AD'nin tasarımı, kimlik doğrulama, yetkilendirme ve kullanıcı yönetimi gibi temel kimlik hizmetlerini sunmaya odaklanmaktadır.

Azure AD'nin önemli özellikleri arasında çok faktörlü kimlik doğrulama ve koşullu erişim bulunur ve diğer Microsoft güvenlik hizmetleriyle sorunsuz entegrasyon sağlar. Bu özellikler, kullanıcı kimliklerinin güvenliğini önemli ölçüde artırır ve organizasyonların erişim politikalarını etkin bir şekilde uygulamasına olanak tanır. Microsoft'un bulut hizmetleri ekosisteminin temel bir bileşeni olarak, Azure AD, kullanıcı kimliklerinin bulut tabanlı yönetimi için hayati öneme sahiptir.

Varlıklar

Sıralama

Bu sıralama için az cli aracını, AzureAD PowerShell modülünü (veya AzureAD Preview) ve Az PowerShell modülünü kullanabilirsiniz.

Linux'ta PowerShell Core'u yüklemeniz gerekecektir:

sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common

# Ubuntu 20.04
wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb

# Update repos
sudo apt-get update
sudo add-apt-repository universe

# Install & start powershell
sudo apt-get install -y powershell
pwsh

# Az cli
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Modül farkları

  • AzureAD, Azure AD nesnelerinin tüm özelliklerini göstermeyen ve Azure kaynakları bilgilerine erişmek için kullanılamayan Microsoft'un Azure AD yönetimi için bir PowerShell modülüdür.

  • Az PowerShell, PowerShell komut satırından Azure kaynaklarını yönetmek için bir modüldür.

Bağlantı

az login #This will open the browser
az login -u <username> -p <password> #Specify user and password
az login --identity #Use the current machine managed identity (metadata)
az login --identity -u /subscriptions/<subscriptionId>/resourcegroups/myRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myID #Login with user managed identity
# Login as service principal
az login --service-principal -u http://azure-cli-2016-08-05-14-31-15 -p VerySecret --tenant contoso.onmicrosoft.com #With password
az login --service-principal -u http://azure-cli-2016-08-05-14-31-15 -p ~/mycertfile.pem --tenant contoso.onmicrosoft.com #With cert

# Request access token (ARM)
az account get-access-token
# Request access token for different resource. Supported tokens: aad-graph, arm, batch, data-lake, media, ms-graph, oss-rdbms
az account get-access-token --resource-type aad-graph

# If you want to configure some defaults
az configure

# Get user logged-in already
az ad signed-in-user show

# Help
az find "vm" # Find vm commands
az vm -h # Get subdomains
az ad user list --query-examples # Get examples

Herhangi bir programla Azure'a CLI üzerinden giriş yaptığınızda, Microsoft'a ait bir kiracıya ait bir Azure Uygulaması kullanıyorsunuz. Bu Uygulamalar, hesabınızda oluşturabileceğiniz uygulamalar gibi, bir istemci kimliğine sahiptir. Konsolda görebileceğiniz izin verilen uygulama listelerinde hepsini göremeyebilirsiniz, ancak varsayılan olarak hepsi izinlidir.

Örneğin, bir powershell betiği kimlik doğrulaması için 1950a258-227b-4e31-a9cf-717495945fc2 istemci kimliğine sahip bir uygulama kullanır. Uygulama konsolda görünmese bile, bir sistem yöneticisi bu uygulamayı engelleyebilir, böylece kullanıcılar bu uygulama üzerinden bağlantı kuran araçları kullanamazlar.

Ancak, Azure'a bağlanmanıza izin verecek diğer istemci kimlikleri bulunmaktadır:

# The important part is the ClientId, which identifies the application to login inside Azure

$token = Invoke-Authorize -Credential $credential `
-ClientId '1dfb5f98-f363-4b0f-b63a-8d20ada1e62d' `
-Scope 'Files.Read.All openid profile Sites.Read.All User.Read email' `
-Redirect_Uri "https://graphtryit-staging.azurewebsites.net/" `
-Verbose -Debug `
-InformationAction Continue

$token = Invoke-Authorize -Credential $credential `
-ClientId '65611c08-af8c-46fc-ad20-1888eb1b70d9' `
-Scope 'openid profile Sites.Read.All User.Read email' `
-Redirect_Uri "chrome-extension://imjekgehfljppdblckcmjggcoboemlah" `
-Verbose -Debug `
-InformationAction Continue

$token = Invoke-Authorize -Credential $credential `
-ClientId 'd3ce4cf8-6810-442d-b42e-375e14710095' `
-Scope 'openid' `
-Redirect_Uri "https://graphexplorer.azurewebsites.net/" `
-Verbose -Debug `
-InformationAction Continue

Kullanıcılar

# Enumerate users
az ad user list --output table
az ad user list --query "[].userPrincipalName"
# Get info of 1 user
az ad user show --id "test@corp.onmicrosoft.com"
# Search "admin" users
az ad user list --query "[].displayName" | findstr /i "admin"
az ad user list --query "[?contains(displayName,'admin')].displayName"
# Search attributes containing the word "password"
az ad user list | findstr /i "password" | findstr /v "null,"
# All users from AzureAD
az ad user list --query "[].{osi:onPremisesSecurityIdentifier,upn:userPrincipalName}[?osi==null]"
az ad user list --query "[?onPremisesSecurityIdentifier==null].displayName"
# All users synced from on-prem
az ad user list --query "[].{osi:onPremisesSecurityIdentifier,upn:userPrincipalName}[?osi!=null]"
az ad user list --query "[?onPremisesSecurityIdentifier!=null].displayName"
# Get groups where the user is a member
az ad user get-member-groups --id <email>
# Get roles assigned to the user
az role assignment list --include-groups --include-classic-administrators true --assignee <email>

Azure AD

# Enumerate Users
Get-AzureADUser -All $true
Get-AzureADUser -All $true | select UserPrincipalName
# Get info of 1 user
Get-AzureADUser -ObjectId test@corp.onmicrosoft.com | fl
# Search "admin" users
Get-AzureADUser -SearchString "admin" #Search admin at the begining of DisplayName or userPrincipalName
Get-AzureADUser -All $true |?{$_.Displayname -match "admin"} #Search "admin" word in DisplayName
# Get all attributes of a user
Get-AzureADUser -ObjectId test@defcorphq.onmicrosoft.com|%{$_.PSObject.Properties.Name}
# Search attributes containing the word "password"
Get-AzureADUser -All $true |%{$Properties = $_;$Properties.PSObject.Properties.Name | % {if ($Properties.$_ -match 'password') {"$($Properties.UserPrincipalName) - $_ - $($Properties.$_)"}}}
# All users from AzureAD# All users from AzureAD
Get-AzureADUser -All $true | ?{$_.OnPremisesSecurityIdentifier -eq $null}
# All users synced from on-prem
Get-AzureADUser -All $true | ?{$_.OnPremisesSecurityIdentifier -ne $null}
# Objects created by a/any user
Get-AzureADUser [-ObjectId <email>] | Get-AzureADUserCreatedObject
# Devices owned by a user
Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com
# Objects owned by a specific user
Get-AzureADUserOwnedObject -ObjectId test@corp.onmicrosoft.com
# Get groups & roles where the user is a member
Get-AzureADUserMembership -ObjectId 'test@corp.onmicrosoft.com'
# Get devices owned by a user
Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com
# Get devices registered by a user
Get-AzureADUserRegisteredDevice -ObjectId test@defcorphq.onmicrosoft.com
# Apps where a user has a role (role not shown)
Get-AzureADUser -ObjectId roygcain@defcorphq.onmicrosoft.com | Get-AzureADUserAppRoleAssignment | fl *
# Get Administrative Units of a user
$userObj = Get-AzureADUser -Filter "UserPrincipalName eq 'bill@example.com'"
Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -Id $_.Id | where { $_.Id -eq $userObj.ObjectId } }

Azure AD, Microsoft'un bulut tabanlı kimlik ve erişim yönetimi hizmetidir. Azure AD, kullanıcıların ve uygulamaların kimlik doğrulamasını ve yetkilendirilmesini sağlar. Azure AD, Azure hizmetlerine ve diğer Microsoft hizmetlerine erişim sağlamak için kullanılır.

Azure AD'yi pentest etmek için Az PowerShell kullanabilirsiniz. Az PowerShell, Azure kaynaklarını yönetmek için kullanılan bir komut satırı aracıdır. Azure AD'yi pentest etmek için aşağıdaki adımları izleyebilirsiniz:

  1. Az PowerShell'i yükleyin ve yapılandırın.

  2. Azure AD'ye bağlanın.

  3. Azure AD'deki kullanıcıları, grupları ve rolleri listeleyin.

  4. Azure AD'deki uygulamaları ve bunlara erişim izinlerini listeleyin.

  5. Azure AD'deki kimlik doğrulama ayarlarını kontrol edin.

  6. Azure AD'deki güvenlik politikalarını kontrol edin.

  7. Azure AD'deki denetim kayıtlarını kontrol edin.

  8. Azure AD'deki hizmet prensiplerini kontrol edin.

  9. Azure AD'deki kimlik doğrulama yöntemlerini kontrol edin.

  10. Azure AD'deki kullanıcı hesaplarını ve parolalarını test edin.

  11. Azure AD'deki oturum açma işlemlerini izleyin ve denetleyin.

  12. Azure AD'deki erişim izinlerini kontrol edin.

  13. Azure AD'deki güvenlik duvarı ayarlarını kontrol edin.

  14. Azure AD'deki çok faktörlü kimlik doğrulama ayarlarını kontrol edin.

  15. Azure AD'deki uygulama erişim izinlerini kontrol edin.

  16. Azure AD'deki veri sızıntılarını kontrol edin.

Bu adımları izleyerek Azure AD'yi pentest edebilir ve güvenlik açıklarını tespit edebilirsiniz.

# Enumerate users
Get-AzADUser
# Get details of a user
Get-AzADUser -UserPrincipalName test@defcorphq.onmicrosoft.com
# Search user by string
Get-AzADUser -SearchString "admin" #Search at the beginnig of DisplayName
Get-AzADUser | ?{$_.Displayname -match "admin"}
# Get roles assigned to a user
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com

Kullanıcı Şifresini Değiştirme

$password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText –Force

(Get-AzureADUser -All $true | ?{$_.UserPrincipalName -eq "victim@corp.onmicrosoft.com"}).ObjectId | Set- AzureADUserPassword -Password $password –Verbose

MFA ve Koşullu Erişim Politikaları

Her kullanıcıya MFA eklemek çok önerilir, ancak bazı şirketler bunu ayarlamayabilir veya bir Koşullu Erişim ile ayarlayabilir: Kullanıcı, belirli bir konumdan, tarayıcıdan veya bazı koşullardan giriş yaparsa MFA gereklidir. Bu politikalar, doğru şekilde yapılandırılmazsa atlamalara neden olabilir. Kontrol edin:

Az - Conditional Access Policies / MFA Bypass

Gruplar

# Enumerate groups
az ad group list
az ad group list --query "[].[displayName]" -o table
# Get info of 1 group
az ad group show --group <group>
# Get "admin" groups
az ad group list --query "[].displayName" | findstr /i "admin"
az ad group list --query "[?contains(displayName,'admin')].displayName"
# All groups from AzureAD
az ad group list --query "[].{osi:onPremisesSecurityIdentifier,displayName:displayName,description:description}[?osi==null]"
az ad group list --query "[?onPremisesSecurityIdentifier==null].displayName"
# All groups synced from on-prem
az ad group list --query "[].{osi:onPremisesSecurityIdentifier,displayName:displayName,description:description}[?osi!=null]"
az ad group list --query "[?onPremisesSecurityIdentifier!=null].displayName"
# Get members of group
az ad group member list --group <group> --query "[].userPrincipalName" -o table
# Check if member of group
az ad group member check --group "VM Admins" --member-id <id>
# Get which groups a group is member of
az ad group get-member-groups -g "VM Admins"
# Get Apps where a group has a role (role not shown)
Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *

Azure AD

# Enumerate Groups
Get-AzureADGroup -All $true
# Get info of 1 group
Get-AzADGroup -DisplayName <resource_group_name> | fl
# Get "admin" groups
Get-AzureADGroup -SearchString "admin" | fl #Groups starting by "admin"
Get-AzureADGroup -All $true |?{$_.Displayname -match "admin"} #Groups with the word "admin"
# Get groups allowing dynamic membership
Get-AzureADMSGroup | ?{$_.GroupTypes -eq 'DynamicMembership'}
# All groups that are from Azure AD
Get-AzureADGroup -All $true | ?{$_.OnPremisesSecurityIdentifier -eq $null}
# All groups that are synced from on-prem (note that security groups are not synced)
Get-AzureADGroup -All $true | ?{$_.OnPremisesSecurityIdentifier -ne $null}
# Get members of a group
Get-AzureADGroupMember -ObjectId <group_id>
# Get roles of group
Get-AzureADMSGroup -SearchString "Contoso_Helpdesk_Administrators" #Get group id
Get-AzureADMSRoleAssignment -Filter "principalId eq '69584002-b4d1-4055-9c94-320542efd653'"
# Get Administrative Units of a group
$groupObj = Get-AzureADGroup -Filter "displayname eq 'TestGroup'"
Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -Id $_.Id | where {$_.Id -eq $groupObj.ObjectId} }

Azure AD, Microsoft'un bulut tabanlı kimlik ve erişim yönetimi hizmetidir. Azure AD, kullanıcıların ve uygulamaların kimlik doğrulamasını ve yetkilendirilmesini sağlar. Azure AD, Azure hizmetlerine ve diğer Microsoft hizmetlerine erişim sağlamak için kullanılır.

Azure AD'yi pentest etmek için Az PowerShell kullanabilirsiniz. Az PowerShell, Azure kaynaklarını yönetmek için kullanılan bir komut satırı aracıdır. Azure AD'yi pentest etmek için aşağıdaki adımları izleyebilirsiniz:

  1. Az PowerShell'i yükleyin ve yapılandırın.

  2. Azure AD'ye bağlanın.

  3. Azure AD'deki kullanıcıları, grupları ve rolleri listeleyin.

  4. Azure AD'deki uygulamaları ve bunlara erişim izinlerini listeleyin.

  5. Azure AD'deki kimlik doğrulama ayarlarını kontrol edin.

  6. Azure AD'deki güvenlik politikalarını kontrol edin.

  7. Azure AD'deki günlükleri ve denetim kayıtlarını kontrol edin.

  8. Azure AD'deki erişim kontrollerini test edin.

  9. Azure AD'deki hata mesajlarını analiz edin ve olası zayıf noktaları belirleyin.

  10. Azure AD'deki kullanıcı hesaplarını ve parolalarını test edin.

  11. Azure AD'deki oturum açma işlemlerini izleyin ve izinsiz erişim girişimlerini tespit edin.

Bu adımları izleyerek Azure AD'yi pentest edebilir ve güvenlik açıklarını tespit edebilirsiniz.

# Get all groups
Get-AzADGroup
# Get details of a group
Get-AzADGroup -ObjectId <id>
# Search group by string
Get-AzADGroup -SearchString "admin" | fl * #Search at the beginnig of DisplayName
Get-AzADGroup |?{$_.Displayname -match "admin"}
# Get members of group
Get-AzADGroupMember -GroupDisplayName <resource_group_name>
# Get roles of group
Get-AzRoleAssignment -ResourceGroupName <resource_group_name>

Gruba kullanıcı ekleme

Grubun sahipleri yeni kullanıcıları gruba ekleyebilir

Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose

Gruplar dinamik olabilir, bu da temel olarak bir kullanıcının belirli koşulları karşılaması durumunda bir gruba eklenmesi anlamına gelir. Elbette, koşullar özniteliklere dayanıyorsa ve bir kullanıcı bunları kontrol edebiliyorsa, bu özelliği diğer gruplara girmek için kötüye kullanabilir. Dinamik grupları nasıl kötüye kullanacağınızı aşağıdaki sayfada kontrol edin:

Az - Dynamic Groups Privesc

Hizmet İlkeleri / Kurumsal Uygulamalar

PowerShell terminolojisinde Hizmet İlkesi Azure portalında (web) Kurumsal Uygulamalar olarak adlandırılır.

# Get Service Principals
az ad sp list --all
az ad sp list --all --query "[].[displayName]" -o table
# Get details of one SP
az ad sp show --id 00000000-0000-0000-0000-000000000000
# Search SP by string
az ad sp list --all --query "[?contains(displayName,'app')].displayName"
# Get owner of service principal
az ad sp owner list --id <id> --query "[].[displayName]" -o table
# Get service principals owned by the current user
az ad sp list --show-mine
# List apps that have password credentials
az ad sp list --all --query "[?passwordCredentials != null].displayName"
# List apps that have key credentials (use of certificate authentication)
az ad sp list -all --query "[?keyCredentials != null].displayName"

Azure AD

# Get Service Principals
Get-AzureADServicePrincipal -All $true
# Get details about a SP
Get-AzureADServicePrincipal -ObjectId <id> | fl *
# Get SP by string name or Id
Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"} | fl
Get-AzureADServicePrincipal -All $true | ?{$_.AppId -match "103947652-1234-5834-103846517389"}
# Get owner of SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwner |fl *
# Get objects owned by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwnedObject
# Get objects created by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalCreatedObject
# Get groups where the SP is a member
Get-AzureADServicePrincipal | Get-AzureADServicePrincipalMembership
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembership |fl *

Azure AD, Microsoft'un bulut tabanlı kimlik ve erişim yönetimi hizmetidir. Azure AD, kullanıcıların ve uygulamaların kimlik doğrulamasını ve yetkilendirilmesini sağlar. Azure AD, Azure hizmetlerine ve diğer Microsoft hizmetlerine erişim sağlamak için kullanılır.

Azure AD'yi pentest etmek için Az PowerShell kullanabilirsiniz. Az PowerShell, Azure kaynaklarını yönetmek için kullanılan bir komut satırı aracıdır. Azure AD'yi pentest etmek için aşağıdaki adımları izleyebilirsiniz:

  1. Az PowerShell'i yükleyin ve yapılandırın.

  2. Azure AD'ye bağlanın.

  3. Azure AD'deki kullanıcıları, grupları ve rolleri listeleyin.

  4. Azure AD'deki uygulamaları ve bunlara erişim izinlerini listeleyin.

  5. Azure AD'deki kimlik doğrulama ayarlarını kontrol edin.

  6. Azure AD'deki güvenlik politikalarını kontrol edin.

  7. Azure AD'deki günlükleri ve denetim kayıtlarını kontrol edin.

  8. Azure AD'deki erişim kontrollerini test edin.

  9. Azure AD'deki hata mesajlarını analiz edin ve olası zayıf noktaları belirleyin.

  10. Azure AD'deki kullanıcı hesaplarını ve parolalarını test edin.

  11. Azure AD'deki oturum açma işlemlerini izleyin ve izinsiz erişim girişimlerini tespit edin.

Bu adımları izleyerek Azure AD'yi pentest edebilir ve güvenlik açıklarını tespit edebilirsiniz.

# Get SPs
Get-AzADServicePrincipal
# Get info of 1 SP
Get-AzADServicePrincipal -ObjectId <id>
# Search SP by string
Get-AzADServicePrincipal | ?{$_.DisplayName -match "app"}
# Get roles of a SP
Get-AzRoleAssignment -ServicePrincipalName <String>

Azure AD

Introduction

Azure Active Directory (Azure AD) is a cloud-based identity and access management service provided by Microsoft. It allows organizations to manage user identities and control access to resources in the Azure cloud environment.

Azure AD Security

When performing a penetration test on Azure AD, there are several areas to focus on:

User Enumeration

User enumeration involves identifying valid user accounts in Azure AD. This can be done through various methods, such as querying the Azure AD Graph API or using tools like az command-line interface.

Password Attacks

Password attacks involve attempting to crack or guess user passwords in Azure AD. This can be done through techniques like brute-forcing, password spraying, or using password cracking tools.

Privilege Escalation

Privilege escalation involves gaining higher levels of access in Azure AD. This can be achieved by exploiting misconfigurations, vulnerabilities, or weak access controls.

Token Manipulation

Token manipulation involves manipulating authentication tokens in Azure AD to gain unauthorized access to resources. This can be done through techniques like token replay, token theft, or token forgery.

Federation Attacks

Federation attacks involve exploiting vulnerabilities in the federation trust between Azure AD and other identity providers. This can lead to unauthorized access to Azure AD resources.

Account Takeover

Account takeover involves gaining unauthorized access to user accounts in Azure AD. This can be done through techniques like password spraying, phishing, or exploiting weak authentication mechanisms.

Conclusion

Azure AD is a critical component of the Azure cloud environment, and securing it is essential for maintaining the overall security of an organization's Azure resources. By understanding the various security risks and vulnerabilities associated with Azure AD, organizations can take proactive measures to protect their Azure AD environment.

$Token = 'eyJ0eX..'
$URI = 'https://graph.microsoft.com/v1.0/applications'
$RequestParams = @{
Method  = 'GET'
Uri     = $URI
Headers = @{
'Authorization' = "Bearer $Token"
}
}
(Invoke-RestMethod @RequestParams).value

Bir Hizmet İlkesinin Sahibi, şifresini değiştirebilir.

Her Kurumsal Uygulamada bir istemci sırrı listele ve eklemeyi deneyin

```powershell # Just call Add-AzADAppSecret Function Add-AzADAppSecret { <# .SYNOPSIS Add client secret to the applications.

.PARAMETER GraphToken Pass the Graph API Token

.EXAMPLE PS C:> Add-AzADAppSecret -GraphToken 'eyJ0eX..'

.LINK https://docs.microsoft.com/en-us/graph/api/application-list?view=graph-rest-1.0&tabs=http https://docs.microsoft.com/en-us/graph/api/application-addpassword?view=graph-rest-1.0&tabs=http #>

[CmdletBinding()] param( [Parameter(Mandatory=$True)] [String] $GraphToken = $null )

$AppList = $null $AppPassword = $null

List All the Applications

$Params = @{ "URI" = "https://graph.microsoft.com/v1.0/applications" "Method" = "GET" "Headers" = @{ "Content-Type" = "application/json" "Authorization" = "Bearer $GraphToken" } }

try { $AppList = Invoke-RestMethod @Params -UseBasicParsing } catch { }

Add Password in the Application

if($AppList -ne $null) { [System.Collections.ArrayList]$Details = @()

foreach($App in $AppList.value) { $ID = $App.ID $psobj = New-Object PSObject

$Params = @{ "URI" = "https://graph.microsoft.com/v1.0/applications/$ID/addPassword" "Method" = "POST" "Headers" = @{ "Content-Type" = "application/json" "Authorization" = "Bearer $GraphToken" } }

$Body = @{ "passwordCredential"= @{ "displayName" = "Password" } }

try { $AppPassword = Invoke-RestMethod @Params -UseBasicParsing -Body ($Body | ConvertTo-Json) Add-Member -InputObject $psobj -NotePropertyName "Object ID" -NotePropertyValue $ID Add-Member -InputObject $psobj -NotePropertyName "App ID" -NotePropertyValue $App.appId Add-Member -InputObject $psobj -NotePropertyName "App Name" -NotePropertyValue $App.displayName Add-Member -InputObject $psobj -NotePropertyName "Key ID" -NotePropertyValue $AppPassword.keyId Add-Member -InputObject $psobj -NotePropertyName "Secret" -NotePropertyValue $AppPassword.secretText $Details.Add($psobj) | Out-Null } catch { Write-Output "Failed to add new client secret to '$($App.displayName)' Application." } } if($Details -ne $null) { Write-Output "" Write-Output "Client secret added to : " Write-Output $Details | fl * } } else { Write-Output "Failed to Enumerate the Applications." } }

</details>

### Roller

<div data-gb-custom-block data-tag="tabs"></div>

<div data-gb-custom-block data-tag="tab" data-title='az cli'>

```bash
# Get roles
az role definition list
# Get assigned roles
az role assignment list --all --query "[].roleDefinitionName"
az role assignment list --all | jq '.[] | .roleDefinitionName,.scope'
# Get info of 1 role
az role definition list --name "AzureML Registry User"
# Get only custom roles
az role definition list --custom-role-only
# Get only roles assigned to the resource group indicated
az role definition list --resource-group <resource_group>
# Get only roles assigned to the indicated scope
az role definition list --scope <scope>
# Get all the principals a role is assigned to
az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,resourceGroup:resourceGroup,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='<ROLE_NAME>']"

Azure AD

# Get all available role templates
Get-AzureADDirectoryroleTemplate
# Get enabled roles (Assigned roles)
Get-AzureADDirectoryRole
Get-AzureADDirectoryRole -ObjectId <roleID> #Get info about the role
# Get custom roles - use AzureAdPreview
Get-AzureADMSRoleDefinition | ?{$_.IsBuiltin -eq $False} | select DisplayName
# Users assigned a role (Global Administrator)
Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember
Get-AzureADDirectoryRole -ObjectId <id> | fl
# Roles of the Administrative Unit (who has permissions over the administrative unit and its members)
Get-AzureADMSScopedRoleMembership -Id <id> | fl *

Azure AD, Microsoft'un bulut tabanlı kimlik ve erişim yönetimi hizmetidir. Azure AD, kullanıcıların ve uygulamaların kimlik doğrulamasını ve yetkilendirilmesini sağlar. Azure AD, Azure hizmetlerine ve diğer Microsoft hizmetlerine erişim sağlamak için kullanılır.

Azure AD'yi pentest etmek için Az PowerShell kullanabilirsiniz. Az PowerShell, Azure kaynaklarını yönetmek için kullanılan bir komut satırı aracıdır. Azure AD'yi pentest etmek için aşağıdaki adımları izleyebilirsiniz:

  1. Az PowerShell'i yükleyin ve yapılandırın.

  2. Azure AD'ye bağlanın.

  3. Azure AD'deki kullanıcıları, grupları ve rolleri listeleyin.

  4. Azure AD'deki uygulamaları ve bunlara erişim izinlerini listeleyin.

  5. Azure AD'deki kimlik doğrulama ayarlarını kontrol edin.

  6. Azure AD'deki güvenlik politikalarını kontrol edin.

  7. Azure AD'deki günlükleri ve denetim kayıtlarını kontrol edin.

  8. Azure AD'deki zayıf noktaları ve güvenlik açıklarını tespit etmek için otomatik araçlar kullanın.

Azure AD'yi pentest etmek için Az PowerShell'i kullanmak, Azure AD'nin güvenlik açıklarını tespit etmek ve düzeltmek için önemli bir adımdır. Bu sayede Azure AD'nin güvenliğini artırabilir ve potansiyel saldırılara karşı korunabilirsiniz.

# Get role assignments on the subscription
Get-AzRoleDefinition
# Get Role definition
Get-AzRoleDefinition -Name "Virtual Machine Command Executor"
# Get roles of a user or resource
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res_group_name>/providers/Microsoft.Compute/virtualMachines/<vm_name>

Azure AD

Introduction

Azure Active Directory (Azure AD) is a cloud-based identity and access management service provided by Microsoft. It allows organizations to manage user identities and control access to resources in the Azure cloud environment.

Azure AD Security

When performing a penetration test on Azure AD, there are several areas to focus on:

User Enumeration

User enumeration involves identifying valid user accounts in Azure AD. This can be done through various methods, such as querying the Azure AD Graph API or using tools like az command-line interface.

Password Attacks

Password attacks involve attempting to crack or guess user passwords in Azure AD. This can be done through techniques like brute-forcing, dictionary attacks, or password spraying.

Privilege Escalation

Privilege escalation involves gaining higher levels of access in Azure AD. This can be achieved by exploiting misconfigurations, vulnerabilities, or weak access controls.

Token Manipulation

Token manipulation involves manipulating authentication tokens in Azure AD to gain unauthorized access to resources. This can be done through techniques like token replay attacks or token forging.

Federation Attacks

Federation attacks involve exploiting vulnerabilities in the federation trust between Azure AD and other identity providers. This can lead to unauthorized access to Azure AD resources.

Data Exfiltration

Data exfiltration involves stealing or leaking sensitive data from Azure AD. This can be done through techniques like exploiting misconfigurations, using malicious applications, or leveraging weak permissions.

Conclusion

Azure AD is a critical component of the Azure cloud environment, and securing it is essential for maintaining the overall security of an organization's resources. By understanding the various security risks and implementing appropriate countermeasures, organizations can better protect their Azure AD environment.

# Get permissions over a resource using ARM directly
$Token = (Get-AzAccessToken).Token
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
$RequestParams = @{
Method = 'GET'
Uri = $URI
Headers = @{
'Authorization' = "Bearer $Token"
}
}
(Invoke-RestMethod @RequestParams).value

Cihazlar

# If you know how to do this send a PR!

Azure AD

# Enumerate Devices
Get-AzureADDevice -All $true | fl *
# List all the active devices (and not the stale devices)
Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null}
# Get owners of all devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwner
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# Registred users of all the devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUser
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# Get dives managed using Intune
Get-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"}
# Get devices owned by a user
Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com
# Get Administrative Units of a device
Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} }

Bir cihaz (VM) AzureAD katılımlı ise, AzureAD kullanıcıları giriş yapabilir. Ayrıca, oturum açan kullanıcı cihazın Sahibi ise, o kullanıcı yerel yönetici olacaktır.

Uygulamalar

Uygulamalar, portalda Uygulama Kayıtlarıdır (Kurumsal Uygulamalar değil). Ancak, her Uygulama Kaydı aynı isme sahip bir Kurumsal Uygulama (Hizmet İlkesi) oluşturur. Ayrıca, Uygulama çok kiracılı bir Uygulama ise, başka bir Kurumsal Uygulama (Hizmet İlkesi) aynı isimle o kiracıda oluşturulur.

Bir Uygulama oluşturulduğunda, 2 tür izin verilir:

  • Hizmet İlkesine verilen İzinler

  • Kullanıcı adına uygulamanın sahip olabileceği ve kullanabileceği İzinler.

# List Apps
az ad app list
az ad app list --query "[].[displayName]" -o table
# Get info of 1 App
az ad app show --id 00000000-0000-0000-0000-000000000000
# Search App by string
az ad app list --query "[?contains(displayName,'app')].displayName"
# Get the owner of an application
az ad app owner list --id <id> --query "[].[displayName]" -o table
# List all the apps with an application password
az ad app list --query "[?passwordCredentials != null].displayName"
# List apps that have key credentials (use of certificate authentication)
az ad app list --query "[?keyCredentials != null].displayName"

Azure AD

# List all registered applications
Get-AzureADApplication -All $true
# Get details of an application
Get-AzureADApplication -ObjectId <id>  | fl *
# List all the apps with an application password
Get-AzureADApplication -All $true | %{if(Get-AzureADApplicationPasswordCredential -ObjectID $_.ObjectID){$_}}
# Get owner of an application
Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *

Azure AD, Microsoft'un bulut tabanlı kimlik ve erişim yönetimi hizmetidir. Azure AD, kullanıcıların ve uygulamaların kimlik doğrulamasını ve yetkilendirilmesini sağlar. Azure AD, Azure hizmetlerine ve diğer Microsoft hizmetlerine erişim sağlamak için kullanılır.

Azure AD'yi pentest etmek için Az PowerShell kullanabilirsiniz. Az PowerShell, Azure kaynaklarını yönetmek için kullanılan bir komut satırı aracıdır. Azure AD'yi pentest etmek için aşağıdaki adımları izleyebilirsiniz:

  1. Az PowerShell'i yükleyin ve yapılandırın.

  2. Azure AD'ye bağlanın.

  3. Azure AD'deki kullanıcıları, grupları ve rolleri listeleyin.

  4. Azure AD'deki uygulamaları ve bunlara erişim izinlerini listeleyin.

  5. Azure AD'deki kimlik doğrulama ayarlarını kontrol edin.

  6. Azure AD'deki güvenlik politikalarını kontrol edin.

  7. Azure AD'deki günlükleri ve denetim kayıtlarını kontrol edin.

  8. Azure AD'deki erişim kontrollerini test edin.

  9. Azure AD'deki hata mesajlarını analiz edin ve olası zayıf noktaları belirleyin.

  10. Azure AD'deki kullanıcı hesaplarını ve parolalarını test edin.

  11. Azure AD'deki oturum açma işlemlerini izleyin ve izinsiz erişim girişimlerini tespit edin.

Bu adımları izleyerek Azure AD'yi pentest edebilir ve güvenlik açıklarını tespit edebilirsiniz.

# Get Apps
Get-AzADApplication
# Get details of one App
Get-AzADApplication -ObjectId <id>
# Get App searching by string
Get-AzADApplication | ?{$_.DisplayName -match "app"}
# Get Apps with password
Get-AzADAppCredential

Bir uygulama, AppRoleAssignment.ReadWrite izniyle kendisine rol vererek Global Admin'e yükseltilebilir. Daha fazla bilgi için burayı kontrol edin.

Bir uygulamanın bir belirteç istediğinde kimliğini kanıtlamak için kullandığı gizli dizedir. Bu parolayı bulursanız, kiracı içindeki hizmet başkanı olarak erişebilirsiniz. Bu parola yalnızca oluşturulduğunda görünür (değiştirebilirsiniz, ancak tekrar alamazsınız). Uygulamanın sahibi, ona bir parola ekleyebilir (böylece onun yerine geçebilir). Bu hizmet başkanlarıyla yapılan oturum açmalar riskli olarak işaretlenmez ve MFA'ya sahip olmazlar.

Uygulamalar ve (Kurumsal Uygulamalar veya Hizmet Başkanları) Arasındaki Fark

Azure'da bir uygulama ile bir Hizmet Başkanı arasındaki fark:

  • Uygulama/Uygulama Kayıtları: Azure AD'nizde bulunan uygulamalardır

  • (Get-AzureADApplication -filter "DisplayName eq 'testapp'")

  • Hizmet Başkanı/Kurumsal Uygulamalar: Azure AD'nizdeki güvenlik nesneleridir ve Azure Dizini'nde ayrıcalıklara sahip olabilirler ve uygulamanıza veya üçüncü taraf bir uygulamaya bağlıdır

  • (Get-AzureADServicePrincipal -filter "DisplayName eq 'testapp'")

  • Eğer izinler çok hassassa, bir yönetici bu izinleri onaylamak zorunda kalabilir.

Bir uygulama, Üçüncü taraf kiracıda çalışabilir ve onu kullanmaya başladığınızda ve erişim verdiğinizde, ihtiyaç duyduğu bilgilere erişim sağlamak için kendi kiracınızda bir Kurumsal Uygulama/Hizmet Başkanı oluşturulur:

Yönetim Birimleri

Kullanıcıların daha iyi yönetimi için kullanılır.

Yönetim birimleri, bir roldeki izinleri tanımladığınız kuruluşunuzun herhangi bir bölümüne izinleri sınırlar. Örneğin, yönetim birimlerini kullanarak Yardım Masası Yöneticisi rolünü bölgesel destek uzmanlarına devredebilir ve yalnızca destekledikleri bölgedeki kullanıcıları yönetmelerine izin verebilirsiniz.

Bu nedenle, yönetici birimine roller atayabilir ve üyeleri bu rolleri alır.

AzureAD

Azure Active Directory (Azure AD) is a cloud-based identity and access management service provided by Microsoft. It is used to manage user identities and control access to resources in the Azure cloud environment.

Enumeration

User Enumeration

To enumerate users in Azure AD, you can use the following methods:

  1. Azure Portal: Navigate to the Azure AD section in the Azure Portal and view the list of users.

  2. Azure AD Graph API: Use the Azure AD Graph API to query for user information.

  3. Microsoft Graph API: Use the Microsoft Graph API to query for user information.

Group Enumeration

To enumerate groups in Azure AD, you can use the following methods:

  1. Azure Portal: Navigate to the Azure AD section in the Azure Portal and view the list of groups.

  2. Azure AD Graph API: Use the Azure AD Graph API to query for group information.

  3. Microsoft Graph API: Use the Microsoft Graph API to query for group information.

Application Enumeration

To enumerate applications in Azure AD, you can use the following methods:

  1. Azure Portal: Navigate to the Azure AD section in the Azure Portal and view the list of applications.

  2. Azure AD Graph API: Use the Azure AD Graph API to query for application information.

  3. Microsoft Graph API: Use the Microsoft Graph API to query for application information.

Exploitation

Password Spray Attack

A password spray attack is a type of brute-force attack where a single password is tested against multiple user accounts. This attack is often used to bypass account lockout policies that are triggered by multiple failed login attempts.

To perform a password spray attack against Azure AD, you can use the following methods:

  1. Azure Portal: Use the Azure Portal to manually test a single password against multiple user accounts.

  2. Azure AD Graph API: Use the Azure AD Graph API to automate the password spray attack.

  3. Microsoft Graph API: Use the Microsoft Graph API to automate the password spray attack.

Password Hash Cracking

If you have obtained the password hashes of user accounts in Azure AD, you can attempt to crack them using password cracking tools such as Hashcat or John the Ripper.

Token Impersonation

If you have obtained a valid access token for a user account in Azure AD, you can use it to impersonate that user and perform actions on their behalf. This can be done by modifying the token's claims or by using the token to authenticate requests to Azure AD.

Privilege Escalation

To escalate privileges in Azure AD, you can try the following methods:

  1. Group Membership: Check if the user account is a member of any privileged groups in Azure AD.

  2. Application Permissions: Check if the user account has any privileged application permissions in Azure AD.

  3. Role-Based Access Control (RBAC): Check if the user account has any privileged RBAC roles assigned in Azure AD.

Post-Exploitation

Data Exfiltration

To exfiltrate data from Azure AD, you can use the following methods:

  1. Azure Portal: Manually download or export data from the Azure Portal.

  2. Azure AD Graph API: Use the Azure AD Graph API to programmatically retrieve and exfiltrate data.

  3. Microsoft Graph API: Use the Microsoft Graph API to programmatically retrieve and exfiltrate data.

Persistence

To maintain persistence in Azure AD, you can try the following methods:

  1. Service Principals: Create a service principal with the necessary permissions to access Azure AD resources.

  2. Application Registrations: Register an application in Azure AD and configure it to have the necessary permissions.

  3. Conditional Access Policies: Configure conditional access policies to control access to Azure AD resources.

Lateral Movement

To move laterally within Azure AD, you can try the following methods:

  1. Group Membership: Add the compromised user account to privileged groups in Azure AD.

  2. Application Permissions: Grant the compromised user account privileged application permissions in Azure AD.

  3. Role-Based Access Control (RBAC): Assign privileged RBAC roles to the compromised user account in Azure AD.

Covering Tracks

To cover your tracks in Azure AD, you can try the following methods:

  1. Audit Logs: Delete or modify audit logs to remove evidence of your activities.

  2. Azure AD Sign-Ins: Delete or modify sign-in logs to remove evidence of your activities.

  3. Azure AD Directory Logs: Delete or modify directory logs to remove evidence of your activities.

References

# Get Administrative Units
Get-AzureADMSAdministrativeUnit
Get-AzureADMSAdministrativeUnit -Id <id>
# Get ID of admin unit by string
$adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'"
# List the users, groups, and devices affected by the administrative unit
Get-AzureADMSAdministrativeUnitMember -Id <id>
# Get the roles users have over the members of the AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members

Azure AD Kimlik Koruma (AIP)

Azure AD Kimlik Koruma (AIP), Azure Active Directory'deki kullanıcı kimliklerini tehlikeye atılmaktan korumak için otomatik tespit ve düzeltme kullanarak bir güvenlik hizmetidir. AIP sürekli olarak kullanıcı oturum açmalarını ve kimlik yapılandırmalarını izler ve risk değerlendirmesi yapar, çok faktörlü kimlik doğrulama gerektirme veya potansiyel olarak tehlikeli faaliyetleri engelleme gibi uygun güvenlik önlemlerini otomatik olarak uygular. Bu, kuruluşların kimlik temelli güvenlik ihlallerini önlemelerine yardımcı olur.

Akış:

  1. Azure AD Kimlik Koruma, kullanıcı etkinliklerini izler ve oturum açmalar, kimlik doğrulama olayları ve diğer ilgili etkinlikler hakkında veri toplar.

  2. Hizmet, bu verileri analiz etmek ve potansiyel güvenlik tehditlerini tespit etmek için makine öğrenimi algoritmalarını kullanır.

  3. Azure AD Kimlik Koruma, tehdide (örneğin, oturum açma) bir risk seviyesi atar ve gerektiğinde otomatik bir eylem gerçekleştirmek için bir uyarı oluşturur.

Azure AD Şifre Koruma (APP)

Azure AD Şifre Koruma (APP), Azure Active Directory'de zayıf şifreleri engelleyerek güçlü şifre politikalarını zorlamaya yardımcı olan bir güvenlik özelliğidir. APP, yaygın olarak kullanılan zayıf şifreleri ve bunların varyantlarını engelleyerek şifreyle ilgili ihlallerin riskini azaltır. Hem bulut düzeyinde hem de yerinde Active Directory'de uygulanabilir ve kuruluş genelinde şifre güvenliğini artırır.

Referanslar

Last updated