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

This commit is contained in:
Translator
2025-02-07 00:04:46 +00:00
parent 09d76ab507
commit 8437acc8c1
2 changed files with 63 additions and 38 deletions
+39 -22
View File
@@ -43,7 +43,7 @@ Com essas informações, as maneiras mais comuns de tentar obter um ponto de apo
- Dentro de **`<HOME>/.Azure`**
- **`azureProfile.json`** contém informações sobre usuários logados no passado
- **`clouds.config` contém** informações sobre assinaturas
- **`service_principal_entries.json`** contém credenciais de aplicativos (id do inquilino, clientes e segredo). Apenas no Linux e macOS
- **`service_principal_entries.json`** contém credenciais de aplicativos (ID do inquilino, clientes e segredo). Apenas no Linux e macOS
- **`msal_token_cache.json`** contém tokens de acesso e tokens de atualização. Apenas no Linux e macOS
- **`service_principal_entries.bin`** e **msal_token_cache.bin** são usados no Windows e são criptografados com DPAPI
- **`msal_http_cache.bin`** é um cache de requisições HTTP
@@ -161,54 +161,71 @@ az-enumeration-tools.md#automated-post-exploitation-tools
Uma vez que você saiba quem é, pode começar a enumerar os **serviços do Azure aos quais você tem acesso**.
Você deve começar a descobrir as **permissões que possui** sobre os recursos. Para isso:
Você deve começar descobrindo as **permissões que você tem** sobre os recursos. Para isso:
1. **Encontre o recurso ao qual você tem algum acesso**:
O comando do Az PowerShell **`Get-AzResource`** permite que você **saiba os recursos que seu usuário atual tem visibilidade**.
Além disso, você pode obter as mesmas informações na **console web** acessando [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ou pesquisando por "Todos os recursos" ou executando: `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
2. **Encontre as permissões que você tem sobre os recursos aos quais tem acesso e encontre as funções atribuídas a você**:
Além disso, você pode obter as mesmas informações na **console web** acessando [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ou pesquisando por "Todos os recursos" ou executando:
```bash
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
```
2. **Encontre as permissões que você tem sobre os recursos aos quais tem acesso e encontre os papéis atribuídos a você**:
Observe que você precisa da permissão **`Microsoft.Authorization/roleAssignments/read`** para executar esta ação.
Além disso, com permissões suficientes, a função **`Get-AzRoleAssignment`** pode ser usada para **enumerar todas as funções** na assinatura ou a permissão sobre um recurso específico, indicando-o como em: **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**.
Além disso, com permissões suficientes, o papel **`Get-AzRoleAssignment`** pode ser usado para **enumerar todos os papéis** na assinatura ou a permissão sobre um recurso específico, indicando-o como:
```bash
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4
```
Também é possível obter essas informações executando:
```bash
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
como em:
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
Outra opção é obter os papéis atribuídos a você no azure com:
```bash
az role assignment list --assignee "<email>" --all --output table
```
Ou execute o seguinte (Se os resultados estiverem vazios, pode ser porque você não tem permissão para obtê-los):
```bash
az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
```
3. **Encontre as permissões granulares dos papéis atribuídos a você**:
Também é possível obter essas informações executando **`az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`** como em:
Em seguida, para obter a permissão granular, você pode executar **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**.
- **`az rest --method GET --uri "https://management.azure.com//subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`**
3. **Encontre as permissões granulares das funções atribuídas a você**:
Então, para obter a permissão granular, você pode executar **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**.
Ou chamar a API diretamente com **`az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"`**.
Na seção a seguir, você pode encontrar **informações sobre os serviços mais comuns do Azure e como enumerá-los**:
Ou chame a API diretamente com
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"
```
Na seção a seguir, você pode encontrar **informações sobre os serviços Azure mais comuns e como enumerá-los**:
{{#ref}}
az-services/
{{#endref}}
### Escalação de Privilégios, Pós-Exploração & Persistência
### Escalação de Privilégios, Pós-Exploração e Persistência
Uma vez que você saiba como o ambiente do Azure está estruturado e quais serviços estão sendo usados, pode começar a procurar maneiras de **escalar privilégios, mover-se lateralmente, realizar outros ataques de pós-exploração e manter persistência**.
Uma vez que você saiba como o ambiente Azure está estruturado e quais serviços estão sendo utilizados, você pode começar a procurar maneiras de **escalar privilégios, mover-se lateralmente, realizar outros ataques de pós-exploração e manter persistência**.
Na seção a seguir, você pode encontrar informações sobre como escalar privilégios nos serviços mais comuns do Azure:
Na seção a seguir, você pode encontrar informações sobre como escalar privilégios nos serviços Azure mais comuns:
{{#ref}}
az-privilege-escalation/
{{#endref}}
Na próxima, você pode encontrar informações sobre como realizar ataques de pós-exploração nos serviços mais comuns do Azure:
Na seguinte, você pode encontrar informações sobre como realizar ataques de pós-exploração nos serviços Azure mais comuns:
{{#ref}}
az-post-exploitation/
{{#endref}}
Na próxima, você pode encontrar informações sobre como manter persistência nos serviços mais comuns do Azure:
Na seguinte, você pode encontrar informações sobre como manter persistência nos serviços Azure mais comuns:
{{#ref}}
az-persistence/
@@ -4,14 +4,22 @@
## Informações Básicas
As políticas de Acesso Condicional do Azure são regras configuradas no Microsoft Azure para impor controles de acesso a serviços e aplicativos do Azure com base em certas **condições**. Essas políticas ajudam as organizações a proteger seus recursos aplicando os controles de acesso corretos nas circunstâncias adequadas.\
As políticas de Acesso Condicional do Azure são regras configuradas no Microsoft Azure para impor controles de acesso aos serviços e aplicativos do Azure com base em certas **condições**. Essas políticas ajudam as organizações a proteger seus recursos aplicando os controles de acesso corretos nas circunstâncias adequadas.\
As políticas de acesso condicional basicamente **definem** **Quem** pode acessar **O Que** de **Onde** e **Como**.
Aqui estão alguns exemplos:
1. **Política de Risco de Login**: Esta política pode ser configurada para exigir autenticação multifatorial (MFA) quando um risco de login é detectado. Por exemplo, se o comportamento de login de um usuário for incomum em comparação com seu padrão regular, como fazer login de um país diferente, o sistema pode solicitar autenticação adicional.
2. **Política de Conformidade de Dispositivo**: Esta política pode restringir o acesso aos serviços do Azure apenas a dispositivos que estejam em conformidade com os padrões de segurança da organização. Por exemplo, o acesso pode ser permitido apenas a dispositivos que tenham software antivírus atualizado ou que estejam executando uma versão específica do sistema operacional.
1. **Política de Risco de Login**: Esta política pode ser configurada para exigir autenticação multifator (MFA) quando um risco de login é detectado. Por exemplo, se o comportamento de login de um usuário for incomum em comparação com seu padrão regular, como fazer login de um país diferente, o sistema pode solicitar autenticação adicional.
2. **Política de Conformidade de Dispositivo**: Esta política pode restringir o acesso aos serviços do Azure apenas a dispositivos que estejam em conformidade com os padrões de segurança da organização. Por exemplo, o acesso pode ser permitido apenas a partir de dispositivos que tenham software antivírus atualizado ou que estejam executando uma determinada versão do sistema operacional.
## Enumeração
```bash
# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'
# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
```
## Bypasses de Políticas de Acesso Condicional
É possível que uma política de acesso condicional esteja **verificando algumas informações que podem ser facilmente manipuladas, permitindo um bypass da política**. E se, por exemplo, a política estiver configurando MFA, o atacante poderá contorná-la.
@@ -21,21 +29,21 @@ Ao configurar uma política de acesso condicional, é necessário indicar os **u
Também é necessário configurar as **condições** que irão **disparar** a política:
- **Rede**: IP, intervalos de IP e localizações geográficas
- Pode ser contornada usando um VPN ou Proxy para se conectar a um país ou conseguindo fazer login a partir de um endereço IP permitido
- Pode ser contornada usando uma VPN ou Proxy para se conectar a um país ou conseguindo fazer login a partir de um endereço IP permitido
- **Riscos da Microsoft**: Risco do usuário, risco de login, risco interno
- **Plataformas de Dispositivo**: Qualquer dispositivo ou selecionar Android, iOS, Windows phone, Windows, macOS, Linux
- **Plataformas de dispositivos**: Qualquer dispositivo ou selecionar Android, iOS, Windows phone, Windows, macOS, Linux
- Se “Qualquer dispositivo” não estiver selecionado, mas todas as outras opções estiverem selecionadas, é possível contorná-la usando um user-agent aleatório não relacionado a essas plataformas
- **Aplicativos cliente**: As opções são “Navegador”, “Aplicativos móveis e clientes de desktop”, “Clientes Exchange ActiveSync” e “Outros clientes”
- Para contornar o login com uma opção não selecionada
- Para contornar, faça login com uma opção não selecionada
- **Filtro para dispositivos**: É possível gerar uma regra relacionada ao dispositivo usado
- **Fluxos de autenticação**: As opções são “Fluxo de código de dispositivo” e “Transferência de autenticação”
- Isso não afetará um atacante, a menos que ele esteja tentando abusar de qualquer um desses protocolos em uma tentativa de phishing para acessar a conta da vítima
Os possíveis **resultados** são: Bloquear ou Conceder acesso com condições potenciais como exigir MFA, dispositivo em conformidade
Os possíveis **resultados** são: Bloquear ou Conceder acesso com condições potenciais como exigir MFA, dispositivo em conformidade...
### Plataformas de Dispositivo - Condição de Dispositivo
### Plataformas de Dispositivos - Condição de Dispositivo
É possível definir uma condição com base na **plataforma do dispositivo** (Android, iOS, Windows, macOS...), no entanto, isso é baseado no **user-agent**, então é fácil de contornar. Mesmo **fazendo todas as opções exigirem MFA**, se você usar um **user-agent que não é reconhecido,** você poderá contornar o MFA ou bloqueio:
É possível definir uma condição com base na **plataforma do dispositivo** (Android, iOS, Windows, macOS...), no entanto, isso é baseado no **user-agent**, então é fácil de contornar. Mesmo **fazendo todas as opções aplicarem MFA**, se você usar um **user-agent que não é reconhecido**, você poderá contornar o MFA ou bloqueio:
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
@@ -48,16 +56,16 @@ Ou usar uma [extensão de navegador como esta](https://chromewebstore.google.com
### Localizações: Países, intervalos de IP - Condição de Dispositivo
Se isso estiver configurado na política condicional, um atacante pode simplesmente usar um **VPN** no **país permitido** ou tentar encontrar uma maneira de acessar a partir de um **endereço IP permitido** para contornar essas condições.
Se isso estiver definido na política condicional, um atacante poderia simplesmente usar uma **VPN** no **país permitido** ou tentar encontrar uma maneira de acessar a partir de um **endereço IP permitido** para contornar essas condições.
### Aplicativos em Nuvem
É possível configurar **políticas de acesso condicional para bloquear ou forçar**, por exemplo, MFA quando um usuário tenta acessar **um aplicativo específico**:
É possível configurar **políticas de acesso condicional para bloquear ou forçar**, por exemplo, MFA quando um usuário tenta acessar um **aplicativo específico**:
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
Para tentar contornar essa proteção, você deve ver se consegue **acessar qualquer aplicativo**.\
A ferramenta [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) tem **dezenas de IDs de aplicativos codificados** e tentará fazer login neles e informá-lo, e até mesmo fornecer o token se for bem-sucedido.
Para tentar contornar essa proteção, você deve verificar se consegue **acessar qualquer aplicativo**.\
A ferramenta [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) tem **dezenas de IDs de aplicativos hardcoded** e tentará fazer login neles e informá-lo, e até mesmo fornecer o token se for bem-sucedido.
Para **testar IDs de aplicativos específicos em recursos específicos**, você também pode usar uma ferramenta como:
```bash
@@ -73,9 +81,9 @@ A ferramenta [**ROPCI**](https://github.com/wunderwuzzi23/ropci) também pode se
## Outros Bypasses de Az MFA
### Toque de chamada
### Toque de telefone
Uma opção de MFA do Azure é **receber uma chamada no número de telefone configurado**, onde será solicitado ao usuário que **envie o caractere `#`**.
Uma opção de MFA do Azure é **receber uma chamada no número de telefone configurado** onde será solicitado ao usuário que **envie o caractere `#`**.
> [!CAUTION]
> Como os caracteres são apenas **tons**, um atacante poderia **comprometer** a mensagem de **correio de voz** do número de telefone, configurando como mensagem o **tom de `#`** e, em seguida, ao solicitar o MFA, garantir que o **telefone da vítima esteja ocupado** (ligando para ele) para que a chamada do Azure seja redirecionada para o correio de voz.
@@ -84,7 +92,7 @@ Uma opção de MFA do Azure é **receber uma chamada no número de telefone conf
As políticas frequentemente exigem um dispositivo compatível ou MFA, então um **atacante poderia registrar um dispositivo compatível**, obter um **token PRT** e **contornar assim o MFA**.
Comece registrando um **dispositivo compatível no Intune**, depois **obtenha o PRT** com:
Comece registrando um **dispositivo compatível no Intune**, então **obtenha o PRT** com:
```bash
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials