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(고급 사용자 인터페이스) 또는 TCP/IP와 같은 전송 프로토콜에 포함됩니다. 예를 들어 클라이언트 컴퓨터가 명령을 수행 NET USE 하면 "SMB 세션 설정 및 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

오류 정보:

실패 이유: 알 수 없는 사용자 이름 또는 잘못된 암호입니다.
상태: 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. 이때 도메인 SID, 사용자 ID, 전역 그룹 멤버 자격, 로그온 시간, 로그오프 시간, KickOffTime, 전체 이름, 암호 LastSet, 암호 변경 가능 플래그, 암호 변경 플래그, 사용자 스크립트, 프로필 경로, 홈 디렉터리 및 잘못된 암호 수에 대한 응답의 신뢰할 수 있는 도메인에서 다음 정보가 반환됩니다.

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

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

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

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

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

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

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

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

예제

다음은 작동하는 이러한 알고리즘의 예입니다.

예 1

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

시스템 오류 1326이 발생했습니다. 로그온 실패: 알 수 없는 사용자 이름이거나 암호가 틀립니다.

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

참고

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

구성

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

-로그인 계정: USER1
-Password: PSW1
-로그인 도메인: LOCAL1

Active Directory 도메인 컨트롤러:

-서버 이름: NET</WWITEM>
-Domain: NET-DOMAIN</WWITEM>
-Trust: NET-DOMAIN Trust SCRATCH-DOMAIN(따라서,
SCRATCH-DOMAIN의 계정에 권한을 부여할 수 있습니다.
NET- DOMAIN)을 선택합니다.

NET-DOMAIN 도메인:

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

Windows Server 2003:

-서버 이름: SCRATCH
-Domain: SCRATCH-DOMAIN
-Domain Database에 계정이 포함되어 있습니다. USER1
-Domain Database에 암호가 포함되어 있습니다. 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 Server 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 클라이언트는 "세션 설정 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 2000 서버 및 멤버에 대한 도메인 설정

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

Windows 2000 서버 및 멤버에 대한 로컬 설정

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

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

추가 정보

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

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

Windows Server 2008

Windows Server 2012