Home Grown Red Team: da estação de trabalho ao controlador de domínio com Havoc C2 e Microsoft EDR

Bem vindo de volta! Nesta entrada de blog, enfrentaremos o Microsoft Defender For Endpoint EDR mais uma vez para ver se podemos ir de um contexto de baixa integridade para administrador de domínio e obter a execução remota de código em um controlador de domínio!
Nos últimos dois meses, tenho mergulhado em diferentes técnicas para ver o que podemos fazer com ferramentas de código aberto contra um dos EDRs mais populares do mercado.
Neste blog, abordarei alguns conceitos comuns de acesso a um controlador de domínio, mas com diferentes técnicas que encontrei.
Esses incluem:
- UAC Bypass com um binário personalizado UACME
- Movimento lateral com CrackMapExec e SharpWMI.exe
- Sessão passando para o Covenant
- DCSync com Pacto
Havoc C2
Eu já abordei como colocar o Havoc em funcionamento. Se você não estiver familiarizado com ele, pode conferir meu post Obtendo o sistema no Windows 11 com o Havoc C2 .

Com meu C2 ativado, vou gerar algum shellcode e executá-lo por meio de minha própria ferramenta de shellcode, Harriet.

Agora que tenho um binário FUD, posso transferi-lo para a primeira estação de trabalho em meu ambiente AD.

De acordo com minhas postagens anteriores, temos um ambiente de AD extremamente pequeno aqui. Para fins de tempo e espaço no blog, vamos começar com um DA conhecido em um contexto médio.
Transfiro meu implante para Win11-Blue.blueteam.local e recupero nosso sinalizador inicial.


Vamos verificar o EDR e ver se a execução inicial passou.

Todos quietos! Ok! Podemos seguir em frente. Fazer um simples comando “whoami” nos mostra que Danny está no grupo DA.

A execução do SharpUp nos diz que podemos ignorar o UAC para obter privilégios de administrador.

Binário UACME personalizado
Em uma postagem anterior, usei o método ComputerDefaults para obter administrador, mas isso está sendo capturado pelo Defender For Endpoint. Queremos obter DA sem alertas, então vamos fazer algo ultrajante: colocar algo no disco!
Na minha máquina Windows 11 Development, eu clonei o projeto UACME.

git clone https://github.com/hfiref0x/UACME.git
Carregamos o arquivo sln e temos nosso projeto carregado.

Quando compilado, o binário UACME é denominado Akagi, então vamos começar a personalizar os arquivos encontrados nessa seção do explorador de soluções.

Expandindo o projeto, vemos várias seções para arquivos de cabeçalho, recursos, etc.
Podemos começar nosso processo fazendo uma busca rápida e substituindo strings comuns encontradas no projeto.

Algumas das outras strings que podemos substituir estão abaixo:
Akagi
UACME
UAC
PAYLOAD
Se tentarmos construir a solução agora, ela falhará.

Ele não consegue encontrar o arquivo de ícone porque não mudamos seu nome. Portanto, precisamos alterar seu nome na pasta Akagi.

Assim que alterarmos o nome do ícone, ele será criado com sucesso.

Agora, se olharmos para os detalhes do binário construído, veremos que existem algumas propriedades reveladoras.

Fazemos uma busca rápida por APT 92 em nosso projeto, encontramos o arquivo Resources.rc com essas descrições.

Percorrendo os arquivos de origem, vemos a pasta de métodos.

Cada um desses arquivos de método representa diferentes desvios de UAC a serem usados no binário compilado. Se passarmos por cada um desses métodos, veremos vários comentários com os nomes dos métodos. Para superar o Defender e outros mecanismos AV, precisamos excluir esses comentários de cada arquivo de método.

Remover todos os comentários dos arquivos de métodos pode levar muito tempo, mas devemos fazer isso apenas uma vez antes de ter um binário que não seja capturado pelo AV.
E depois de removermos todos os comentários do arquivo e recompilarmos, obtemos nosso binário. Ao executá-lo no AntiScan.me, vemos que contornamos vários fornecedores de antivírus.

Analisando-o no Windows Defender, vemos que não foi detectado.

Obtendo administrador
De volta ao Havoc, só precisamos fazer o upload do binário para o nosso alvo.

Vamos checar com o EDR da Microsoft para ver se já fomos pegos.

Não parece. Vamos prosseguir!
Com nosso binário UACME no alvo, precisamos executá-lo com nosso método. Os comandos do Powershell e do shell podem nos pegar, então vamos usar o WMI. Felizmente, SharpWMI nos permite executar os comandos na memória.
Mas primeiro, precisamos de um método para o Windows 11.

59 parece bom. Vamos chamar nosso método com SharpWMI.
dotnet inline-execute /home/user/Desktop/SharpWMI.exe action=exec computername=WIN11-BLUE.blueteam.local command=”C:\Users\danny\Downloads\Acaji.exe 59 C:\Users\danny\Downloads \Inj3c13.exe”
E recebemos nosso beacon Admin de volta!

Verificando nosso EDR, não temos detecções.

Excelente! Portanto, agora que determinamos que podemos obter a execução do código sem acionar o EDR, podemos usar esse mesmo método para mover pelo domínio até o controlador de domínio.
NOTA: Claro que você não faria isso em um aplicativo do mundo real. Temos um DA para que possamos apenas DCsync, mas queremos ver se podemos mover sem alterar o EDR.
Movimento lateral
Portanto, no WIN11-BLUE, tínhamos a capacidade de carregar nosso binário, mas como fazemos isso quando não temos um beacon no DC?
Em uma postagem anterior, provei que poderíamos fazer isso com o Powershell e uma tarefa agendada. Neste artigo, usaremos um método diferente. Vamos carregar nosso binário para o destino usando CrackMapExec e, em seguida, chamá-lo com SharpWMI.
Preparando nosso ataque
Portanto, para este POC, vamos fingir mais uma vez que existe um documento ultrassecreto no DC que precisamos exfiltrar. A primeira coisa que precisamos fazer é obter uma senha ou um hash para nosso usuário Danny.
Como somos administradores, podemos usar vários métodos para obter hashes, mas o mais fácil para mim é passar a sessão para o Covenant e usar o comando DCsync.
Então, no Covenant, configuramos nosso arquivo shellcode e o baixamos para nosso sistema local.

Para simplificar, vou mudar o nome do arquivo para grunt.bin e depois vou executá-lo através de Harriet. Isso irá criptografá-lo para que possamos passar pelo EDR.

Agora que temos um binário, podemos usar o Donut para transformá-lo novamente em shellcode.

E a última parte é injetá-lo no processo do nosso executável Havoc.

Com o shellcode injetado com sucesso, vamos até o Covenant e temos um novo grunhido fazendo check-in.

Vamos dar uma olhada no EDR.

Nada para ver aqui! Podemos seguir em frente!
De volta ao Covenant, podemos usar o comando DCsync e obter o hash de Danny. E depois de alguns segundos, Danny e o domínio foram adquiridos.

Tudo bem, legal. Portanto, demonstramos que podemos obter o hash de um DA. Mas o que você faz com ele depois de tê-lo? Lembre-se, o objetivo do nosso exercício não era obter o controle de domínio, mas obter o documento secreto no controlador de domínio.
Movendo-se para o controlador de domínio
Temos um executável FUD que precisamos carregar no DC. Para isso, vamos usar o CrackMapExec. Então aqui está o nosso comando.
crackmapexec smb 192.168.1.9 -u danny -H 83c4be1a3fd33a182dafc8bd3bf53d00 -d blueteam.local — put-file /home/kali/Desktop/Inj3c13.exe \\WINDOWS\\TEMP\\25N0v3.exe
Estamos usando o módulo SMB e temos o IP para o controlador de domínio. Em seguida, usamos o nome de usuário de danny e inserimos seu hash NTLM. Temos o domínio e, em seguida, usamos o comando “-put-file” com o caminho para nosso executável FUD e, em seguida, o diretório no qual queremos soltar o arquivo no DC.
Vamos tentar.

E assim, nosso executável está no DC! Agora precisamos chamá-lo. Podemos usar o SharpWMI.exe para fazer isso na memória, assim como fizemos com o WIN11-BLUE.
E agora temos um farol de alta integridade no DC!

Vamos encontrar o saque!
Após uma pequena enumeração, o encontramos na pasta Documentos de Danny.

Vamos baixá-lo.

Antes de darmos uma olhada, vamos verificar com o EDR.

Para que serve essa coisa?
E aqui está o saque!

Tudo bem! Portanto, para concluir este artigo, vamos falar um pouco sobre o que fizemos e como fizemos.
Começamos com um farol de baixa integridade e escalamos nossos privs criando um binário UACME personalizado que ultrapassou o Windows Defender e o Windows Defender for Endpoint.
Em seguida, chamamos o binário UACME com SharpWMI.exe na memória para uma abordagem mais furtiva ao Powershell ou aos comandos do shell.
Depois que nossos privs foram maximizados, fizemos uma passagem de sessão para o Covenant para usar o comando DCsync para obter o hash NTLM do DA. Em seguida, usamos o CrackMapExec para carregar um beacon no DC e o chamamos usando SharpWMI.exe.
Então, como esse ambiente foi preparado para o nosso sucesso? O WMI não está ativado por padrão para controladores de domínio, servidores Windows ou estações de trabalho Windows 11.
No entanto, em um ambiente corporativo moderno, a maioria dessas máquinas terá o WMI ativado para facilitar a solução de problemas dos administradores de sistema. Também começamos nossa jornada na conta de um promotor, mas isso foi apenas para tornar as coisas um pouco mais convenientes para a redação.
Também é importante entender que não tínhamos nenhum outro AV instalado nos sistemas. Se você se lembra, o BitDefender viu nosso binário UACME como malicioso. Portanto, tenha cuidado ao usá-lo em um pentest real.
Se você gostou deste artigo e quer ver o que mais estou fazendo, siga-me aqui ou no Twitter @assume_breach