Algoritmos e exemplos de validação de acesso de rede para Windows Server 2003, Windows XP e Windows 2000

Este artigo explica como a validação da conta do Windows é observada para funcionar durante o acesso à rede usando o protocolo NTLM.

Aplica-se a: Windows 10 — todas as edições, Windows Server 2012 R2
Número original do KB: 103390

Resumo

Veja a seguir um algoritmo simplificado que explica como a validação da conta do Windows é observada para funcionar durante o acesso à rede usando o protocolo NTLM. Ele está usando o acesso por meio do protocolo SMB (bloco de mensagens do servidor) como exemplo, mas se aplica a todos os outros aplicativos de servidor que dão suporte à autenticação NTLM. Essa discussão não abrange o funcionamento interno desse processo. Com essas informações, você pode prever o comportamento do logon de rede do Windows em condições determinísticas.

Quando Kerberos é usado para autenticar o usuário e obter acesso aos recursos do servidor, o processo é diferente do que o NTLM faz.

Lembre-se de que o banco de dados local é o banco de dados de domínio e o único banco de dados nos controladores de domínio. Mas em outros servidores e em todos os computadores, o banco de dados local difere do controlador de domínio.

Informações gerais

Quando dois computadores baseados em Windows Server 2003, baseados em Windows XP ou Windows 2000 se comunicam por uma rede, eles usam um protocolo de alto nível chamado SMB (bloco de mensagens de servidor). Os comandos SMB estão inseridos nos protocolos de transporte, como NetBIOS Enhanced User Interface (NetBEUI) ou TCP/IP. Por exemplo, quando um computador cliente executa um NET USE comando, um quadro "Configuração de Sessão SMB e X" é enviado para fora.

No Windows, o SMB "Instalação de Sessão" inclui a conta de usuário, uma função de hash do domínio de senha e logon criptografado. Um controlador de domínio examinará todas essas informações para determinar se o cliente tem permissões para concluir o comando NET USE.

Algoritmos

Um computador cliente windows envia o seguinte comando para um servidor:

NET USE x: \\server\share

O computador cliente windows envia um SMB "Instalação de Sessão" que contém seu domínio de logon, conta de usuário e senha.

O servidor examina o nome de domínio ou o nome do computador especificado pelo SMB. Se o nome for o próprio nome do servidor, o seguinte algoritmo será executado:

    It checks its own domain database or computer database for
        a matching account.
    If it finds a matching account then
        The SMB password is compared to the domain database password or the computer database password.
        If  the password matches then
            The command completed successfully.
        If  the password does NOT match then
            The user is prompted for a password.
                The password is retested as above.
            System error 1326 has occurred. Logon failure: unknown
            user name or bad password.
        End
    If  it does NOT find the account in the domain Security Accounts Manager (SAM) database or computer SAM database then
        Guest permissions are tested.
        If  the guest account is enabled
            The command completed successfully.
        If  the guest account is disabled
            (* See Note a).
            The user is prompted for a password.
            System error 1326 has occurred. Logon failure:
                unknown user name or bad password.
        End

Se o domínio especificado no SMB for aquele em que o servidor confia, o seguinte algoritmo será executado:

    The server will do pass-through authentication. The
        network logon request will be sent to a server that has a domain controller role in the
        specified trusted domain.

Se um canal seguro não estiver configurado, o seguinte algoritmo será executado:

The trusted domain controller checks its own domain database
        for a matching account.
    If the trusted domain controller finds a matching account, then
       NOT for Windows 2000 and later versions:
    It determines whether the account is a local or global account.
       If the account is local, then
           Guest permissions on the original server are tested.
           If the guest account is enabled
               The command completed successfully.
           If the guest account is disabled
               (* See Note 1) The user is prompted for a password.
               System error 1326 has occurred. Logon failure:
               unknown user name or bad password.
        End
        If the account is global (the only option for Active Directory)
           The SMB password is compared to the domain database
               password.
           If  the password matches, then
               The command completed successfully.
               (* See Note 2)
           If  the password does NOT match, then
               The user is prompted for a password.
                   The password is retested as above.
               System error 1326 has occurred. Logon failure:
               unknown user name or bad password.
       End
    If the trusted domain controller does NOT find the account in the trusted domain controller
           database, then
       Guest permissions are tested on the original server, not the trusted domain.  (* See Note 3)
       If  the guest account is enabled
           The user will have original server guest access.
           The command completed successfully.
       If  the guest account is disabled
           (* See Note 1) The user is prompted for a password.
           System error 1326 has occurred. Logon failure:
           unknown user name or bad password.
    End

Importante

Os casos a seguir discutem cenários em que o cliente usa um domínio de usuário diferente do que o servidor tem ou sabe. Há um problema com essa incompatibilidade quando o protocolo de autenticação NTLMv2 é negociado. O NTLM na v2 usa um sal de senha e o domínio do usuário é usado neste sal pelo cliente.

Quando o servidor obtém as informações e encontra o usuário no banco de dados local, o servidor usa o nome do banco de dados LOCAL para calcular o sal e o hash. Portanto, se o "domínio de origem" conforme enviado pelo cliente estiver vazio ou for um domínio desconhecido, o sal e, portanto, o hash de senha não corresponderão. Nesses casos, a tentativa de autenticação falhará com um erro de "nome de usuário desconhecido ou senha incorreta" (STATUS_LOGON_FAILURE). O evento de auditoria da tentativa relatará "senha incorreta", STATUS_WRONG_PASSWORD de símbolo.

Um evento de exemplo:

Nome do log: Segurança
Fonte: Microsoft-Windows-Security-Auditing
ID do evento: 4625
Categoria da Tarefa: Logon
Nível: Informações
Palavras-chave: Falha de auditoria
Computador: server-computer1
Descrição:
Falha ao fazer logon em uma conta.

Assunto:

ID de segurança: SID NULL
Nome da conta: -
Domínio da Conta: -
ID do logon: 0x0

Tipo de logon: 3

Conta para qual logon falhou:

ID de segurança: SID NULL
Nome da conta: sintadmin
Domínio da conta: cliente-computador1

Informações de falha:

Motivo da falha: nome de usuário desconhecido ou senha incorreta.
Status: 0xc000006d
Sub Status: 0xc000006a
...

Informações detalhadas de autenticação:

Processo de logon: NtLmSsp
Pacote de autenticação: NTLM
Serviços Transitados: -
Nome do pacote (somente NTLM): -
Comprimento da chave: 0

Para evitar esse cenário, você precisa incluir o nome de domínio correto explicitamente no cliente. Para um mapeamento de unidade em um cenário de grupo de trabalho, esse seria o seguinte:
Net use x: \\server-computer1\data /u:server-computer1\ntadmin *

Se o domínio especificado no SMB for desconhecido pelo servidor, por exemplo, se um domínio foi especificado, mas não foi reconhecido pelo servidor como um domínio confiável ou seu controlador de domínio, o seguinte algoritmo será executado:

    It  will check its own account database for
        a matching account
    If  the server finds a matching account, then
        The SMB password is compared to the domain database password or the computer database password.
        If  the password matches, then
            The command completed successfully.
        If  the password does NOT match, then
            The user is prompted for a password.
                The password is retested as above.
            System error 1326 has occurred. Logon failure: unknown
            user name or bad password.
    End
    If  it does NOT find the account in the domain database then
        guest permissions are tested.
        If  the guest account is enabled
            The command completed successfully.
        If  the guest account is disabled
            System error 1326 has occurred. Logon failure:
            unknown user name or bad password.
    End

Se o domínio especificado no SMB for NULL, ou seja, nenhum domínio será especificado, o seguinte algoritmo será executado:

    The server will treat this as a local network logon. The server
        will test for a matching account in its own database.
    If  it finds a matching account, then
        The SMB password is compared to the SAM database password.
        If  the password matches, then
            The command completed successfully.
        If  the password does NOT match, then
            The user is prompted for a password.
                The password is retested as above.
            System error 1326 has occurred. Logon failure: unknown
            user name or bad password.
    End
    If  it does NOT find the account in the local SAM database AND
      LsaLookupRestrictIsolatedNameLevel=0 AND NeverPing=0, then (* See Note 4)
        The server will simultaneously ask each domain that it trusts whether it has account that
            matches the SMB account.
        The first trusted domain to reply is sent a request to
            perform pass-through authentication of the client
            information.
        The trusted domain will look in its own database.
        If  an account that matches the SMB account is found, then
            The trusted domain determines whether the account is a local or global
                account.
           Not for Windows 2000 and later versions:
            If  the account is local then
                Guest permissions on the original server are tested.
                If  the guest account is enabled
                    The command completed successfully.
                If  the guest account is disabled
                The user will be prompted for a password.
                Regardless of what password is entered, the user will receive
                    "Error 5: Access has been denied."
            End
            If  the account is global (the only option for Active Directory)
                The password that was specified in the SMB is compared
                    to the SAM database password.
                If  the password matches, then
                    The command completed successfully.
                If  the password does NOT match, then
                    The user is prompted for a password.
                        The password is retested as above.
                    System error 1326 has occurred. Logon failure:
                    unknown user name or bad password.
            End
    If  no trusted domains respond to the request to identify the
        account, then
        Guest permissions are tested on the original server,
            not the trusted server.
        If  the guest account is enabled
            The command completed successfully.
        If  the guest account is disabled
            System error 1326 has occurred. Logon failure:
            unknown user name or bad password.
    End

Observações

  1. Se a conta de convidado estiver desabilitada e o usuário não tiver uma conta, o servidor ainda solicitará uma senha. Embora nenhuma senha atenda aos seus requisitos, o servidor ainda solicitará uma senha como medida de segurança. Essa medida de segurança garante que um usuário não autorizado não possa dizer a diferença entre um caso em que uma conta existe e quando a conta não existe. O usuário sempre será solicitado para obter uma senha, independentemente de a conta existir.

  2. Neste ponto, as seguintes informações são retornadas do domínio confiável na resposta: SID de Domínio, ID do Usuário, Associações de Grupos Globais, Hora do Logon, Hora do Logoff, KickOffTime, Nome Completo, LastSet de Senha, Senha Pode Alterar Sinalizador, Senha Deve Alterar Sinalizador, Script de Usuário, Caminho do Perfil, Diretório Inicial e Contagem de Senhas Incorretas.

  3. Se nenhuma conta for encontrada no domínio confiável, o sistema operacional deverá usar a conta de convidado local para garantir um comportamento consistente para autenticação no servidor.

  4. Para obter mais informações sobre como restringir a pesquisa e o logotipo de nomes isolados em domínios confiáveis usando as entradas de registro LsaLookupRestrictIsolatedNameLevel e NeverPing, consulte O processo Lsass.exe pode parar de responder se você tiver muitas confianças externas em um controlador de domínio do Active Directory.

    • Contas de convidado em domínios confiáveis nunca estarão disponíveis.

    • O processo interno real é mais complexo do que os algoritmos descritos aqui.

    • Esses algoritmos não discutem a mecânica real da autenticação de passagem. Para obter mais informações, confira Autenticação de usuário do NTLM no Windows

    • Esses algoritmos não discutem o processo de criptografia de senha usado no Windows Server 2003, Windows XP e Windows 2000. Um BLOB (objeto binário grande) derivado de um hash de senha unidirecional é enviado como parte da solicitação de autenticação. O conteúdo desse BLOB dependerá do protocolo de autenticação escolhido para o logon.

    • Este artigo não discute o funcionamento interno do Módulo de Autenticação da Microsoft.

    • Esses algoritmos supõem que a conta de convidado, quando habilitada, não tem senha. Por padrão, a conta de convidado não tem uma senha no Windows Server 2003, Windows XP e Windows 2000. Se uma senha de conta de convidado for especificada, a senha do usuário enviada no SMB deverá corresponder à senha da conta de convidado.

Exemplos

Veja a seguir exemplos desses algoritmos em ação.

Exemplo 1

Você está conectado ao computador usando o mesmo nome de conta e senha que está no banco de dados da conta de domínio SCRATCH-DOMAIN. Quando você executa o NET USE \\SCRATCH comando do controlador de domínio para o domínio SCRATCH-DOMAIN, o comando é concluído com êxito. Ao executar o NET USE \\NET comando do controlador de domínio que confia no domínio SCRATCH-DOMAIN, você recebe a seguinte mensagem de erro:

O erro do sistema 1326 ocorreu. Falha de logon: nome de usuário desconhecido ou senha incorreta.

A conta \SCRATCH-DOMAIN\USER1 tem permissões em \\NET.

Observação

Este exemplo pressupõe as seguintes configurações.

Configurações

Computador que tem uma autoridade de segurança local:

-Conta de logon: USER1
-Senha: PSW1
-Domínio de logon: LOCAL1

Controlador de domínio do Active Directory:

Nome do servidor: NET</WWITEM>
-Domínio: NET-DOMAIN</WWITEM>
-Trust: NET-DOMAIN Trust SCRATCH-DOMAIN (portanto,
contas no SCRATCH-DOMAIN podem receber permissões
no NET- DOMAIN).

O domínio NET-DOMAIN:

  • O banco de dados da conta de domínio para o domínio NET-DOMAIN não contém uma conta para USER1.
  • A conta de convidado está desabilitada.

Windows Server 2003:

Nome do servidor: SCRATCH
-Domínio: SCRATCH-DOMAIN
-O Banco de Dados de Domínio contém conta: USER1
-O Banco de Dados de Domínio contém senha: PSW1

Neste exemplo, o computador está conectado ao domínio local, não ao domínio SCRATCH-DOMAIN em que reside a conta de domínio do computador.

Exemplo 2

Quando você executa o NET USE x: \\NET\share comando, as seguintes etapas ocorrem:

  1. O computador envia o seguinte no SMB "Instalação de Sessão":

    • conta = "USER1"
    • senha = "PSW1"
    • domain = "LOCAL1"
  2. O servidor \\NET recebe o SMB e examina o nome da conta.

  3. O servidor examina seu banco de dados de conta de domínio local e não encontra uma correspondência.

  4. Em seguida, o servidor examina o nome de domínio SMB.

  5. O servidor não confia em "LOCAL1", portanto, o servidor não marcar seus domínios confiáveis.

  6. Em seguida, o servidor verifica sua conta de convidado.

  7. A conta de convidado está desabilitada para que o "erro do sistema 1326 tenha ocorrido. Falha de logon: nome de usuário desconhecido ou senha incorreta."mensagem de erro é gerada.

Exemplo 3

Quando você executa o NET USE x: \\SCRATCH\share comando, as seguintes etapas ocorrem:

  1. O computador envia o seguinte no SMB "Instalação de Sessão":

    • conta = "USER1"
    • senha = "PSW1"
    • domain = "LOCAL1"
  2. O servidor \\SCRATCH recebe o SMB e examina o nome da conta.

  3. O servidor examina seu banco de dados de conta de domínio local e encontra uma correspondência.

  4. Em seguida, o servidor compara a senha SMB com a senha da conta de domínio.

  5. As senhas correspondem.

Portanto, a mensagem "Comando é concluída com êxito" é gerada. No exemplo 2 e exemplo 3, a relação de confiança não está disponível. Se o computador tivesse sido conectado ao domínio SCRATCH-DOMAIN, o NET USE x: \\NET\share comando teria sido bem-sucedido.

A solução ideal é fazer com que todos os computadores façam logon em um domínio. Para fazer logon, o usuário deve especificar o domínio, a conta e a senha. Depois de fazer isso, todos os comandos net use -type passarão as informações corretas de domínio, conta e senha. Os administradores devem tentar evitar contas duplicadas em computadores e vários domínios. Computadores baseados em Windows Server 2003, baseados em Windows XP e Windows 2000 ajudam a evitar essa configuração usando trusts entre domínios e usando membros que podem usar bancos de dados de domínio.

Solução alternativa

Há uma solução alternativa que pode ser usada nesses casos. No computador, você pode executar o seguinte comando:

NET USE X: \\NET\SHARE /USER:SCRATCH-DOMAIN\USER1 PSW1

Neste comando, o seguinte é verdadeiro:

  • \\NET = O nome do computador do controlador de domínio que está sendo acessado.
  • \SHARE = O nome do compartilhamento.
  • /USER: parâmetro de linha de comando que permite especificar o domínio, a conta e a senha que devem ser especificados no SMB "Instalação de Sessão".
  • SCRATCH-DOMAIN = Nome de domínio do domínio em que reside a conta de usuário.
  • \USER1 = conta a ser validada.
  • PSW1 = senha que corresponde à conta no domínio.

Para obter mais informações sobre esse comando, digite o seguinte no prompt de comando:

NET USE /?  

Nomes de domínio NULL

O cliente SMB da Microsoft incluído no Windows Server 2003, Windows XP e Windows 2000 envia nomes de domínio NULL no SMB "Session Setup SMB [x73]". O cliente SMB da Microsoft manipula o nome de domínio especificando o nome de domínio de logon e enviando um caractere NULL se o nome de domínio não for especificado no comando NET USE. O cliente SMB da Microsoft também exibirá o comportamento descrito no Exemplo 1.

Observação

  • O nome de domínio padrão é especificado no arquivo LANMAN.INI na linha "DOMAIN =". Isso pode ser substituído pela opção /DOMAIN: com o NET LOGON comando.
  • Normalmente, há duas representações para "NULL" no SMB: um nome de domínio de comprimento zero e um nome de domínio de um byte que consiste no caractere de ponto de interrogação (?). O servidor SMB captura o ponto de interrogação e o converte em NULL antes de passá-lo para a LSA (autoridade de segurança local).

Solução de problemas

Uma boa dica para solucionar problemas de acesso à rede é habilitar a auditoria fazendo o seguinte.

Windows 2000 e versões posteriores de controladores de domínio baseados no Windows 2000

  1. Nas Ferramentas Administrativas em um controlador de domínio, inicie Usuários e Computadores do Active Directory.
  2. Clique com o botão direito do mouse na OU dos Controladores de Domínio e clique em Propriedades.
  3. Na guia Política de Grupo, clique duas vezes em Política padrão do controlador de domínio.
  4. Na política Editor, clique em Configurações do Computador, clique em Configurações do Windows, clique em Configurações de Segurança, clique em Políticas Locais e clique em Política de Auditoria.
  5. Selecione a opção Logon e Logon da conta êxito e a opção Falha .

Configurações de domínio para servidores e membros do Windows 2000

  1. Nas Ferramentas Administrativas em um controlador de domínio, inicie Usuários e Computadores do Active Directory.
  2. Clique com o botão direito do mouse no nome do domínio e clique em Propriedades.
  3. Na guia Política de Grupo, clique duas vezes em Política de Domínio Padrão.
  4. Na política Editor, clique em Configurações do Computador, clique em Configurações do Windows, clique em Configurações de Segurança, clique em Políticas Locais e clique em Política de Auditoria.
  5. Selecione a opção Logon e Logon da conta êxito e a opção Falha .

Configurações locais para servidores e membros do Windows 2000

  1. Nas Ferramentas Administrativas, inicie a Política de Segurança Local.
  2. Abra a Política de Auditoria.
  3. Selecione a opção Logon e Logon da conta êxito e a opção Falha . Agora, sempre que um usuário de rede acessar esse servidor remotamente, uma trilha de auditoria será registrada em Visualizador de Eventos. Para ver esses eventos no Visualizador de Eventos, clique em Segurança no menu Log.

Para obter mais informações sobre relações de confiança, autenticação de passagem, permissões de usuário e logons de domínio, consulte a "Visão geral técnica dos Serviços de Segurança do Windows Server 2003".

Mais informações

Basicamente, os mesmos algoritmos de validação de acesso à rede são aplicados ao Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2.

Esse sistema operacional tem vários novos recursos no SMB.

Windows Server 2008

Windows Server 2012