### O protocolo O **NTLM (NT LAN Manager)** é um protocolo de autenticação proprietário da Microsoft, utilizado amplamente em redes Windows antes da adoção predominante do Kerberos. Embora o formato de armazenamento da senha (a **NT hash**) tenha permanecido praticamente inalterado desde sua criação, o protocolo passou por revisões para corrigir vulnerabilidades e reforçar a segurança no processo de autenticação _challenge/response_. ##### **1. LM (LAN Manager)** Descrição: Utilizava a **LM hash**, extremamente fraca: - Senhas convertidas para maiúsculas. - Limitadas a 14 caracteres, divididas em dois blocos de 7. - Cada bloco era hash separado com DES. Falhas: - Facilidade de quebra por **força bruta** ou **tabelas rainbow**. - Ataques offline triviais: com hardware atual, LM hashes podem ser quebradas em segundos. --- ##### 2. NTLMv1 Descrição: Substituiu o LM, utilizando a NT hash (MD4 da senha Unicode) no processo de autenticação. - O servidor envia um nonce (desafio). - O cliente responde com o desafio criptografado usando DES e a NT hash. Falhas: - Vulnerável a captura e quebra offline (ataques como Responder e Hashcat conseguem extrair a senha). - Suscetível a downgrade attack: um invasor pode forçar o uso de NTLMv1, mesmo quando NTLMv2 está disponível. - Exposto a relay attacks, onde as credenciais podem ser encaminhadas para outro serviço sem conhecimento do usuário. --- ##### 3. NTLM2 Session Descrição: Introduzido como um ajuste de segurança no NTLMv1. - Melhora o cálculo da chave de sessão, usando MD5 para derivar valores. Falhas: - Ainda herda limitações estruturais do NTLMv1. - Protege contra algumas formas de replay attack, mas não resolve o problema de relay. --- ##### 4. NTLMv2 Descrição: Versão mais segura do protocolo NTLM. - Usa HMAC-MD5 sobre a NT hash e inclui: - Desafio do servidor. - Desafio do cliente. - Timestamp e outros dados. - Reduz riscos de ataques por replay e brute force. Falhas: - Ainda vulnerável a NTLM relay quando SMB signing não está habilitado. - Dependente da proteção da hash NT armazenada localmente; ataques como Pass-the-Hash continuam viáveis. OBS: Versão padrão em sistemas Windows modernos. --- ### Armazenamento de Hashes O Windows nunca armazena senhas de usuários em texto claro. Em vez disso, ele guarda **hashes derivadas da senha** em bancos protegidos pelo sistema. Esses hashes podem ser de tipos diferentes (LM, NT, NTLMv2), mas o local e a lógica de armazenamento seguem princípios semelhantes. ##### LM Hash - Formato mais antigo, fraco e obsoleto. - Limitava a senha a 14 caracteres e fazia conversão para maiúsculas. Hoje está desativada por padrão, mas pode aparecer em ambientes antigos ou com compatibilidade habilitada. --- ##### NT Hash (ou NTLM hash) - Hash padrão desde o Windows NT. - Calculada com MD4 sobre a senha Unicode (UTF-16LE). - Sem salt, o que a torna suscetível a ataques offline. --- ##### Kerberos Keys (em domínios) - Quando Kerberos é usado, a senha é derivada em chaves (keys) para autenticação no AD. - Essas keys também podem ser extraídas do NTDS.dit por quem tem acesso administrativo. --- #### Local das Hashs O local depende do tipo de máquina e ambiente: **Computadores locais ou servidores standalone** - Banco SAM (Security Accounts Manager): - Arquivo: C:\Windows\System32\config\SAM - Contém hashes LM e NT dos usuários locais. - Protegido pelo LSA, acessível somente com privilégios SYSTEM. Carregado na memória durante o boot (o que permite extração com ferramentas de memória). **Controladores de Domínio** - Banco NTDS.dit (Active Directory Database) - Local padrão: C:\Windows\NTDS\NTDS.dit - Contém todas as contas do domínio e suas hashes. - Protegido pelo serviço AD DS, mas acessível por administradores de domínio ou com ataque offline. - Replicações e backups do AD também carregam hashes. #### Estrutura das Hashs As Hashs do Windows são compostas de duas partes: ```markdown # Examplo de Hash Windows: Administrator:500:aad3b435b51404eeaad3b435b51404ee:846fe026924f01a98cd31311e045b15b::: # Modelo de Hash username:RID:LM_hash:NTLM_hash::: ``` OBS: Quando a hash NT possui aa..ee é porque ela está em branco, ou seja, desativada.