From 6c7658a707880d46037de3a321d68c748ef9c98b Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 9 Feb 2025 17:53:59 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-services/az-azuread. --- .../azure-security/az-services/az-azuread.md | 192 ++++++++++-------- 1 file changed, 109 insertions(+), 83 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-services/az-azuread.md b/src/pentesting-cloud/azure-security/az-services/az-azuread.md index e86790093..af6e5fe91 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -6,7 +6,7 @@ Azure Active Directory (Azure AD) є хмарним сервісом Microsoft для управління ідентичністю та доступом. Він є важливим для того, щоб співробітники могли входити в систему та отримувати доступ до ресурсів як всередині, так і за межами організації, включаючи Microsoft 365, портал Azure та безліч інших SaaS-додатків. Дизайн Azure AD зосереджений на наданні основних ідентифікаційних послуг, зокрема **автентифікації, авторизації та управління користувачами**. -Ключові функції Azure AD включають **багатофакторну автентифікацію** та **умовний доступ**, а також безшовну інтеграцію з іншими службами безпеки Microsoft. Ці функції значно підвищують безпеку ідентичностей користувачів і надають організаціям можливість ефективно впроваджувати та забезпечувати свої політики доступу. Як основний компонент екосистеми хмарних сервісів Microsoft, Azure AD є ключовим для управління ідентичностями користувачів у хмарі. +Ключові функції Azure AD включають **багатофакторну автентифікацію** та **умовний доступ**, а також безшовну інтеграцію з іншими службами безпеки Microsoft. Ці функції значно підвищують безпеку ідентичностей користувачів і надають організаціям можливість ефективно впроваджувати та забезпечувати виконання своїх політик доступу. Як основний компонент екосистеми хмарних сервісів Microsoft, Azure AD є ключовим для управління ідентичностями користувачів у хмарі. ## Перерахування @@ -184,7 +184,7 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token {{#endtab }} {{#endtabs }} -Коли ви **входите** через **CLI** в Azure з будь-якою програмою, ви використовуєте **Azure Application** з **тенанту**, що належить **Microsoft**. Ці програми, як ті, що ви можете створити у своєму обліковому записі, **мають ідентифікатор клієнта**. Ви **не зможете побачити всі з них** у **списках дозволених програм**, які ви можете побачити в консолі, **але вони дозволені за замовчуванням**. +Коли ви **входите** через **CLI** в Azure з будь-якою програмою, ви використовуєте **Azure Application** з **оренди**, яка належить **Microsoft**. Ці програми, як ті, що ви можете створити у своєму обліковому записі, **мають ідентифікатор клієнта**. Ви **не зможете побачити всі з них** у **списках дозволених програм**, які ви можете бачити в консолі, **але вони дозволені за замовчуванням**. Наприклад, **скрипт powershell**, який **автентифікує**, використовує додаток з ідентифікатором клієнта **`1950a258-227b-4e31-a9cf-717495945fc2`**. Навіть якщо додаток не з'являється в консолі, системний адміністратор може **заблокувати цей додаток**, щоб користувачі не могли отримати доступ, використовуючи інструменти, які підключаються через цей додаток. @@ -213,7 +213,7 @@ $token = Invoke-Authorize -Credential $credential ` -Verbose -Debug ` -InformationAction Continue ``` -### Тенанти +### Орендарі {{#tabs }} {{#tab name="az cli" }} @@ -226,7 +226,7 @@ az account tenant list ### Користувачі -Для отримання додаткової інформації про користувачів Entra ID дивіться: +Для отримання додаткової інформації про користувачів Entra ID перегляньте: {{#ref}} ../az-basic-information/ @@ -365,7 +365,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText ``` ### MFA & Conditional Access Policies -Рекомендується додати MFA для кожного користувача, однак деякі компанії можуть не налаштовувати його або можуть налаштувати його з умовним доступом: Користувач буде **зобов'язаний використовувати MFA, якщо** він входить з певного місця, браузера або **якоїсь умови**. Ці політики, якщо не налаштовані правильно, можуть бути схильні до **обхідних** атак. Перевірте: +Рекомендується додати MFA для кожного користувача, однак деякі компанії можуть не налаштовувати його або можуть налаштувати його з умовним доступом: Користувач буде **зобов'язаний використовувати MFA, якщо** він входить з певного місця, браузера або **якоїсь умови**. Ці політики, якщо не налаштовані правильно, можуть бути схильні до **обхідних шляхів**. Перевірте: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -597,11 +597,11 @@ Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalMembersh {{#endtabs }} > [!WARNING] -> Власник служби Principal може змінити його пароль. +> Власник Service Principal може змінити його пароль.
-Список і спроба додати секрет клієнта до кожного корпоративного додатку +Список та спроба додати секрет клієнта до кожного корпоративного додатку ```bash # Just call Add-AzADAppSecret Function Add-AzADAppSecret @@ -793,7 +793,7 @@ Get-AzureADApplication -ObjectId | Get-AzureADApplicationOwner |fl * > Отже, якщо ви знайдете цей **пароль**, ви зможете отримати доступ як **сервісний принципал** **всередині** **орендаря**.\ > Зверніть увагу, що цей пароль видимий лише під час генерації (ви можете змінити його, але не зможете отримати його знову).\ > **Власник** **додатка** може **додати пароль** до нього (щоб він міг видавати себе за нього).\ -> Вхідні дані таких сервісних принципалів **не позначаються як ризиковані** і **не матимуть MFA.** +> Вхідні дані таких сервісних принципалів **не позначаються як ризикові** і **не матимуть MFA.** Можливо знайти список загальновживаних ID додатків, що належать Microsoft, за адресою [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) @@ -840,11 +840,15 @@ az role definition list --resource-group # Get only roles assigned to the indicated scope az role definition list --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=='']" +az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,scope:scope,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='']" # Get all the roles assigned to a user az role assignment list --assignee "" --all --output table # Get all the roles assigned to a user by filtering az role assignment list --all --query "[?principalName=='admin@organizationadmin.onmicrosoft.com']" --output table +# Get deny assignments +az rest --method GET --uri "https://management.azure.com/{scope}/providers/Microsoft.Authorization/denyAssignments?api-version=2022-04-01" +## Example scope of subscription +az rest --method GET --uri "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/providers/Microsoft.Authorization/denyAssignments?api-version=2022-04-01" ``` {{#endtab }} @@ -877,12 +881,20 @@ 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//resourceGroups//providers/Microsoft.Compute/virtualMachines/ +# Get deny assignments +Get-AzDenyAssignment # Get from current subscription +Get-AzDenyAssignment -Scope '/subscriptions/96231a05-34ce-4eb4-aa6a-70759cbb5e83/resourcegroups/testRG/providers/Microsoft.Web/sites/site1' ``` +{{#endtab }} +{{#endtabs }} +``` + {{#endtab }} {{#tab name="Raw" }} + ```bash -# Get permissions over a resource using ARM directly +# Отримати дозволи на ресурс, використовуючи ARM безпосередньо $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 = @{ @@ -894,12 +906,13 @@ Headers = @{ } (Invoke-RestMethod @RequestParams).value ``` + {{#endtab }} {{#endtabs }} -### Ролі Entra ID +### Entra ID Roles -Для отримання додаткової інформації про ролі Azure перегляньте: +For more information about Azure roles check: {{#ref}} ../az-basic-information/ @@ -907,125 +920,134 @@ Headers = @{ {{#tabs }} {{#tab name="az cli" }} + ```bash -# List template Entra ID roles +# Список шаблонів ролей Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/directoryRoleTemplates" -# List enabled built-in Entra ID roles +# Список увімкнених вбудованих ролей Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/directoryRoles" -# List all Entra ID roles with their permissions (including custom roles) +# Список всіх ролей Entra ID з їхніми дозволами (включаючи користувацькі ролі) az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" -# List only custom Entra ID roles +# Список лише користувацьких ролей Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)' -# List all assigned Entra ID roles +# Список всіх призначених ролей Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments" -# List members of a Entra ID roles +# Список учасників ролі Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/directoryRoles//members" -# List Entra ID roles assigned to a user +# Список ролей Entra ID, призначених користувачу az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/users//memberOf/microsoft.graph.directoryRole" \ --query "value[]" \ --output json -# List Entra ID roles assigned to a group +# Список ролей Entra ID, призначених групі az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/groups/$GROUP_ID/memberOf/microsoft.graph.directoryRole" \ --query "value[]" \ --output json -# List Entra ID roles assigned to a service principal +# Список ролей Entra ID, призначених службовому принципалу az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/memberOf/microsoft.graph.directoryRole" \ --query "value[]" \ --output json ``` + {{#endtab }} {{#tab name="Azure AD" }} + ```bash -# Get all available role templates +# Отримати всі доступні шаблони ролей Get-AzureADDirectoryroleTemplate -# Get enabled roles (Assigned roles) +# Отримати активовані ролі (Призначені ролі) Get-AzureADDirectoryRole -Get-AzureADDirectoryRole -ObjectId #Get info about the role -# Get custom roles - use AzureAdPreview +Get-AzureADDirectoryRole -ObjectId #Отримати інформацію про роль +# Отримати користувацькі ролі - використовуйте 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 | fl -# Roles of the Administrative Unit (who has permissions over the administrative unit and its members) +# Ролі адміністративної одиниці (хто має права над адміністративною одиницею та її членами) Get-AzureADMSScopedRoleMembership -Id | fl * ``` + {{#endtab }} {{#endtabs }} -### Пристрої +### Devices {{#tabs }} {{#tab name="az cli" }} + ```bash -# If you know how to do this send a PR! +# Якщо ви знаєте, як це зробити, надішліть PR! ``` + {{#endtab }} {{#tab name="MS Graph" }} + ```bash -# Enumerate devices using Microsoft Graph PowerShell +# Перерахувати пристрої за допомогою Microsoft Graph PowerShell Get-MgDevice -All -# Get device details +# Отримати деталі пристрою Get-MgDevice -DeviceId | Format-List * -# Get devices managed using Intune +# Отримати пристрої, керовані за допомогою Intune Get-MgDevice -Filter "isCompliant eq true" -All -# Get devices owned by a user +# Отримати пристрої, що належать користувачу Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com -# List available commands in Microsoft Graph PowerShell +# Перелічити доступні команди в Microsoft Graph PowerShell Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement ``` {{#endtab }} {{#tab name="Azure AD" }} + ```bash -# 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 +# Отримати пристрої, керовані за допомогою 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} } ``` + {{#endtab }} {{#endtabs }} > [!WARNING] -> Якщо пристрій (VM) є **приєднаним до AzureAD**, користувачі з AzureAD зможуть **увійти в систему**.\ -> Більше того, якщо увійшовший користувач є **власником** пристрою, він буде **локальним адміністратором**. +> If a device (VM) is **AzureAD joined**, users from AzureAD are going to be **able to login**.\ +> Moreover, if the logged user is **Owner** of the device, he is going to be **local admin**. -### Адміністративні одиниці +### Administrative Units -Для отримання додаткової інформації про адміністративні одиниці перегляньте: +For more information about administrative units check: {{#ref}} ../az-basic-information/ @@ -1033,100 +1055,104 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember {{#tabs }} {{#tab name="az cli" }} + ```bash -# List all administrative units +# Список всіх адміністративних одиниць az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits" -# Get AU info +# Отримати інформацію про AU az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53" -# Get members +# Отримати учасників az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/members" -# Get principals with roles over the AU +# Отримати принципи з ролями над AU az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/scopedRoleMembers" ``` + {{#endtab }} {{#tab name="AzureAD" }} + ```bash -# Get Administrative Units +# Отримати адміністративні одиниці Get-AzureADMSAdministrativeUnit Get-AzureADMSAdministrativeUnit -Id -# Get ID of admin unit by string +# Отримати ID адміністративної одиниці за рядком $adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'" -# List the users, groups, and devices affected by the administrative unit +# Перелічити користувачів, групи та пристрої, які підпадають під адміністративну одиницю Get-AzureADMSAdministrativeUnitMember -Id -# Get the roles users have over the members of the AU -Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members +# Отримати ролі, які мають користувачі над членами AU +Get-AzureADMSScopedRoleMembership -Id | fl #Отримати ID ролі та членів ролі ``` + {{#endtab }} {{#endtabs }} -## Підвищення привілеїв Entra ID +## Entra ID Privilege Escalation {{#ref}} ../az-privilege-escalation/az-entraid-privesc/ {{#endref}} -## Підвищення привілеїв Azure +## Azure Privilege Escalation {{#ref}} ../az-privilege-escalation/az-authorization-privesc.md {{#endref}} -## Захисні механізми +## Defensive Mechanisms -### Управління привілейованими ідентичностями (PIM) +### Privileged Identity Management (PIM) -Управління привілейованими ідентичностями (PIM) в Azure допомагає **запобігти надмірним привілеям**, які без потреби надаються користувачам. +Privileged Identity Management (PIM) in Azure helps to **prevent excessive privileges** to being assigned to users unnecessarily. -Однією з основних функцій, які надає PIM, є те, що він дозволяє не призначати ролі принципалам, які постійно активні, а робити їх **придатними на певний період часу (наприклад, 6 місяців)**. Тоді, коли користувач хоче активувати цю роль, він повинен запитати її, вказуючи час, на який йому потрібен привілей (наприклад, 3 години). Потім **адміністратор повинен затвердити** запит.\ -Зверніть увагу, що користувач також зможе попросити **продовжити** час. +One of the main features provided by PIM is that It allows to not assign roles to principals that are constantly active, but make them **eligible for a period of time (e.g. 6months)**. Then, whenever the user wants to activate that role, he needs to ask for it indicating the time he needs the privilege (e.g. 3 hours). Then an **admin needs to approve** the request.\ +Note that the user will also be able to ask to **extend** the time. -Більше того, **PIM надсилає електронні листи** щоразу, коли привілейована роль призначається комусь. +Moreover, **PIM send emails** whenever a privileged role is being assigned to someone.
-Коли PIM увімкнено, можна налаштувати кожну роль з певними вимогами, такими як: +When PIM is enabled it's possible to configure each role with certain requirements like: -- Максимальна тривалість (години) активації -- Вимагати MFA при активації -- Вимагати контекст аутентифікації умовного доступу -- Вимагати обґрунтування при активації -- Вимагати інформацію про квиток при активації -- Вимагати затвердження для активації -- Максимальний час для закінчення дії придатних призначень -- Багато інших налаштувань щодо того, коли і кому надсилати сповіщення, коли певні дії відбуваються з цією роллю +- Maximum duration (hours) of activation +- Require MFA on activation +- Require Conditional Access acuthenticaiton context +- Require justification on activation +- Require ticket information on activation +- Require approval to activate +- Max time to expire the elegible assignments +- A lot more configuration on when and who to send notifications when certain actions happen with that role -### Політики умовного доступу +### Conditional Access Policies -Перевірте: +Check: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}} -### Захист ідентичності Entra +### Entra Identity Protection -Захист ідентичності Entra - це сервіс безпеки, який дозволяє **виявляти, коли користувач або вхід занадто ризикований** для прийняття, дозволяючи **блокувати** користувача або спробу входу. +Entra Identity Protection is a security service that allows to **detect when a user or a sign-in is too risky** to be accepted, allowing to **block** the user or the sig-in attempt. -Це дозволяє адміністратору налаштувати його для **блокування** спроб, коли ризик "Низький і вище", "Середній і вище" або "Високий". Хоча за замовчуванням він повністю **вимкнений**: +It allows the admin to configure it to **block** attempts when the risk is "Low and above", "Medium and above" or "High". Although, by default it's completely **disabled**:
> [!TIP] -> Сьогодні рекомендується додавати ці обмеження через політики умовного доступу, де можна налаштувати ті ж самі опції. +> Nowadays it's recommended to add these restrictions via Conditional Access policies where it's possible to configure the same options. -### Захист паролів Entra +### Entra Password Protection -Захист паролів Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) - це функція безпеки, яка **допомагає запобігти зловживанню слабкими паролями, блокуючи облікові записи, коли відбувається кілька невдалих спроб входу**.\ -Вона також дозволяє **заборонити користувацький список паролів**, який потрібно надати. +Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) is a security feature that **helps prevent the abuse of weak passwords in by locking out accounts when several unsuccessful login attempts happen**.\ +It also allows to **ban a custom password list** that you need to provide. -Вона може бути **застосована як** на рівні хмари, так і в локальному Active Directory. +It can be **applied both** at the cloud level and on-premises Active Directory. -Режим за замовчуванням - **Аудит**: +The default mode is **Audit**:
-## Посилання +## References - [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)