NTLM 사용자 인증

이 문서에서는 NTLM 사용자 인증에 대한 몇 가지 정보를 제공합니다.

적용 대상: Windows Server 2012 R2
원본 KB 번호: 102716

요약

이 문서에서는 Windows에서 NTLM 사용자 인증의 다음과 같은 측면에 대해 설명합니다.

  • 계정 데이터베이스의 암호 스토리지
  • MSV1_0 인증 패키지를 사용하여 사용자 인증
  • 통과 인증

추가 정보

계정 데이터베이스의 암호 스토리지

사용자 레코드가 SAM(보안 계정 관리자) 데이터베이스 또는 Active Directory 데이터베이스에 저장됩니다. 각 사용자 계정은 두 개의 암호, 즉 LAN Manager 호환 암호 및 Windows 암호에 연결되어 있습니다. 이들 각 암호는 암호화되어 SAM 데이터베이스 또는 Active Directory 데이터베이스에 저장됩니다.

LAN 관리자 호환 암호는 LAN 관리자에서 사용하는 암호와 호환됩니다. 이 암호는 OEM(원래 장비 제조업체) 문자 집합을 기반으로 합니다. 이 암호는 대/소문자를 구분하지 않으며 최대 14자까지 사용할 수 있습니다. 이 암호의 OWF 버전을 LAN 관리자 OWF 또는 ESTD 버전이라고도 합니다. 이 암호는 DES 암호화를 사용하여 명확한 텍스트 암호로 상수를 암호화하여 계산됩니다. LAN 관리자 OWF 암호는 16바이트 길이입니다. 지우기 텍스트 암호의 처음 7바이트 는 LAN 관리자 OWF 암호의 처음 8바이트 수를 계산하는 데 사용됩니다. 지우기 텍스트 암호의 두 번째 7바이트 는 LAN 관리자 OWF 암호의 두 번째 8바이트 컴퓨터를 사용하는 데 사용됩니다.

Windows 암호는 유니코드 문자 집합을 기반으로 합니다. 이 암호는 대/소문자를 구분하며 최대 128자까지 사용할 수 있습니다. 이 암호의 OWF 버전을 Windows OWF 암호라고도 합니다. 이 암호는 RSA MD4 해시 함수를 사용하여 계산됩니다. 이 함수는 명확한 텍스트 암호 바이트의 가변 길이 문자열의 16바이트 다이제스트를 계산합니다.

모든 사용자 계정에 LAN 관리자 암호 또는 Windows 암호가 부족할 수 있습니다. 그러나 모든 시도는 두 버전의 암호를 유지 관리합니다.

예를 들어 사용자 계정이 PortUas를 사용하여 LAN 관리자 UAS 데이터베이스에서 이식되거나 LAN 관리자 클라이언트 또는 Windows for Workgroups 클라이언트에서 암호가 변경된 경우 LAN 관리자 버전의 암호만 존재합니다. Windows 클라이언트에서 암호를 설정하거나 변경하고 암호에 LAN 관리자 표현이 없는 경우 Windows 버전의 암호만 존재합니다. 암호가 14자보다 길거나 OEM 문자 집합에 문자를 나타낼 수 없기 때문에 암호에 LAN 관리자 표현이 없을 수 있습니다.

Windows의 사용자 인터페이스 제한으로 Windows 암호가 14자를 초과할 수 없습니다. 이 제한의 의미는 이 문서의 뒷부분에서 설명합니다.

Windows 2000 서비스 팩 2 이상 버전의 Windows에서는 Windows에서 암호의 LAN 관리자 해시를 저장하지 못하도록 하는 설정을 사용할 수 있습니다. 자세한 내용은 다음 문서 번호를 검사 Microsoft 기술 자료에서 문서를 확인합니다.

299656 Windows에서 Active Directory 및 로컬 SAM 데이터베이스에 암호의 LAN 관리자 해시를 저장하지 못하도록 방지하는 방법

참고

Microsoft는 SAM 데이터베이스를 수동으로 또는 프로그래밍 방식으로 변경할 수 없습니다.

MSV1_0 인증 패키지를 사용하여 사용자 인증

Windows는 모든 종류의 사용자 인증에 LsaLogonUser API를 사용합니다. LsaLogonUser API는 인증 패키지를 호출하여 사용자를 인증합니다. 기본적으로 LsaLogonUser는 MSV(MSV1_0) 인증 패키지를 호출합니다. 이 패키지는 Windows NT 포함되어 있습니다. MSV 인증 패키지는 SAM 데이터베이스에 사용자 레코드를 저장합니다. 이 패키지는 Netlogon 서비스를 사용하여 다른 도메인에 있는 사용자의 통과 인증을 지원합니다.

내부적으로 MSV 인증 패키지는 두 부분으로 나뉩니다. MSV 인증 패키지의 첫 번째 부분은 연결된 컴퓨터에서 실행됩니다. 두 번째 부분은 사용자 계정이 포함된 컴퓨터에서 실행됩니다. 두 부분이 동일한 컴퓨터에서 실행되면 MSV 인증 패키지의 첫 번째 부분은 Netlogon 서비스를 사용하지 않고 두 번째 파트를 호출합니다. MSV 인증 패키지의 첫 번째 부분에서는 전달된 도메인 이름이 자체 도메인 이름이 아니므로 통과 인증이 필요하다는 것을 인식합니다. 통과 인증이 필요한 경우 MSV는 Netlogon 서비스에 요청을 전달합니다. 그런 다음 Netlogon 서비스는 요청을 대상 컴퓨터의 Netlogon 서비스로 라우팅합니다. 차례로 Netlogon 서비스는 해당 컴퓨터의 MSV 인증 패키지의 다른 부분에 요청을 전달합니다.

LsaLogonUser는 대화형 로그온, 서비스 로그온 및 네트워크 로그온을 지원합니다. MSV 인증 패키지에서 모든 형태의 로그온은 사용자 계정의 이름, 사용자 계정이 포함된 도메인 이름 및 사용자 암호의 일부 기능을 전달합니다. 다른 종류의 로그온은 암호를 LsaLogonUser에 전달할 때 다르게 나타냅니다.

대화형 로그온, 일괄 로그온 및 서비스 로그온의 경우 로그온 클라이언트는 MSV 인증 패키지의 첫 번째 부분을 실행하는 컴퓨터에 있습니다. 이 경우 텍스트 지우기 암호가 LsaLogonUser 및 MSV 인증 패키지의 첫 번째 부분으로 전달됩니다. 서비스 로그온 및 일괄 로그온의 경우 서비스 제어 관리자와 작업 스케줄러는 계정의 자격 증명을 저장하는 보다 안전한 방법을 제공합니다.

MSV 인증 패키지의 첫 번째 부분에서는 텍스트 지우기 암호를 LAN 관리자 OWF 암호와 Windows NT OWF 암호로 변환합니다. 그런 다음 패키지의 첫 번째 부분에서는 지우기 텍스트 암호를 NetLogon 서비스 또는 패키지의 두 번째 부분으로 전달합니다. 그런 다음 두 번째 부분에서는 SAM 데이터베이스에 OWF 암호를 쿼리하고 동일한지 확인합니다.

네트워크 로그온의 경우 컴퓨터에 연결하는 클라이언트에 이전에 16바이트 챌린지 또는 "nonce"가 주어졌습니다. 클라이언트가 LAN 관리자 클라이언트인 경우 클라이언트는 16 바이트 LAN 관리자 OWF 암호로 16 바이트 챌린지를 암호화하여 24 바이트 챌린지 응답을 계산했습니다. 그런 다음 LAN 관리자 클라이언트는 이 "LAN 관리자 챌린지 응답"을 서버에 전달합니다. 클라이언트가 Windows 클라이언트인 경우 동일한 알고리즘을 사용하여 "Windows NT 챌린지 응답"을 계산합니다. 그러나 Windows 클라이언트는 LAN 관리자 OWF 데이터 대신 16 바이트 Windows OWF 데이터를 사용합니다. 그런 다음 Windows 클라이언트는 LAN 관리자 챌린지 응답과 Windows NT 챌린지 응답을 모두 서버에 전달합니다. 두 경우 모두 서버는 LsaLogonUser API에 다음을 모두 전달하여 사용자를 인증합니다.

  • 도메인 이름
  • 사용자 이름
  • 원래의 도전
  • LAN 관리자 챌린지 응답
  • 선택적 Windows NT 챌린지 응답

MSV 인증 패키지의 첫 번째 부분은 이 정보를 변경되지 않은 상태로 두 번째 부분으로 전달합니다. 첫째, 두 번째 부분은 SAM 데이터베이스 또는 Active Directory 데이터베이스에서 OWF 암호를 쿼리합니다. 그런 다음 두 번째 부분에서는 데이터베이스의 OWF 암호와 전달된 챌린지를 사용하여 챌린지 응답을 계산합니다. 그런 다음 두 번째 부분에서는 계산된 챌린지 응답을 전달된 챌린지 응답과 비교합니다.

참고

또한 NTLMv2를 사용하면 클라이언트가 일반적인 공격의 위험을 줄이는 데 도움이 되는 세션 키를 사용하여 챌린지를 보낼 수 있습니다.

앞에서 설명한 것처럼 SAM 데이터베이스 또는 Active Directory 데이터베이스에서 암호 버전이 누락되었을 수 있습니다. 또한 LsaLogonUser 호출에서 두 버전의 암호가 누락될 수 있습니다. SAM 데이터베이스의 Windows 버전의 암호와 LsaLogonUser의 Windows 버전의 암호를 모두 사용할 수 있는 경우 둘 다 사용됩니다. 그렇지 않으면 암호의 LAN 관리자 버전이 비교에 사용됩니다. 이 규칙은 Windows에서 Windows로 네트워크 로그온이 발생할 때 대/소문자 구분을 적용하는 데 도움이 됩니다. 이 규칙은 이전 버전과의 호환성도 허용합니다.

통과 인증

NetLogon 서비스는 통과 인증을 구현합니다. 다음 함수를 수행합니다.

  • 인증 요청을 전달할 도메인을 선택합니다.
  • 도메인 내의 서버를 선택합니다.
  • 인증 요청을 통해 선택한 서버에 전달합니다.

도메인을 선택하는 것은 간단합니다. 도메인 이름은 LsaLogonUser에 전달됩니다. 도메인 이름은 다음과 같이 처리됩니다.

  • 도메인 이름이 SAM 데이터베이스의 이름과 일치하는 경우 해당 컴퓨터에서 인증이 처리됩니다. 도메인의 구성원인 Windows 워크스테이션에서 SAM 데이터베이스의 이름은 컴퓨터의 이름으로 간주됩니다. Active Directory 도메인 컨트롤러에서 계정 데이터베이스의 이름은 도메인의 이름입니다. 도메인의 멤버가 아닌 컴퓨터에서 모든 로그온은 로컬로 요청을 처리합니다.
  • 지정된 도메인 이름을 이 도메인에서 신뢰할 수 있는 경우 인증 요청이 신뢰할 수 있는 도메인으로 전달됩니다. Active Directory 도메인 컨트롤러에서 신뢰할 수 있는 도메인 목록을 쉽게 사용할 수 있습니다. Windows 도메인의 멤버에서 요청은 항상 워크스테이션의 기본 도메인으로 전달되므로 주 도메인이 지정된 도메인을 신뢰할 수 있는지 여부를 확인할 수 있습니다.
  • 지정한 도메인 이름을 도메인에서 신뢰할 수 없는 경우 지정된 도메인 이름이 해당 도메인 이름인 것처럼 연결된 컴퓨터에서 인증 요청이 처리됩니다. NetLogon은 존재하지 않는 도메인, 신뢰할 수 없는 도메인 및 잘못 입력된 도메인 이름을 구분하지 않습니다.

NetLogon은 검색이라는 프로세스로 도메인의 서버를 선택합니다. Windows 워크스테이션은 기본 도메인에서 Windows Active Directory 도메인 컨트롤러 중 하나의 이름을 검색합니다. Active Directory 도메인 컨트롤러는 신뢰할 수 있는 각 도메인에서 Active Directory 도메인 컨트롤러의 이름을 검색합니다. 검색을 수행하는 구성 요소는 Netlogon 서비스에서 실행되는 DC 로케이터입니다. DC 로케이터는 구성된 도메인 및 신뢰 유형에 따라 NETBIOS 또는 DNS 이름 확인을 사용하여 필요한 서버를 찾습니다.