diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 01f94afbd..76c75a7b4 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -14,7 +14,7 @@ az-basic-information/ Para auditar um ambiente AZURE, é muito importante saber: quais **serviços estão sendo usados**, o que está **sendo exposto**, quem tem **acesso** a quê e como os serviços internos do Azure e os **serviços externos** estão conectados. -Do ponto de vista do Red Team, o **primeiro passo para comprometer um ambiente Azure** é conseguir obter algum **ponto de apoio**. +Do ponto de vista de um Red Team, o **primeiro passo para comprometer um ambiente Azure** é conseguir obter algum **ponto de apoio**. ### Enumeração Externa & Acesso Inicial @@ -38,26 +38,33 @@ Com essas informações, as maneiras mais comuns de tentar obter um ponto de apo - Vulnerabilidades em Aplicações Hospedadas no Azure - [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) com acesso ao endpoint de metadados - **Tomadas de Subdomínio** como em [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/) +- **Outras configurações incorretas de serviços do Azure** - Se algum laptop de desenvolvedor estiver comprometido ([WinPEAS e LinPEAS](https://github.com/peass-ng/PEASS-ng) podem encontrar essas informações): - 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 -- Carregue: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)` +- Carregue-o: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)` - **`AzureRmContext.json`** contém informações sobre logins anteriores usando Az PowerShell (mas sem credenciais) -- Dentro de **`C:\Users\\AppData\Local\Microsoft\IdentityCache\*`** estão vários arquivos `.bin` com **tokens de acesso**, tokens de ID e informações de conta criptografadas com o DPAPI dos usuários. +- Dentro de **`C:\Users\\AppData\Local\Microsoft\IdentityCache\*`** estão vários arquivos `.bin` com **tokens de acesso**, tokens de ID e informações de conta criptografadas com o DPAPI do usuário. - É possível encontrar mais **tokens de acesso** nos arquivos `.tbres` dentro de **`C:\Users\\AppData\Local\Microsoft\TokenBroken\Cache\`** que contêm um base64 criptografado com DPAPI com tokens de acesso. - No Linux e macOS, você pode obter **tokens de acesso, tokens de atualização e tokens de ID** do Az PowerShell (se usado) executando `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` - No Windows, isso gera apenas tokens de ID. - É possível ver se o Az PowerShell foi usado no Linux e macOS verificando se `$HOME/.local/share/.IdentityService/` existe (embora os arquivos contidos estejam vazios e sejam inúteis) +Encontre **outras configurações incorretas de serviços do Azure** que podem levar a um ponto de apoio na página a seguir: + +{{#ref}} +az-unauthenticated-enum-and-initial-entry/ +{{#endref}} + > [!NOTE] > Lembre-se de que geralmente a parte **mais barulhenta** da enumeração é o **login**, não a enumeração em si. -### Ferramentas de Azure & Entra ID +### Ferramentas do Azure & Entra ID As seguintes ferramentas serão super úteis para enumerar tanto inquilinos do Entra ID quanto ambientes do Azure lentamente (para evitar detecção) ou automaticamente (para economizar tempo): @@ -73,7 +80,7 @@ Em casos onde você tem algumas credenciais válidas, mas não consegue fazer lo - **Whitelist de IP** -- Você precisa comprometer um IP válido - **Restrições geográficas** -- Descubra onde o usuário mora ou onde estão os escritórios da empresa e obtenha um IP da mesma cidade (ou país, pelo menos) -- **Navegador** -- Talvez apenas um navegador de certos SO (Windows, Linux, Mac, Android, iOS) seja permitido. Descubra qual SO a vítima/empresa usa. +- **Navegador** -- Talvez apenas um navegador de um determinado SO (Windows, Linux, Mac, Android, iOS) seja permitido. Descubra qual SO a vítima/empresa usa. - Você também pode tentar **comprometer credenciais de Service Principal**, pois geralmente são menos limitadas e seu login é menos revisado Após contornar isso, você pode ser capaz de voltar à sua configuração inicial e ainda terá acesso. @@ -128,7 +135,7 @@ Get-AzureADTenantDetail {{#endtabs }} -### Enumeração de Entra ID & Escalação de Privilégios +### Enumeração do Entra ID e Escalação de Privilégios Por padrão, qualquer usuário deve ter **permissões suficientes para enumerar** coisas como usuários, grupos, funções, principais de serviço... (ver [permissões padrão do AzureAD](az-basic-information/index.html#default-user-permissions)).\ Você pode encontrar aqui um guia: @@ -137,7 +144,7 @@ Você pode encontrar aqui um guia: az-services/az-azuread.md {{#endref}} -Verifique as **ferramentas de Pós-Exploração** para encontrar ferramentas para escalar privilégios no Entra ID como **AzureHound:** +Verifique as **ferramentas de Pós-Exploração** para encontrar ferramentas para escalar privilégios no Entra ID, como **AzureHound:** {{#ref}} az-enumeration-tools.md#automated-post-exploitation-tools @@ -146,37 +153,56 @@ az-enumeration-tools.md#automated-post-exploitation-tools ### Enumerar Serviços do Azure -Uma vez que você sabe quem é, pode começar a enumerar os **serviços do Azure aos quais você tem acesso**. +Uma vez que você saiba quem é, pode começar a enumerar os **serviços do Azure aos quais você tem acesso**. -O comando Az PowerShell **`Get-AzResource`** permite que você **saiba os recursos que seu usuário atual tem visibilidade**. +Você deve começar a descobrir as **permissões que possui** 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"` -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`** +2. **Encontre as permissões que você tem sobre os recursos aos quais tem acesso e encontre as funções atribuídas a você**: -Na seção seguinte, você pode encontrar informações sobre os serviços do Azure mais comuns e como enumerá-los: +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`**. + +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: + +- **`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 seguinte, você pode encontrar **informações sobre os serviços mais comuns do Azure e como enumerá-los**: {{#ref}} az-services/ {{#endref}} -### Escalação de Privilégios, Pós-Exploração & Persistência em Serviços do Azure +### Escalação de Privilégios, Pós-Exploração e Persistência em Serviços do Azure -Uma vez que você sabe 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 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**. -Na seção seguinte, você pode encontrar informações sobre como escalar privilégios nos serviços do Azure mais comuns: +Na seção seguinte, você pode encontrar informações sobre como escalar privilégios nos serviços mais comuns do Azure: {{#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 do Azure mais comuns: +Na próxima, você pode encontrar informações sobre como realizar ataques de pós-exploração nos serviços mais comuns do Azure: {{#ref}} az-post-exploitation/ {{#endref}} -Na próxima, você pode encontrar informações sobre como manter persistência nos serviços do Azure mais comuns: +Na próxima, você pode encontrar informações sobre como manter persistência nos serviços mais comuns do Azure: {{#ref}} az-persistence/ diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/README.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/README.md deleted file mode 100644 index 8512f1fb2..000000000 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/README.md +++ /dev/null @@ -1 +0,0 @@ -# Az - Escalada de Privilégios diff --git a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-storage-unauth.md b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-storage-unauth.md new file mode 100644 index 000000000..cd2e4d061 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-storage-unauth.md @@ -0,0 +1,41 @@ +# Az - Storage Unauth + +{{#include ../../../banners/hacktricks-training.md}} + +## Storage Unauth + +Para mais informações sobre armazenamento, consulte: + +{{#ref}} +../az-services/az-storage.md +{{#endref}} + +### Open Storage + +Você pode descobrir armazenamento aberto com uma ferramenta como [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1), que usará o arquivo **`Microburst/Misc/permutations.txt`** para gerar permutações (muito simples) para tentar **encontrar contas de armazenamento abertas**. +```bash +Import-Module .\MicroBurst\MicroBurst.psm1 +Invoke-EnumerateAzureBlobs -Base corp +[...] +https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list +[...] + +# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list +# Check: ssh_info.json +# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json +``` +Você também pode usar um método do [**MicroBust**](https://github.com/NetSPI/MicroBurst) para esse objetivo. Esta função irá buscar o nome do domínio base (e algumas permutações) em vários **domínios azure** (incluindo domínios de armazenamento): +```bash +Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose +Invoke-EnumerateAzureSubDomains -Base corp -Verbose +``` +### SAS URLs + +Uma _**assinatura de acesso compartilhado**_ (SAS) URL é uma URL que **fornece acesso** a uma parte específica de uma conta de Armazenamento (pode ser um contêiner completo, um arquivo...) com algumas permissões específicas (leitura, escrita...) sobre os recursos. Se você encontrar uma vazada, poderá acessar informações sensíveis, elas se parecem com isso (isso é para acessar um contêiner, se fosse apenas concedendo acesso a um arquivo, o caminho da URL também conteria esse arquivo): + +`https://.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D` + +Use [**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-explorer/) para acessar os dados + + +{{#include ../../../banners/hacktricks-training.md}}