Az - AzureAD (AAD)

Вивчайте та практикуйте взлом AWS: Школа HackTricks для експертів червоної команди AWS (ARTE) Вивчайте та практикуйте взлом GCP: Школа HackTricks для експертів червоної команди GCP (GRTE)

Підтримайте HackTricks

Основна інформація

Azure Active Directory (Azure AD) служить хмарним сервісом Microsoft для управління ідентичністю та доступом. Він є ключовим для того, щоб співробітники могли увійти та отримати доступ до ресурсів як всередині, так і поза організацією, охоплюючи Microsoft 365, портал Azure та безліч інших програм SaaS. Дизайн Azure AD спрямований на надання основних ідентифікаційних сервісів, включаючи аутентифікацію, авторизацію та управління користувачами.

Ключові функції Azure AD включають багатофакторну аутентифікацію та умовний доступ, разом з безшовною інтеграцією з іншими службами безпеки Microsoft. Ці функції значно підвищують безпеку ідентичностей користувачів та дозволяють організаціям ефективно впроваджувати та здійснювати свої політики доступу. Як фундаментальний компонент екосистеми хмарних послуг Microsoft, Azure AD є ключовим для хмарного управління ідентичностями користувачів.

Сутності

Перелік

Для цього переліку ви можете використовувати інструмент командного рядка az, модуль PowerShell AzureAD (або AzureAD Preview) та модуль Az PowerShell.

У Linux вам потрібно буде встановити PowerShell Core:

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

Різниця модулів

  • AzureAD - це модуль PowerShell від Microsoft для управління Azure AD. Він не показує всі властивості об'єктів Azure AD і не може бути використаний для доступу до інформації про ресурси Azure.

  • Az PowerShell - це модуль для управління ресурсами Azure з командного рядка PowerShell.

Підключення

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

Коли ви увійдете через CLI в Azure за допомогою будь-якої програми, ви використовуєте Azure Application з тенантом, який належить Microsoft. Ці додатки, такі як ті, які ви можете створити у своєму обліковому записі, мають ідентифікатор клієнта. Ви не зможете побачити всі з них у списках дозволених додатків, які ви бачите в консолі, але вони дозволені за замовчуванням.

Наприклад, скрипт powershell, який аутентифікується, використовує додаток з ідентифікатором клієнта 1950a258-227b-4e31-a9cf-717495945fc2. Навіть якщо додаток не з'являється в консолі, системний адміністратор може заблокувати цей додаток, щоб користувачі не могли отримати доступ за допомогою інструментів, які підключаються через цей додаток.

Однак є інші ідентифікатори клієнтів додатків, які дозволять вам підключитися до Azure:

# 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

Користувачі

# 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 є кілька важливих налаштувань безпеки, які слід перевірити під час аудиту безпеки. Нижче наведено кілька рекомендацій:

  1. Мультифакторна аутентифікація (MFA): Переконайтеся, що MFA увімкнено для всіх користувачів, особливо для адміністраторів.

  2. Управління ролями: Перегляньте та налаштуйте ролі користувачів в Azure AD, щоб уникнути надмірних привілеїв.

  3. Управління доступом: Перевірте налаштування доступу до додатків та сервісів у Azure AD, щоб уникнути непотрібних дозволів.

  4. Моніторинг входів: Налаштуйте моніторинг та журналювання подій для виявлення підозрілих активностей.

  5. Оновлення безпеки: Переконайтеся, що всі системи та додатки в Azure AD мають встановлені оновлення безпеки.

  6. Налаштування паролів: Вимагайте складних паролів та періодичну зміну паролів для підвищення безпеки облікових записів.

  7. Шифрування даних: Використовуйте шифрування для захисту конфіденційної інформації в Azure AD.

Ці рекомендації допоможуть підвищити рівень безпеки в 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 за допомогою Az PowerShell

  1. Встановіть модуль Az PowerShell, якщо він ще не встановлений:

Install-Module -Name Az -AllowClobber -Scope CurrentUser
  1. Підключіться до Azure AD за допомогою свого облікового запису:

Connect-AzAccount
  1. Після виконання цієї команди вас буде перенаправлено на сторінку входу Azure AD у вашому веб-браузері. Увійдіть за допомогою свого облікового запису та надайте необхідні дозволи.

  2. Після успішного входу ви будете підключені до свого облікового запису Azure AD через Az PowerShell.

Get-AzContext

Ця команда виведе інформацію про ваш поточний контекст Azure AD.

# 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

Зміна пароля користувача

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

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

MFA & Умовні політики доступу

Високо рекомендується додати MFA до кожного користувача, однак деякі компанії можуть не встановлювати його або встановлювати з Умовним доступом: Користувачу буде потрібно MFA, якщо він увійде з конкретного місця, браузера або якоїсь умови. Ці політики, якщо не налаштовані правильно, можуть бути схильні до обхіду. Перевірте:

Az - Conditional Access Policies / MFA Bypass

Групи

# 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 є кілька важливих налаштувань безпеки, які слід перевірити під час аудиту безпеки. Ось кілька рекомендацій:

  1. Міцні паролі: Переконайтеся, що вимагаються міцні паролі для всіх користувачів.

  2. Багатофакторна аутентифікація (MFA): Увімкніть MFA для всіх користувачів, особливо для адміністраторів.

  3. Обмеження доступу: Налаштуйте обмеження доступу до Azure AD лише з довірених IP-адрес.

  4. Моніторинг входів: Включіть моніторинг входів для виявлення підозрілих дій.

  5. Аудит безпеки: Регулярно перевіряйте журнали аудиту безпеки для виявлення можливих загроз.

  6. Оновлення безпеки: Переконайтеся, що всі оновлення безпеки встановлені та активні.

# 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} }

Аутентифікація

  1. Встановіть модуль Az та модуль AzureAD:

Install-Module -Name Az -AllowClobber -Scope CurrentUser
Install-Module -Name AzureAD -AllowClobber -Scope CurrentUser
  1. Увійдіть в обліковий запис Azure:

Connect-AzAccount
  1. Увійдіть в обліковий запис Azure AD:

Connect-AzureAD
  1. Використовуйте команду Get-AzContext для перевірки поточного контексту.

# 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>

Додавання користувача до групи

Власники групи можуть додавати нових користувачів до групи

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

Групи можуть бути динамічними, що в основному означає, що якщо користувач відповідає певним умовам, він буде доданий до групи. Звісно, якщо умови базуються на атрибутах, які користувач може контролювати, він може зловживати цією функцією, щоб потрапити в інші групи. Перевірте, як зловживати динамічними групами на наступній сторінці:

Az - Dynamic Groups Privesc

Сервісні принципали / Підприємницькі додатки

Зверніть увагу, що Сервісний принципал в термінології PowerShell називається Підприємницькі додатки в порталі Azure (веб-версія).

# 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 є кілька важливих налаштувань безпеки, які слід перевірити під час тестування проникнення:

  1. Міцні паролі: Переконайтеся, що вимоги до паролів належним чином налаштовані і вимагають складних паролів.

  2. Багаторівнева аутентифікація: Перевірте, чи ввімкнена багаторівнева аутентифікація для усіх користувачів.

  3. Управління доступом: Перевірте налаштування ролей та дозволів для користувачів та груп.

  4. Моніторинг та журналювання: Переконайтеся, що ввімкнені та налаштовані журнали подій для виявлення підозрілих дій.

  5. Оновлення та патчі: Перевірте, чи всі системи мають встановлені оновлення та патчі для усунення відомих уразливостей.

  6. Інтеграція з іншими сервісами: Перевірте налаштування інтеграції Azure AD з іншими сервісами та додатками на предмет можливих уразливостей.

  7. Резервне копіювання та відновлення: Переконайтеся, що налаштовані процедури резервного копіювання та відновлення даних для забезпечення безпеки та доступності інформації.

# 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

  1. Встановіть модуль Azure AD:

Install-Module -Name Az -AllowClobber -Scope CurrentUser
  1. Увійдіть в обліковий запис Azure:

Connect-AzAccount
  1. Виберіть підписку, яку потрібно використовувати:

Select-AzSubscription -SubscriptionName "SubscriptionName"
  1. Отримайте дані про користувачів Azure AD:

Get-AzureADUser
# 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>

The Azure AD application registration process is a critical step in integrating your application with Azure AD. During a penetration test, it is important to review the permissions granted to the application to ensure they are not overly permissive and do not expose sensitive data. Additionally, verifying the redirect URIs configured for the application can help prevent unauthorized access to authentication tokens. Finally, monitoring the application registration portal for any unauthorized changes is crucial for maintaining the security of your 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

Власник службового принципалу може змінити його пароль.

Перелік та спроба додати клієнтський секрет до кожного корпоративного додатку

```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>

### Ролі

<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

  1. Фішинг атаки: Надсилання шахрайських електронних листів для отримання облікових даних користувачів.

  2. Атаки на паролі: Спроби вгадати або викрасти паролі користувачів для незаконного доступу.

  3. Атаки на множинні фактори аутентифікації (MFA): Спроби обійти або вимкнути MFA для отримання доступу до облікових записів.

  4. Атаки на токени доступу: Використання викрадених або підроблених токенів доступу для отримання доступу до ресурсів Azure AD.

  5. Атаки на службу Azure AD Connect: Використання вразливостей в Azure AD Connect для отримання доступу до 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 за допомогою Az PowerShell

  1. Встановіть модуль Az PowerShell, якщо він ще не встановлений:

Install-Module -Name Az -AllowClobber -Scope CurrentUser
  1. Підключіться до Azure AD за допомогою свого облікового запису:

Connect-AzAccount
  1. Після виконання цієї команди вас буде перенаправлено на веб-сторінку для входу. Увійдіть за допомогою свого облікового запису Azure AD.

  2. Після успішного входу ви отримаєте повідомлення про успішне підключення до Azure AD.

Account          SubscriptionName TenantId                             Environment
-------          ---------------- --------                             -----------
example@example.com Example Subscription 00000000-0000-0000-0000-000000000000 AzureCloud
  1. Тепер ви підключені до Azure AD і готові виконувати різні дії з обліковими записами користувачів, групами тощо.

# 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. Він дозволяє вам виконувати дії, такі як створення, оновлення, видалення користувачів та груп, а також керування додатками та налаштуваннями Azure AD. Ви можете використовувати цей модуль для автоматизації завдань управління Azure AD у своїх сценаріях скриптів або взаємодіяти з Azure AD під час виконання ручних завдань.

# 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

Пристрої

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

У Azure AD є кілька корисних функцій безпеки, які можна сконфігурувати для підвищення рівня безпеки вашої організації. Нижче наведено кілька порад забезпечення безпеки Azure AD:

  1. Увімкнення багатофакторної аутентифікації (MFA): Вимагайте введення додаткового підтвердження для доступу до облікових записів, що допомагає уникнути несанкціонованого доступу.

  2. Моніторинг увійдів користувачів: Слідкуйте за активністю користувачів та вчасно реагуйте на будь-які підозрілі дії.

  3. Обмеження доступу до даних: Налаштуйте права доступу до даних таким чином, щоб користувачі мали доступ лише до необхідної інформації.

  4. Аудит безпеки: Проводьте регулярні аудити безпеки для виявлення можливих порушень та вразливостей.

  5. Оновлення безпеки: Переконайтеся, що всі системи та програмне забезпечення оновлені до останніх версій з усуненням відомих уразливостей.

# 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} }

Якщо пристрій (VM) приєднаний до AzureAD, користувачі з AzureAD зможуть увійти в систему. Більше того, якщо увійшовший користувач є власником пристрою, він буде локальним адміністратором.

Додатки

Додатки - це Реєстрації додатків в порталі (не Підприємницькі додатки). Але кожна Реєстрація додатку створить Підприємницький додаток (Службовий принципал) з такою ж назвою. Більше того, якщо Додаток є багатоаналітичним Додатком, буде створено інший Підприємницький додаток (Службовий принципал) у цьому арендарі з такою ж назвою.

Під час створення Додатку надаються 2 типи дозволів:

  • Дозволи, надані Службовому принципалу

  • Дозволи, які може мати та використовувати додаток від імені користувача.

# 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

Під час тестування на проникнення Azure AD важливо перевірити наступні пункти:

  1. Перевірте налаштування політик паролів для користувачів.

  2. Перевірте налаштування багаторівневоѤ аутентифікації.

  3. Перевірте налаштування доступу до додатків та привілеїв.

  4. Перевірте налаштування моніторингу та журналювання подій.

  5. Перевірте налаштування захисту від витоку даних.

  6. Перевірте налаштування автоматичного блокування облікових записів після певної кількості невдалих спроб входу.

  7. Перевірте налаштування обмеження доступу до 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 *

# 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

Додаток з дозволом AppRoleAssignment.ReadWrite може підвищити рівень доступу до глобального адміністратора, надаючи собі цю роль. Для отримання додаткової інформації перевірте це.

Секретний рядок, який додаток використовує для підтвердження своєї ідентичності при запиті токена, - це пароль додатка. Таким чином, якщо ви знайдете цей пароль, ви зможете отримати доступ як службовий принципал всередині орендаря. Зверніть увагу, що цей пароль видно лише при його генерації (ви можете змінити його, але не зможете отримати його знову). Власник додатка може додати до нього пароль (щоб він міг видаавати себе). Увіходи в якості цих службових принципалів не позначаються як ризиковані і не потребують багатофакторної аутентифікації.

Відмінність між Додатками та (Підприємницькими Додатками або Службовими Принципалами)

Відмінність між додатком та службовим принципалом в Azure:

  • Додаток/Реєстрації додатків: Це додатки, які існують у вашому Azure AD

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

  • Службовий Принципал/Підприємницькі Додатки: Об'єкти безпеки у вашому Azure AD, які можуть мати привілеї в Azure Directory та пов'язані або з вашим додатком, або з додатком сторонньої сторони

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

  • Адміністратор може затвердити надані дозволи, якщо вони є дуже чутливими.

Додаток може працювати в орендарі сторонньої сторони, і як тільки ви починаєте його використовувати та надаєте йому доступ, в вашому орендарі створюється Підприємницький Додаток/Службовий Принципал, щоб надати йому доступ до необхідної інформації:

Адміністративні Одиниці

Вони використовуються для кращого управління користувачами.

Адміністративні одиниці обмежують дозволи в ролі на будь-яку частину вашої організації, яку ви визначаєте. Наприклад, ви можете використовувати адміністративні одиниці для делегування ролі Адміністратора Довідкової служби регіональним спеціалістам з підтримки, щоб вони могли керувати користувачами лише в регіоні, який вони підтримують.

Отже, ви можете призначати ролі адміністратора одиниці, і члени цієї одиниці матимуть ці ролі.

Атаки на Azure AD

Перехоплення сеансу

Атакувальник може перехопити сеанс користувача, використовуючи методи, такі як перехоплення кукісів або атаку людини посередника (MITM). Це може дозволити атакувальнику отримати доступ до облікових даних користувача та виконувати дії від його імені.

Атаки на паролі

Атакувальники можуть використовувати різні методи для отримання паролів користувачів, такі як перехоплення паролів під час введення, фішингові атаки або використання слабких паролів. Після отримання пароля атакувальник може мати повний доступ до облікового запису користувача.

Атаки на множинні фактори аутентифікації

Якщо механізми множинного фактора аутентифікації налаштовані некоректно або користувачі використовують ненадійні методи підтвердження, атакувальники можуть знайти способ обійти ці заходи безпеки та отримати доступ до облікових даних.

# 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 (AIP)

Захист ідентичності Azure AD (AIP) - це служба безпеки, яка використовує автоматизоване виявлення та усунення, щоб захистити ідентичності користувачів в Azure Active Directory від компрометації. AIP постійно моніторить та оцінює ризики увіходу користувачів та конфігурації ідентичності, автоматично застосовуючи відповідні заходи безпеки, такі як вимога багатофакторної аутентифікації або блокування потенційно небезпечних дій. Це допомагає організаціям запобігати порушенням безпеки на основі ідентичності.

Потік:

  1. Захист ідентичності Azure AD моніторить діяльність користувачів та збирає дані про увіходи користувачів, події аутентифікації та інші відповідні дії.

  2. Служба використовує алгоритми машинного навчання для аналізу цих даних та виявлення потенційних загроз безпеці.

  3. Захист ідентичності Azure AD призначає рівень ризику загрози (наприклад, увіхід) та генерує сповіщення у разі необхідності виконання якої-небудь автоматичної дії.

Захист пароля Azure AD (APP)

Захист пароля Azure AD (APP) - це функція безпеки, яка допомагає запобігти використанню слабких паролів в Azure Active Directory, зміцнюючи політику створення паролів. APP блокує часто використовувані слабкі паролі та їх варіанти, зменшуючи ризик порушень, пов'язаних з паролями. Це може бути застосовано як на рівні хмари, так і в локальному каталозі Active Directory, підвищуючи загальну безпеку паролів в організації.

Посилання

Last updated