Windows Server 2003, Windows XP 및 Windows 2000에 대한 네트워크 액세스 유효성 검사 알고리즘 및 예제

이 문서에서는 NTLM Windows 네트워크 액세스 중에 계정 유효성 검사가 작동되는 것으로 관찰되는 방법을 설명합니다.

다음에 적용됩니다.   Windows 10 - 모든 버전, Windows Server 2012 R2
원래 KB 번호:   103390

요약

다음은 NTLM 프로토콜을 사용하여 네트워크 액세스 중에 Windows 계정 유효성 검사를 관찰하는 방법을 설명하는 간소화된 알고리즘입니다. 이 예제에서는 SMB(서버 메시지 블록) 프로토콜을 통한 액세스를 사용하지만 NTLM 인증을 지원하는 다른 모든 서버 응용 프로그램에 적용됩니다. 이 논의에서는 이 프로세스의 내부 작동에 대해 다루지 않습니다. 이 정보를 사용하여 확인 조건에서 네트워크 Windows 동작을 예측할 수 있습니다.

Kerberos를 사용하여 사용자를 인증하고 서버 리소스에 액세스하는 경우 프로세스는 NTLM의 작동과 다릅니다.

로컬 데이터베이스는 도메인 데이터베이스와 도메인 컨트롤러에 있는 유일한 데이터베이스입니다. 그러나 다른 서버 및 모든 컴퓨터에서 로컬 데이터베이스는 도메인 컨트롤러와 다릅니다.

배경 정보

두 Windows Server 2003 기반Windows XP 기반 또는 Windows 2000 기반 컴퓨터가 네트워크를 통해 통신하는 경우 SMB(서버 메시지 블록)라는 높은 수준의 프로토콜을 사용합니다. SMB 명령은 NetBIOS NetBEUI(Enhanced User Interface) 또는 TCP/IP와 같은 전송 프로토콜에 포함되어 있습니다. 예를 들어 클라이언트 컴퓨터가 명령을 수행하면 "SMB 세션 설치 및 NET USE X" 프레임이 전송됩니다.

이 Windows "세션 설정" SMB에는 암호화된 암호 및 로그온 도메인의 해시 기능인 사용자 계정이 포함됩니다. 도메인 컨트롤러는 이 모든 정보를 검사하여 클라이언트에 NET USE 명령을 완료할 수 있는 권한이 있는지 여부를 확인할 수 있습니다.

알고리즘

클라이언트 Windows 다음 명령을 서버에 전송합니다.

NET USE x: \\server\share

Windows 클라이언트 컴퓨터는 로그인 도메인, 사용자 계정 및 암호가 포함된 "세션 설정" SMB를 전송합니다.

서버는 SMB에서 지정한 도메인 이름 또는 컴퓨터 이름을 검사합니다. 이름이 서버의 자체 이름인 경우 다음 알고리즘이 실행됩니다.

    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

SMB에 지정된 도메인이 서버가 신뢰하는 도메인인 경우 다음 알고리즘이 실행됩니다.

    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.

보안 채널이 설정되지 않은 경우 다음 알고리즘이 실행됩니다.

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

중요

다음 사례에서는 클라이언트가 서버가 가지거나 알고 있는 다른 사용자 도메인을 사용하는 시나리오에 대해 설명합니다. NTLMv2 인증 프로토콜이 협상된 경우 이러한 불일치 문제가 있습니다. v2의 NTLM은 암호 솔트를 사용하며, 사용자 도메인은 클라이언트가 이 솔트에 사용됩니다.

서버가 정보를 얻은 후 로컬 데이터베이스에서 사용자를 찾으면 서버는 LOCAL 데이터베이스의 이름을 사용하여 솔트와 해시를 계산합니다. 따라서 클라이언트에서 보낸 "원본 도메인"이 비어 있거나 알 수 없는 도메인인 경우 솔트가 있으므로 암호 해시가 일치하지 않습니다. 이러한 경우 인증 시도가 "알 수 없는 사용자 이름 또는 잘못된 암호"(알 수 없는 사용자 이름 또는 잘못된 암호) STATUS_LOGON_FAILURE 실패합니다. 시도에 대한 감사 이벤트는 "잘못된 암호"," 기호를 STATUS_WRONG_PASSWORD.

샘플 이벤트:

로그 이름: 보안
원본: Microsoft-Windows-Security-Auditing
이벤트 ID: 4625
작업 범주: 로그온
수준: 정보
키워드: 감사 실패
컴퓨터: server-computer1
설명:
계정이 로그온하지 못했습니다.

제목:

보안 ID: NULL SID
계정 이름: -
계정 도메인: -
로그온 ID: 0x0

로그온 유형: 3

로그온에 실패한 계정:

보안 ID: NULL SID
계정 이름: ntadmin
계정 도메인: client-computer1

오류 정보:

실패 이유: 알 수 없는 사용자 이름 또는 잘못된 암호입니다.
Status: 0xc000006d
하위 상태: 0xc000006a
...

자세한 인증 정보:

로그온 프로세스: NtLmSsp
인증 패키지: NTLM
전송된 서비스: -
패키지 이름(NTLM만 해당): -
키 길이: 0

이 시나리오를 방지하려면 클라이언트에 올바른 도메인 이름을 명시적으로 포함해야 합니다. 작업 작업 시나리오에서 드라이브 매핑의 경우 다음과 같습니다.
Net use x: \\server-computer1\data /u:server-computer1\ntadmin *

SMB에 지정된 도메인을 알 수 없는 경우(예: 도메인이 지정되어 있지만 서버에서 신뢰할 수 있는 도메인 또는 해당 도메인 컨트롤러로 인식되지 않은 경우) 다음 알고리즘이 실행됩니다.

    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

SMB에 지정된 도메인이 NULL인 경우, 즉 도메인이 지정되지 않은 경우 다음 알고리즘이 실행됩니다.

    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

참고

  1. 게스트 계정이 사용하지 않도록 설정되어 있으며 사용자에게 계정이 없는 경우 서버에서 암호를 요청합니다. 암호가 요구 사항을 충족하지는 못하기는 하지만 서버는 여전히 보안 조치로 암호를 요청합니다. 이 보안 조치는 권한이 없는 사용자가 계정이 있는 경우와 계정이 없는 경우 간의 차이를 알 수 없습니다. 계정이 있는지 여부에 관계없이 항상 암호를 입력하라는 메시지가 표시됩니다.

  2. 이때 응답으로 신뢰할 수 있는 도메인에서 다음 정보가 반환됩니다. Domain SID, User ID, Global Groups Memberships, Logon Time, Logoff Time, KickOffTime, Full Name, Password LastSet, Password Can Change Flag, Password Must Change Flag, User Script, Profile Path, Home Directory, And Bad Password Count.

  3. 신뢰할 수 있는 도메인에 계정이 없는 경우 운영 체제에서 로컬 게스트 계정을 사용하여 서버에 대한 인증의 일관된 동작을 보장해야 합니다.

  4. LsaLookupRestrictIsolatedNameLevel 및 NeverPing 레지스트리 항목을 사용하여 신뢰할 수 있는 도메인에서 격리된 이름의 검색 및 로그온을 제한하는 방법에 대한 자세한 내용은 Active Directory도메인 컨트롤러에 외부 트러스트가 많은 경우 Lsass.exe 프로세스가 응답하지 않을 수 있습니다.를 참조하세요.

    • 신뢰할 수 있는 도메인의 게스트 계정을 사용할 수 없습니다.

    • 실제 내부 프로세스는 여기에 설명된 알고리즘보다 더 복잡합니다.

    • 이러한 알고리즘에서는 통과 인증의 실제 메커니즘에 대해 설명하지 않습니다. 자세한 내용은 NTLM 사용자 인증을 Windows

    • 이러한 알고리즘에서는 Windows Server 2003, Windows XP 및 Windows 암호화 프로세스에 대해 설명하지 않습니다. 단방형 암호 해시에서 파생된 BLOB(Binary Large Object)가 인증 요청의 일부로 전송됩니다. 이 BLOB의 콘텐츠는 로그온에 대해 선택한 인증 프로토콜에 따라 결정됩니다.

    • 이 문서에서는 Microsoft 인증 모듈의 내부 작동에 대해 설명하지 않습니다.

    • 이러한 알고리즘에서는 사용하도록 설정된 게스트 계정에 암호가 없다고 가정합니다. 기본적으로 게스트 계정에는 Windows Server 2003, WINDOWS XP 및 Windows 없습니다. 게스트 계정 암호를 지정한 경우 SMB에서 전송되는 사용자 암호가 해당 게스트 계정 암호와 일치해야 합니다.

다음은 이러한 알고리즘의 예입니다.

예 1

SCRATCH-DOMAIN 도메인 계정 데이터베이스에 있는 동일한 계정 이름과 암호를 사용하여 컴퓨터에 로그온한 경우 SCRATCH-DOMAIN 도메인의 도메인 컨트롤러에 대한 명령을 실행하면 NET USE \\SCRATCH 명령이 성공적으로 완료됩니다. SCRATCH-DOMAIN 도메인을 신뢰하는 도메인 컨트롤러에 대한 명령을 실행하면 다음 오류 NET USE \\NET 메시지가 표시됩니다.

시스템 오류 1326이 발생했습니다. 로그온 실패: 알 수 없는 사용자 이름 또는 잘못된 암호.

\SCRATCH-DOMAIN \ USER1 계정에는 NET에 대한 권한이 \ \ 있습니다.

참고

이 예제에서는 다음 구성을 가정합니다.

구성

로컬 보안 기관이 있는 컴퓨터:

-Login 계정: USER1
-Password: PSW1
-Login Domain: LOCAL1

Active Directory 도메인 컨트롤러:

-Server Name: NET</WWITEM>
-Domain: NET-DOMAIN</WWITEM>
-Trust: NET-DOMAIN Trust SCRATCH-DOMAIN(따라서
SCRATCH-DOMAIN의 계정에 사용 권한을 부여할 수 있습니다.
)를 지정합니다.

NET-DOMAIN 도메인:

  • NET-DOMAIN 도메인의 도메인 계정 데이터베이스에 USER1 계정이 없습니다.
  • 게스트 계정을 사용할 수 없습니다.

Windows Server 2003:

-Server Name: SCRATCH
-Domain: SCRATCH-DOMAIN
-Domain Database contains account: USER1
-Domain Database contains password: PSW1

이 예에서는 컴퓨터의 도메인 계정이 있는 SCRATCH-DOMAIN 도메인이 아니라 로컬 도메인에 컴퓨터가 로그온됩니다.

예 2

명령을 NET USE x: \\NET\share 실행하면 다음 단계가 수행됩니다.

  1. 컴퓨터가 "세션 설정" SMB에서 다음을 전송합니다.

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. \ \ NET 서버는 SMB를 수신하고 계정 이름을 살펴 봐야 합니다.

  3. 서버가 로컬 도메인 계정 데이터베이스를 검사하고 일치하는 데이터베이스를 찾지 않습니다.

  4. 그런 다음 서버가 SMB 도메인 이름을 검사합니다.

  5. 서버는 "LOCAL1"을 신뢰하지 않습니다. 따라서 서버가 신뢰할 수 있는 도메인을 확인하지 않습니다.

  6. 그런 다음 서버가 해당 게스트 계정을 검사합니다.

  7. 게스트 계정이 사용되지 않도록 설정되어 "시스템 오류 1326이 발생했습니다. 로그온 실패: 알 수 없는 사용자 이름 또는 잘못된 암호입니다." 오류 메시지가 생성됩니다.

예 3

명령을 NET USE x: \\SCRATCH\share 실행하면 다음 단계가 수행됩니다.

  1. 컴퓨터가 "세션 설정" SMB에서 다음을 전송합니다.

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. \ \ SCRATCH 서버는 SMB를 수신하고 계정 이름을 검사합니다.

  3. 서버는 로컬 도메인 계정 데이터베이스를 검사하고 일치를 검색합니다.

  4. 그런 다음 서버가 SMB 암호를 도메인 계정 암호와 비교합니다.

  5. 암호가 일치합니다.

따라서 "명령 완료 완료" 메시지가 생성됩니다. 예제 2 및 예제 3에서는 트러스트 관계를 사용할 수 없습니다. 컴퓨터가 SCRATCH-DOMAIN 도메인에 로그온된 경우 NET USE x: \\NET\share 명령이 성공한 것입니다.

이상적인 해결 방법은 모든 컴퓨터가 도메인에 로그온하는 것입니다. 로그온하려면 사용자가 도메인, 계정 및 암호를 지정해야 합니다. 이렇게 하면 모든 NET USE -type 명령이 올바른 도메인, 계정 및 암호 정보를 전달합니다. 관리자는 컴퓨터와 도메인이 모두 중복되지 않도록 해야 합니다. Windows 서버 2003 기반, Windows XP 기반 및 Windows 2000 기반 컴퓨터는 도메인 간 트러스트 사용 및 도메인 데이터베이스를 사용할 수 있는 구성원을 사용하여 이러한 구성을 방지하는 데 도움이 됩니다.

해결 방법

이러한 경우에 사용할 수 있는 한 가지 해결 해결이 있습니다. 컴퓨터에서 다음 명령을 실행할 수 있습니다.

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

이 명령에서 다음 명령은 true입니다.

  • \\NET = 액세스되는 도메인 컨트롤러의 컴퓨터 이름입니다.
  • \SHARE = 공유 이름입니다.
  • /USER: "세션 설정" SMB에 지정해야 하는 도메인, 계정 및 암호를 지정할 수 있는 명령줄 매개 변수입니다.
  • SCRATCH-DOMAIN = 사용자 계정이 있는 도메인의 도메인 이름입니다.
  • \USER1 = 유효성을 검사할 계정입니다.
  • PSW1 = 도메인의 계정과 일치하는 암호입니다.

이 명령에 대한 자세한 내용은 명령 프롬프트에 다음을 입력합니다.

NET USE /?  

NULL 도메인 이름

Windows Server 2003, Windows XP 및 Windows 2000에 포함된 Microsoft SMB 클라이언트는 "Session Setup SMB [x73]" SMB에 NULL 도메인 이름을 전송합니다. Microsoft SMB 클라이언트는 로그온 도메인 이름을 지정하고 NET USE 명령에 도메인 이름이 지정되지 않은 경우 NULL 문자를 보내 도메인 이름을 처리합니다. Microsoft SMB 클라이언트는 예제 1에 설명된 동작도 나타났습니다.

참고

  • 기본 도메인 이름은 "DOMAIN =" 줄의 LANMAN.INI 파일에서 지정합니다. 이 명령은 스위치에 의해 다시 /DOMAIN: 정해진 것일 수 NET LOGON 있습니다.
  • SMB에는 일반적으로 "NULL"에 대한 두 가지 표현, 즉 길이가 0인 도메인 이름과 물음표 문자(?)로 구성된 1비트 도메인 이름이 있습니다. SMB 서버는 물음표를 catch하여 NULL로 변환한 후 LSA(로컬 보안 기관)로 전달합니다.

문제 해결

네트워크 액세스 문제를 해결하는 좋은 팁은 다음을 수행하여 감사를 사용하도록 설정하는 것입니다.

Windows 2000 이상 버전의 Windows 2000 기반 도메인 컨트롤러

  1. 도메인 컨트롤러의 관리 도구에서 Active Directory 사용자 및 컴퓨터를 시작하십시오.
  2. 도메인 컨트롤러 OU를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
  3. 그룹 정책 탭에서 기본 도메인 컨트롤러 정책 을 두 번 클릭합니다.
  4. 정책 편집기에서 컴퓨터 설정 를 클릭하고 Windows 설정 , 보안 설정, 로컬 정책을 클릭한 다음 정책 감사 클릭합니다.
  5. 로그온 및 계정 로그온 성공 옵션과 실패 옵션을 선택합니다.

Windows 서버 및 구성원에 대한 도메인 설정

  1. 도메인 컨트롤러의 관리 도구에서 Active Directory 사용자 및 컴퓨터를 시작하십시오.
  2. 도메인 이름을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
  3. 그룹 정책 탭에서 기본 도메인 정책 을 두 번 클릭합니다.
  4. 정책 편집기에서 컴퓨터 설정 를 클릭하고 Windows 설정, 보안 설정, 로컬 정책을 클릭한 다음 정책 감사 클릭합니다.
  5. 로그온 및 계정 로그온 성공 옵션과 실패 옵션을 선택합니다.

2000개 Windows 구성원에 대한 로컬 설정

  1. 관리 도구에서 로컬 보안 정책을 시작하십시오.
  2. 감사 정책을 열기.
  3. 로그온 및 계정 로그온 성공 옵션과 실패 옵션을 선택합니다. 이제 네트워크 사용자가 원격으로 이 서버에 액세스하면 감사 내선이 이벤트 뷰어에 기록됩니다. 이벤트 뷰어에서 이러한 이벤트를 보려면 로그 메뉴에서 보안을 클릭합니다.

트러스트 관계, 통과 인증, 사용자 권한 및 도메인 로그인에 대한 자세한 내용은 "Windows Server 2003 Security Services 기술 개요"를 참조하십시오.

추가 정보

기본적으로 동일한 네트워크 액세스 유효성 검사 알고리즘이 Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 R2에 Windows Server 2012 적용됩니다.

이러한 OS에는 SMB의 몇 가지 새로운 기능이 있습니다.

Windows Server 2008

Windows Server 2012