NTLM vs Net-NTLM! Afinal, quem é quem?

Fala pessoal, no post de hoje eu vou falar sobre os protocolos de autenticação utilizados pela Microsoft, vamos começar bem lá de trás falando do hash LM, depois do NTLM, Net-NTLMv1/v2, Kerberos e não podemos esquecer da tabela SAM. Esse post é bem diferente dos posts que costumo fazer, ele é puramente teórico. Mas é essencial para entender diversos tipos de ataque, esse conhecimento de base tem se tornado cada vez mais raro hoje em dia, pois a galera só que saber de reproduzir receita de bolo. Fuja disso, seja diferente 😉

Como falei, esse post serve de base, eu diria ainda que é leitura obrigatória para entender determinados tipos de ataques como LLMNR / NBT-NS Poisoning, SMB Relay, MultiRelay, entre outros. Caso você ainda não tenha visto os outros posts, recomendo fortemente a leitura depois de acabar de ler esse artigo.

LLMNR / NBT-NS Poisoning Attack – Responder Parte 1

Brincando com WPAD, LDAP, FTP e SQL – Responder Parte 2

MultiRelay, Pivot e muito mais – Responder Parte 3

Entendendo o Ataque SMB Relay – NTLMv2

Entendendo o Ataque Pass the Hash

Como as senhas são armazenadas? Em alguns casos elas são armazenadas em texto claro ou criptografadas de forma reversível, ou ainda são são armazenadas em formato de hash. Uma função hash é um algoritimo que tem como objetivo receber um dado N de qualquer tamanho como entrada e gerar um valor X sempre de tamanho fixo. Alguns exemplos de algoritimos são o LM, NTLM (NT Lan Manager), MD4, MD5, SHA1, SHA2 e SHA3.

SAM

O banco de dados SAM é o banco de dados Security Accounts Manager. Ele é usado pelo Windows para gerenciar contas de usuário e as senhas no formato hash LM ou NTLM, ele pode ser encontrado em %SystemRoot%/system32/config/SAM. As senhas nunca são armazenadas em formato de texto simples. O banco de dados SAM é implementado como um arquivo de registro e o kernel do Windows mantêm um filesystem exclusivo para bloquear o arquivo SAM. Como este arquivo é fornecido com um bloqueio de sistema de arquivos, ele fornece alguma medida de segurança para o armazenamento das senhas (Não muito eficiente cá entre nós).

Hash LM

O processo de criação do hash LM é relativamente complexo. Quando um usuário cria uma nova senha, os caracteres dessa senha são convertidos para maiúsculo, depois são acrescentados caractéres nulos até chegar ao número de 14 caracteres caso a senha seja menor que esse valor, em seguida a senha é dividida em duas partes de 7-bytes cada. Essas duas partes serão usadas como chaves do DES (Data Encryption Standart) para criptografar um valor fixo. O valor das duas operações DES são concatenados e o resultado é armazenado como hash LM.

Esse processo mostra que o hash LM tem duas fraquezas substanciais. A primeira o tamanho da senha que é limitada a 14 caracteres e a segunda é que a senha é case-insensitive, o que diminui a quantidade de combinações possíveis.

Hash NTLM

O algoritimo de hash NTLM (Hash NT) é bem mais simples, ele gera o hash da senha do usuário utilizando a função MD4 e depois armazena esse hash. Isso não quebra a senha em diferentes partes, permite que a senha seja case-sensitive e suporta senhas longas, de até 127 caracteres.

O LM e NTLM são usados para autenticações em grupos de trabalhos (workgroups). Eles também são usados em um ambiente de domínio caso o cliente ou o servidor não seja um membro do domínio, ou ainda, se um recurso dentro do domínio for acessado por IP ao invés de nome NetBIOS ou DNS. A partir do Windows 2003 somente a resposta NTLM é enviada por padrão. Para comunicações dentro do domínio é utilizado o Net-NTLMv1/v2.

Net-NTLMv1/v2

O Net-NTLMv1/v2 ou simplesmente chamado de NTLMv1/v2 é uma evolução do LM e NTLM e corrige suas fraquezas. Ele usa o hash NT, no entando ele também inclui um desafio/resposta ao cliente. O Net-NTLMv2 também inclui timestamp e é o método padrão de autenticação a partir do Windows Vista. 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:

admin:aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42

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, 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.

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:

ntlm-flow

Kerberos

O Kerberos é um protocolo de autenticação de rede que permite comunicações individuais seguras e identificadas. Ele foi projetado para fornecer autenticação forte para aplicações cliente/servidor usando criptografia de chave secreta. O protocolo Kerberos previne Eavesdropping e Replay attack, e ainda garante a integridade dos dados. Seus projetistas inicialmente o modelaram na arquitetura cliente-servidor, e é possível a autenticação mutua entre o cliente e o servidor, permitindo assim que ambos se autentiquem.

O Kerberos faz uso do Key Distribution Center (KDC), uma terceira parte confiável. O Kerberos utiliza basicamente o protocolo Needham-Schroeder. O sistema de confiança tripla é chamado de Centro de Distribuição de Chaves (CDC), que é composta por duas partes separadas: um Servidor de Autenticação (SA) e Servidor de Concessão de Ticket (SCT). O Kerberos trabalha baseado em Tickets, que identificam os usuários.

O Kerberos é um conjunto de serviços usado em um ambiente de domínio quando o nome NetBIOS ou DNS é usado para conexão. Se um usuário se conectar a algum recurso da rede via IP o Kerberos não será utilizado. Ao contrário da autenticação NTLM, o Kerberos fornece autenticação para ambas as partes, usuário e servidor.

Bem pessoal é isso ai, espero que tenham curtido. Esse post foi bem diferente dos que eu costumo fazer, mas achei importante passar essa base teórica que falta muito por ai. Não esqueçam de curtir nossas páginas nas redes sociais, FacebookG+ e seguir o Guia do Ti no Twitter. Compartilhem e comentem esse artigo, isso é muito importante para divulgação do nosso trabalho.

Referências
https://en.wikipedia.org/wiki/Kerberos_(protocol)
https://en.wikipedia.org/wiki/Security_Account_Manager
https://en.wikipedia.org/wiki/LAN_Manager
https://en.wikipedia.org/wiki/NT_LAN_Manager
Ricardo Galossi
Siga me

Ricardo Galossi

É um apaixonado por segurança da informação, atua profissionalmente há mais de 7 anos na área de tecnologia da informação, onde é focado em análise de vulnerabilidades e testes de invasão.Criou o blog Guia do TI para compartilhar conhecimento, ajudar os mais novos, incentivar debates e manter a comunidade atualizada com as principais notícias da área de TI.
Ricardo Galossi
Siga me

Últimos posts por Ricardo Galossi (exibir todos)

Ricardo Galossi

É um apaixonado por segurança da informação, atua profissionalmente há mais de 7 anos na área de tecnologia da informação, onde é focado em análise de vulnerabilidades e testes de invasão. Criou o blog Guia do TI para compartilhar conhecimento, ajudar os mais novos, incentivar debates e manter a comunidade atualizada com as principais notícias da área de TI.

Deixe seu comentário