diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index ac1b9d93b..df0f2f0fd 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -43,7 +43,7 @@ Com essas informações, as maneiras mais comuns de tentar obter um ponto de apo - Dentro de **`/.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//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//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//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//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//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 "" --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//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '' +``` +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//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 "").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 "").Actions`**. - -Ou chamar a API diretamente com **`az rest --method GET --uri "https://management.azure.com//subscriptions//providers/Microsoft.Authorization/roleDefinitions/?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//providers/Microsoft.Authorization/roleDefinitions/?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/ diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md index 43bb9e331..924752ddd 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -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//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:
@@ -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**:
-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 .\.pfx -Credentials $credentials