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