Autenticação de usuário NTLM

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

Aplica-se a: Windows Server 2012 R2
Número de KB original: 102716

Resumo

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

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

Mais informações

Armazenamento de senhas no banco de dados da conta

Os registros de 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 é 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 do 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 OEM (fabricante de equipamentos original). Essa senha não é sensível a casos e pode ter até 14 caracteres. A versão OWF dessa senha também é conhecida como a versão OWF ou ESTD do LAN Manager. Essa senha é calculada usando a criptografia DES para criptografar uma constante com a senha de texto clara. A senha OWF do LAN Manager tem 16 bytes de comprimento. Os primeiros 7 bytes da senha de texto claro são usados para calcular os primeiros 8 bytes da senha OWF do LAN Manager. Os segundos 7 bytes da senha de texto claro são usados para computador os segundos 8 bytes da senha OWF do LAN Manager.

A senha do Windows é baseada no conjunto de caracteres Unicode. Essa senha é sensível a casos e pode ter até 128 caracteres. A versão OWF dessa senha também é conhecida como a senha OWF do Windows. Essa senha é calculada usando a função de hash do RSA MD4. Essa função computa um resumo de 16 bytes de uma cadeia de caracteres de comprimento variável de bytes de senha de texto claros.

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 o 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 do 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 de 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, uma configuração está disponível que permite impedir que o Windows armazene um hash do LAN Manager de sua senha. Para obter mais informações, marcar o seguinte número de artigo para exibir o artigo na Base de Dados de Conhecimento da Microsoft:

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

Observação

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

Autenticação do 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 os usuários chamando um pacote de autenticação. Por padrão, o LsaLogonUser chama o pacote de autenticação de MSV1_0 (MSV). Esse pacote está incluído com Windows NT. O pacote de autenticação MSV armazena registros de usuário no banco de dados SAM. Esse pacote dá 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. O serviço Netlogon encaminha 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.

O LsaLogonUser dá suporte a 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 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 claro é passada para LsaLogonUser e para a primeira parte do pacote de autenticação MSV. Para logons de serviço e logons em lote, o Service Control Manager 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 livre em uma senha OWF do LAN Manager e em uma senha OWF Windows NT. Em seguida, a primeira parte do pacote passa a senha de texto livre para o serviço NetLogon ou para a segunda parte do pacote. Em seguida, a segunda parte consulta o banco de dados SAM para 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 computou uma resposta de desafio de 24 bytes criptografando o desafio de 16 bytes com a senha OWF do LAN Manager de 16 bytes. Em seguida, o cliente do LAN Manager passa essa "Resposta de Desafio do LAN Manager" para o servidor. Se o cliente for um cliente Windows, um "Windows NT Resposta ao Desafio" será calculado 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 Windows NT para o servidor. Em ambos os casos, o servidor autentica o usuário passando todos os seguintes para a API LsaLogonUser:

  • O nome de domínio
  • O nome de usuário
  • O desafio original
  • A resposta de desafio do LAN Manager
  • A resposta de desafio opcional 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 OWF do banco de dados e o desafio que foi passado. A segunda parte então compara a resposta de desafio computada à 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 do banco de dados SAM ou do 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 do Windows de senha do banco de dados SAM e a versão do Windows da senha do LsaLogonUser estiverem disponíveis, ambos serão usados. Caso contrário, a versão do LAN Manager da senha é usada para comparação. Essa regra ajuda a impor a confidencialidade de caso quando os logons de rede ocorrem do Windows para o Windows. Essa regra também permite compatibilidade anterior.

Autenticação de passagem

O serviço NetLogon implementa a autenticação de passagem. Ele 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.

Selecionar o domínio é simples. O nome de domínio é passado para LsaLogonUser. O nome de domínio é processado da seguinte maneira:

  • 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 do 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 por esse domínio, a solicitação de autenticação será passada para o domínio confiável. Em 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 pelo domínio, a solicitação de autenticação será processada no computador 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 DC que é executado no serviço Netlogon. O Localizador DC usa a resolução de nomes NETBIOS ou DNS para localizar os servidores necessários, dependendo do tipo de domínio e confiança configurado.