mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-15 14:23:16 -08:00
Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes
This commit is contained in:
@@ -4,9 +4,9 @@
|
||||
|
||||
## Основна інформація
|
||||
|
||||
Azure Active Directory (Azure AD) є хмарною службою Microsoft для управління ідентичністю та доступом. Вона є важливою для того, щоб співробітники могли входити в систему та отримувати доступ до ресурсів як всередині, так і за межами організації, включаючи Microsoft 365, портал Azure та безліч інших SaaS-додатків. Дизайн Azure AD зосереджений на наданні основних ідентифікаційних послуг, зокрема **автентифікації, авторизації та управління користувачами**.
|
||||
Azure Active Directory (Azure AD) є хмарним сервісом Microsoft для управління ідентичністю та доступом. Він є важливим для того, щоб співробітники могли входити в систему та отримувати доступ до ресурсів як всередині, так і за межами організації, включаючи Microsoft 365, портал Azure та безліч інших SaaS-додатків. Дизайн Azure AD зосереджений на наданні основних ідентифікаційних послуг, зокрема **автентифікації, авторизації та управління користувачами**.
|
||||
|
||||
Ключові функції Azure AD включають **багатофакторну автентифікацію** та **умовний доступ**, а також безшовну інтеграцію з іншими службами безпеки Microsoft. Ці функції значно підвищують безпеку ідентичностей користувачів і надають організаціям можливість ефективно впроваджувати та забезпечувати виконання своїх політик доступу. Як основний компонент екосистеми хмарних служб Microsoft, Azure AD є ключовим для управління ідентичностями користувачів у хмарі.
|
||||
Ключові функції Azure AD включають **багатофакторну автентифікацію** та **умовний доступ**, а також безшовну інтеграцію з іншими службами безпеки Microsoft. Ці функції значно підвищують безпеку ідентичностей користувачів і надають організаціям можливість ефективно впроваджувати та забезпечувати свої політики доступу. Як основний компонент екосистеми хмарних сервісів Microsoft, Azure AD є ключовим для управління ідентичностями користувачів у хмарі.
|
||||
|
||||
## Перерахування
|
||||
|
||||
@@ -66,12 +66,23 @@ $token = (az account get-access-token --resource https://graph.microsoft.com --q
|
||||
$secureToken = ConvertTo-SecureString $token -AsPlainText -Force
|
||||
Connect-MgGraph -AccessToken $secureToken
|
||||
|
||||
# Get token from session
|
||||
Parameters = @{
|
||||
Method = "GET"
|
||||
Uri = "/v1.0/me"
|
||||
OutputType = "HttpResponseMessage"
|
||||
}
|
||||
$Response = Invoke-MgGraphRequest @Parameters
|
||||
$Headers = $Response.RequestMessage.Headers
|
||||
$Headers.Authorization.Parameter
|
||||
|
||||
|
||||
# Find commands
|
||||
Find-MgGraphCommand -command *Mg*
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
{{#tab name="Az" }}
|
||||
```bash
|
||||
Connect-AzAccount #Open browser
|
||||
# Using credentials
|
||||
@@ -80,15 +91,11 @@ $creds = New-Object System.Management.Automation.PSCredential("test@corp.onmicro
|
||||
Connect-AzAccount -Credential $creds
|
||||
|
||||
# Get Access Token
|
||||
(Get-AzAccessToken).Token
|
||||
# Request access token to other endpoints: AadGraph, AnalysisServices, Arm, Attestation, Batch, DataLake, KeyVault, MSGraph, OperationalInsights, ResourceManager, Storage, Synapse
|
||||
(Get-AzAccessToken -ResourceTypeName MSGraph).Token
|
||||
(Get-AzAccessToken -Resource "https://graph.microsoft.com").Token
|
||||
(ConvertFrom-SecureString (Get-AzAccessToken -ResourceTypeName Arm -AsSecureString).Token -AsPlainText)
|
||||
|
||||
# Connect with access token
|
||||
Connect-AzAccount -AccountId test@corp.onmicrosoft.com -AccessToken $token
|
||||
Connect-AzAccount -AccessToken $token -GraphAccessToken $graphaccesstoken -AccountId <ACCOUNT-ID>
|
||||
## The -AccessToken is from management.azure.com
|
||||
Connect-AzAccount -AccountId test@corp.onmicrosoft.com [-AccessToken $ManagementToken] [-GraphAccessToken $AADGraphToken] [-MicrosoftGraphAccessToken $MicrosoftGraphToken] [-KeyVaultAccessToken $KeyVaultToken]
|
||||
|
||||
# Connect with Service principal/enterprise app secret
|
||||
$password = ConvertTo-SecureString 'KWEFNOIRFIPMWL.--DWPNVFI._EDWWEF_ADF~SODNFBWRBIF' -AsPlainText -Force
|
||||
@@ -149,9 +156,9 @@ 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`**. Навіть якщо додаток не з'являється в консолі, системний адміністратор може **заблокувати цю програму**, щоб користувачі не могли отримати доступ, використовуючи інструменти, які підключаються через цей додаток.
|
||||
Наприклад, **скрипт powershell**, який **автентифікує**, використовує додаток з ідентифікатором клієнта **`1950a258-227b-4e31-a9cf-717495945fc2`**. Навіть якщо додаток не з'являється в консолі, системний адміністратор може **заблокувати цей додаток**, щоб користувачі не могли отримати доступ, використовуючи інструменти, які підключаються через цей додаток.
|
||||
|
||||
Однак є **інші ідентифікатори клієнтів** програм, які **дозволять вам підключитися до Azure**:
|
||||
```bash
|
||||
@@ -279,7 +286,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
{{#tab name="Az" }}
|
||||
```bash
|
||||
# Enumerate users
|
||||
Get-AzADUser
|
||||
@@ -302,7 +309,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
|
||||
@@ -346,6 +353,22 @@ az role assignment list --include-groups --include-classic-administrators true -
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az" }}
|
||||
```bash
|
||||
# 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>
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
# Enumerate Groups
|
||||
@@ -373,22 +396,6 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
||||
Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```bash
|
||||
# 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>
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
#### Додати користувача до групи
|
||||
@@ -433,28 +440,7 @@ az ad sp list --query '[?length(keyCredentials) > `0` || length(passwordCredenti
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
# 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 *
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
{{#tab name="Az" }}
|
||||
```bash
|
||||
# Get SPs
|
||||
Get-AzADServicePrincipal
|
||||
@@ -481,14 +467,35 @@ Headers = @{
|
||||
(Invoke-RestMethod @RequestParams).value
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
# 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 *
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> Власник Service Principal може змінити його пароль.
|
||||
> Власник служби Principal може змінити його пароль.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Список та спроба додати клієнтський секрет до кожного Enterprise App</summary>
|
||||
<summary>Список та спроба додати секрет клієнта до кожного корпоративного додатку</summary>
|
||||
```bash
|
||||
# Just call Add-AzADAppSecret
|
||||
Function Add-AzADAppSecret
|
||||
@@ -625,6 +632,19 @@ az ad app list --query '[?length(keyCredentials) > `0` || length(passwordCredent
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az" }}
|
||||
```bash
|
||||
# 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
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
# List all registered applications
|
||||
@@ -637,19 +657,6 @@ Get-AzureADApplication -All $true | %{if(Get-AzureADApplicationPasswordCredentia
|
||||
Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```bash
|
||||
# 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
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
@@ -660,8 +667,8 @@ Get-AzADAppCredential
|
||||
> Секретний рядок, який додаток використовує для підтвердження своєї особи при запиті токена, є паролем додатка.\
|
||||
> Отже, якщо ви знайдете цей **пароль**, ви зможете отримати доступ як **сервісний принципал** **всередині** **орендаря**.\
|
||||
> Зверніть увагу, що цей пароль видимий лише під час генерації (ви можете змінити його, але не зможете отримати його знову).\
|
||||
> **Власник** **додатка** може **додати пароль** до нього (щоб він міг його імітувати).\
|
||||
> Вхідні дані таких сервісних принципалів **не позначаються як ризикові** і **не матимуть 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)
|
||||
|
||||
@@ -716,7 +723,7 @@ az role assignment list --all --query "[?principalName=='carlos@carloshacktricks
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
{{#tab name="Az" }}
|
||||
```bash
|
||||
# Get role assignments on the subscription
|
||||
Get-AzRoleDefinition
|
||||
@@ -747,7 +754,7 @@ Headers = @{
|
||||
|
||||
### Ролі Entra ID
|
||||
|
||||
Для отримання додаткової інформації про ролі Azure дивіться:
|
||||
Для отримання додаткової інформації про ролі Azure перегляньте:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -911,7 +918,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
Однією з основних функцій, які надає PIM, є те, що він дозволяє не призначати ролі принципалам, які постійно активні, а робити їх **придатними на певний період часу (наприклад, 6 місяців)**. Тоді, коли користувач хоче активувати цю роль, він повинен запитати її, вказуючи час, на який йому потрібен привілей (наприклад, 3 години). Потім **адміністратор повинен затвердити** запит.\
|
||||
Зверніть увагу, що користувач також зможе попросити **продовжити** час.
|
||||
|
||||
Більше того, **PIM надсилає електронні листи** щоразу, коли привілейована роль надається комусь.
|
||||
Більше того, **PIM надсилає електронні листи** щоразу, коли привілейована роль призначається комусь.
|
||||
|
||||
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -923,7 +930,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
- Вимагати обґрунтування при активації
|
||||
- Вимагати інформацію про квиток при активації
|
||||
- Вимагати затвердження для активації
|
||||
- Максимальний час для закінчення дії придатних призначень
|
||||
- Максимальний час для закінчення придатних призначень
|
||||
- Багато інших налаштувань щодо того, коли і кому надсилати сповіщення, коли відбуваються певні дії з цією роллю
|
||||
|
||||
### Політики умовного доступу <a href="#title-text" id="title-text"></a>
|
||||
@@ -938,7 +945,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
|
||||
Захист ідентичності Entra - це служба безпеки, яка дозволяє **виявляти, коли користувач або вхід занадто ризикований** для прийняття, дозволяючи **блокувати** користувача або спробу входу.
|
||||
|
||||
Вона дозволяє адміністратору налаштувати блокування спроб, коли ризик "Низький і вище", "Середній і вище" або "Високий". Хоча за замовчуванням вона повністю **вимкнена**:
|
||||
Вона дозволяє адміністратору налаштувати її для **блокування** спроб, коли ризик "Низький і вище", "Середній і вище" або "Високий". Хоча за замовчуванням вона повністю **вимкнена**:
|
||||
|
||||
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user