mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-09 13:49:27 -07:00
Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes
This commit is contained in:
@@ -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/
|
||||
|
||||
+24
-16
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user