Compartilhar via


Autenticação de usuário NTLM

Este artigo fornece algumas informações sobre a autenticação de usuário NTLM.

Número original do KB: 102716

Resumo

Este artigo discute os seguintes aspectos da autenticação de usuário NTLM no Windows:

  • Armazenamento de senhas no banco de dados de contas
  • Autenticação de usuário usando o pacote de autenticação MSV1_0
  • Autenticação de passagem

Mais informações

Armazenamento de senhas no banco de dados de contas

Os registros do usuário são armazenados no banco de dados do SAM (gerenciador de contas de segurança) ou no banco de dados do Active Directory. Cada conta de usuário está associada a duas senhas: a senha compatível com o LAN Manager e a senha do Windows. Cada senha é criptografada e armazenada no banco de dados SAM ou no banco de dados do Active Directory.

A senha compatível com o LAN Manager é compatível com a senha usada pelo LAN Manager. Essa senha é baseada no conjunto de caracteres do fabricante do equipamento original (OEM). Essa senha não diferencia maiúsculas de minúsculas e pode ter até 14 caracteres. A versão OWF dessa senha também é conhecida como versão OWF ou ESTD do LAN Manager. Essa senha é calculada usando a criptografia DES para criptografar uma constante com a senha de texto não criptografado. A senha OWF do LAN Manager tem 16 bytes de comprimento. Os primeiros 7 bytes da senha de texto não criptografado são usados para calcular os primeiros 8 bytes da senha OWF do LAN Manager. Os segundos 7 bytes da senha de texto não criptografado são usados para computar os segundos 8 bytes da senha OWF do LAN Manager.

A senha do Windows é baseada no conjunto de caracteres Unicode. Essa senha diferencia maiúsculas de minúsculas e pode ter até 128 caracteres. A versão OWF dessa senha também é conhecida como senha OWF do Windows. Essa senha é calculada usando a função de hash RSA MD4. Essa função calcula um resumo de 16 bytes de uma cadeia de caracteres de comprimento variável de bytes de senha de texto não criptografado.

Qualquer conta de usuário pode não ter a senha do LAN Manager ou a senha do Windows. No entanto, todas as tentativas são feitas para manter ambas as versões da senha.

Por exemplo, se a conta de usuário for portada de um banco de dados UAS do LAN Manager usando PortUas ou se a senha for alterada de um cliente do LAN Manager ou de um cliente do Windows for Workgroups, somente a versão do LAN Manager da senha existirá. Se a senha for definida ou alterada em um cliente Windows e a senha não tiver representação do LAN Manager, somente a versão Windows da senha existirá. (A senha pode não ter representação do LAN Manager porque a senha tem mais de 14 caracteres ou porque os caracteres não podem ser representados no conjunto de caracteres OEM.)

Os limites da interface do usuário no Windows não permitem que as senhas do Windows excedam 14 caracteres. As implicações dessa limitação são discutidas posteriormente neste artigo.

No Windows 2000 Service Pack 2 e em versões posteriores do Windows, está disponível uma configuração que permite impedir que o Windows armazene um hash do LAN Manager de sua senha. Para obter mais informações, verifique o número de artigo a seguir para ler o artigo na Base de Dados de Conhecimento Microsoft:

299656 Como impedir que o Windows armazene um hash do gerenciador de LAN de sua senha no Active Directory e nos bancos de dados SAM locais

Observação

A Microsoft não oferece suporte à alteração manual ou programática do banco de dados SAM.

Autenticação de usuário usando o pacote de autenticação MSV1_0

O Windows usa a API LsaLogonUser para todos os tipos de autenticações de usuário. A API LsaLogonUser autentica usuários chamando um pacote de autenticação. Por padrão, LsaLogonUser chama o pacote de autenticação MSV1_0 (MSV). Este pacote está incluído no Windows NT. O pacote de autenticação MSV armazena registros de usuário no banco de dados SAM. Esse pacote oferece suporte à autenticação de passagem de usuários em outros domínios usando o serviço Netlogon.

Internamente, o pacote de autenticação MSV é dividido em duas partes. A primeira parte do pacote de autenticação MSV é executada no computador ao qual está sendo conectado. A segunda parte é executada no computador que contém a conta de usuário. Quando ambas as partes são executadas no mesmo computador, a primeira parte do pacote de autenticação MSV chama a segunda parte sem envolver o serviço Netlogon. A primeira parte do pacote de autenticação MSV reconhece que a autenticação de passagem é necessária porque o nome de domínio passado não é seu próprio nome de domínio. Quando a autenticação de passagem é necessária, o MSV passa a solicitação para o serviço Netlogon. Em seguida, o serviço Netlogon roteia a solicitação para o serviço Netlogon no computador de destino. Por sua vez, o serviço Netlogon passa a solicitação para a outra parte do pacote de autenticação MSV nesse computador.

LsaLogonUser suporta logons interativos, logons de serviço e logons de rede. No pacote de autenticação MSV, todas as formas de logon passam o nome da conta de usuário, o nome do domínio que contém a conta de usuário e alguma função da senha do usuário. Os diferentes tipos de logon representam a senha de forma diferente quando a passam para LsaLogonUser.

Para logons interativos, logons de lote e logons de serviço, o cliente de logon está no computador que está executando a primeira parte do pacote de autenticação MSV. Nesse caso, a senha de texto não criptografado é passada para LsaLogonUser e para a primeira parte do pacote de autenticação MSV. Para logons de serviço e logons em lote, o Gerenciador de Controle de Serviços e o Agendador de Tarefas fornecem uma maneira mais segura de armazenar as credenciais da conta.

A primeira parte do pacote de autenticação MSV converte a senha de texto não criptografado em uma senha OWF do LAN Manager e em uma senha OWF do Windows NT. Em seguida, a primeira parte do pacote passa a senha de texto não criptografado para o serviço NetLogon ou para a segunda parte do pacote. A segunda parte consulta o banco de dados SAM para obter as senhas OWF e garante que elas sejam idênticas.

Para logons de rede, o cliente que se conecta ao computador recebeu anteriormente um desafio de 16 bytes, ou "nonce". Se o cliente for um cliente do LAN Manager, o cliente calculou uma resposta de desafio de 24 bytes criptografando o desafio de 16 bytes com a senha OWF do LAN Manager de 16 bytes. O cliente do LAN Manager passa essa "Resposta de desafio do LAN Manager" para o servidor. Se o cliente for um cliente Windows, uma "Resposta ao Desafio do Windows NT" será calculada usando o mesmo algoritmo. No entanto, o cliente Windows usa os dados OWF do Windows de 16 bytes em vez dos dados OWF do LAN Manager. Em seguida, o cliente Windows passa a resposta de desafio do LAN Manager e a resposta de desafio do Windows NT para o servidor. Em ambos os casos, o servidor autentica o usuário passando todos os itens a seguir para a API LsaLogonUser:

  • O nome de domínio
  • O nome de usuário
  • O desafio original
  • A resposta ao desafio do LAN Manager
  • A resposta opcional ao desafio do Windows NT

A primeira parte do pacote de autenticação MSV passa essas informações inalteradas para a segunda parte. Primeiro, a segunda parte consulta as senhas OWF do banco de dados SAM ou do banco de dados do Active Directory. Em seguida, a segunda parte calcula a resposta do desafio usando a senha do OWF do banco de dados e o desafio que foi passado. A segunda parte compara a resposta de desafio computada com a resposta de desafio passada.

Observação

O NTLMv2 também permite que o cliente envie um desafio junto com o uso de chaves de sessão que ajudam a reduzir o risco de ataques comuns.

Conforme mencionado anteriormente, qualquer versão da senha pode estar ausente no banco de dados SAM ou no banco de dados do Active Directory. Além disso, qualquer versão da senha pode estar ausente da chamada para LsaLogonUser. Se a versão Windows da senha do banco de dados SAM e a versão Windows da senha LsaLogonUser estiverem disponíveis, ambas serão usadas. Caso contrário, a versão do LAN Manager da senha será usada para comparação. Essa regra ajuda a impor a diferenciação de maiúsculas e minúsculas quando ocorrem logons de rede do Windows para o Windows. Essa regra também permite compatibilidade com versões anteriores.

Autenticação de passagem

O serviço NetLogon implementa a autenticação de passagem. Ela executa as seguintes funções:

  • Seleciona o domínio para o qual passar a solicitação de autenticação.
  • Seleciona o servidor dentro do domínio.
  • Passa a solicitação de autenticação para o servidor selecionado.

A seleção do domínio é simples. O nome de domínio é passado para LsaLogonUser. O nome de domínio é processado da seguinte forma:

  • Se o nome de domínio corresponder ao nome do banco de dados SAM, a autenticação será processada nesse computador. Em uma estação de trabalho Windows que é membro de um domínio, o nome do banco de dados SAM é considerado o nome do computador. Em um controlador de domínio do Active Directory, o nome do banco de dados da conta é o nome do domínio. Em um computador que não é membro de um domínio, todos os logons processam solicitações localmente.
  • Se o nome de domínio especificado for confiável para esse domínio, a solicitação de autenticação será passada para o domínio confiável. Nos controladores de domínio do Active Directory, a lista de domínios confiáveis está facilmente disponível. Em um membro de um domínio do Windows, a solicitação é sempre passada para o domínio primário da estação de trabalho, permitindo que o domínio primário determine se o domínio especificado é confiável.
  • Se o nome de domínio especificado não for confiável para o domínio, a solicitação de autenticação será processada no computador ao qual está conectado como se o nome de domínio especificado fosse esse nome de domínio. O NetLogon não diferencia entre um domínio inexistente, um domínio não confiável e um nome de domínio digitado incorretamente.

O NetLogon seleciona um servidor no domínio por um processo chamado descoberta. Uma estação de trabalho do Windows descobre o nome de um dos controladores de domínio do Windows Active Directory em seu domínio primário. Um controlador de domínio do Active Directory descobre o nome de um controlador de domínio do Active Directory em cada domínio confiável. O componente que faz a descoberta é o Localizador de DC que é executado no serviço Netlogon. O Localizador de DC usa NETBIOS ou resolução de nome DNS para localizar os servidores necessários, dependendo do tipo de domínio e confiança configurados.