Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes

This commit is contained in:
Translator
2025-01-25 14:38:51 +00:00
parent c41c319ff5
commit f34ce2b2d6
5 changed files with 327 additions and 235 deletions

View File

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