달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2009. 9. 21. 12:43

Kerberos와 NTLM 인증에 대한 정리 Active Directory2009. 9. 21. 12:43

I. Kerberos vs. NTLM
NTLM 인증: Challenge-Response mechanism
1. 클라이언트가 서버로 사용자 이름을 보낸다.
2. 서버는 이에 대한 요청 값을 생성해 클라이언트로 보낸다.
3. 클라이언트는 이 요청 값을 사용자 암호로 암호화해 서버로 응답을 보낸다.
4. 로컬 계정인 경우 서버는 SAM(Security Account Manager)을 검색해 사용자의 응답을 검증한다.
5. 도메인 계정인 경우 서버는 이 응답을 도메인 컨트롤러로 전달해 검증하고 사용자 계정에 대한 그룹 정책을 받는다.
6. Access Token을 발급하고 세션을 맺는다.

Kerberos 인증: Trust-Third-Party Scheme
- Kerberos 인증 방법은 표준 프로토콜로 네트워크에서 클라이언트와 서버를 상호 인증하는 방식이다.
- 세 가지 주 요소는 KDC(Key Distribution Center), 클라이언트, 접근할 서비스를 가지는 서버
- KDC는 도메인 컨트롤러의 일부로서 설치되며 다음 두 가지 기능을 수행한다.
-- AS(Authentication Service), TGS(Ticket-Granting Service)

1. 사용자가 네트워크에 로그온하면 AS에 TGT(Ticket Grant Ticket)을 요청한다.
2. 클라이언트는 네트워크 자원에 접근할 때 TGT와 인증자(Authenticator), 대상 서버의 SPN(Service Principal Name)을 제시한다.
3. 클라이언트는 네트워크 서비스와의 통신에 사용될 세션 티켓을 받기위해 서비스 계정 도메인의 TGS에 접속한다.
4. 대상 서버가 인증자를 검증하고 나면 클라이언트 사용자에 대한 Access Token을 생성한다.


II. Kerberos와 NTLM 인증의 요구 사항
Kerberos
1. 클라이언트와 서버는 반드시 도메인 구성원이어야 한다. 만약 클라이언트와 서버가 서로 다른 도메인에 속하는 경우 두 도메인은 양방향 신뢰가 구성되어 있어야 한다.
2. SPN 등록. SPN은 서버에서 실행 중인 서비스에 대한 고유한 식별자다. Kerberos 인증을 필요로 하는 서비스는 SPN을 가지고 있어야 클라이언트가 네트워크에서 서비스를 식별할 수 있게 된다.

SPN(Service Principal Name)
SQL Server에 대한 SPN은 다음과 같은 요소로 구성된다.
- ServiceClass: 서비스를 식별하는 요소. SQL Server에 대한 Service Class는 MSSQLSvc이다.
- Host: SQL Server가 실행 중인 컴퓨터의 FQDN
- Port: 실행 중인 서비스가 수신 대기 중인 포트
예) MSSQLSvc/sqlserver.domain.com:1433

NTLM
NTLM은 요청-응답의 과정을 위해 사용자 암호를 요구한다. 이후 서버는 클라이언트로부터 암호를 요구하지 않고 클라이언트를 식별할 수 있게 된다. 만약 클라이언트가 시스템 계정으로 실행 중이라면 인증 정보를 보낼 수가 없기 때문에 인증은 실패하게 된다.

NTLM Fallback
NTLM(NT LAN Manager)는 Windows NT와 Windows 2000 Workgroup 환경에서 사용되던 인증 프로토콜이다.
Windows Server 2003, Windows XP, Windows 2000은 어느 인증 프로토콜을 사용할지 협상하는 알고리즘을 사용한다. Kerberos 프로토콜이 기본 값이며 Kerberos 인증이 실패할 경우 NTLM 인증을 시도한다.


III. SQL Server 2005에 접속 시 Kerberos와 NTLM
1. 만약 SPN이 존재하면 TCP/IP를 통한 원격 접속 시 Kerberos가 사용된다.
2. SPN이 존재하고 XP 컴퓨터의 로컬 TCP 연결을 하는 경우 Kerberos가 사용된다.
3. Windows Server 2003의 로컬 연결의 경우 NTLM이 사용된다.
4. 명명된 파이프 연결의 경우 NTLM이 사용된다.
5. SPN을 찾을 수 없고 TCP를 통해 연결하는 경우 NTLM이 사용된다.

SETSPN.EXE
1. SQL Server가 LocalSystem 또는 NetworkService 계정으로 실행 중인 경우 SPN 확인
SETSPN -L <SQL Server가 설치된 서버 이름>
2. SQL Server가 도메인 사용자 계정으로 실행 중인 경우 SPN 확인
SETSPN -L <도메인>\<사용자 계정>
3. 만약 도메인 계정이 관리자 계정이 아닌 상황에서 Kerberos 인증을 반드시 사용해야 하는 경우 SPN 등록
SETSPN -A <도메인>\<사용자 계정>
4. SQL Server는 다음 항목이 만족되는 경우 서비스 시작 시 자동으로 SPN을 등록한다. 아래 항목이 충족되지 않는 경우 Kerberos인증을 위해서는 SPN을 수동으로 등록해야만 한다.
- SQL Server가 LocalSystem 또는 Network Service 또는 도메인 관리자 계정으로 실행 중이다.
- TCP/IP 프로토콜이 활성화되어 있다.

일반적으로 클라이언트가 SQL Server로 TCP 연결을 맺는 경우 클라이언트의 SQL 드라이버는 SQL Server가 실행 중인 서버의 FQDN을 풀게된다. 그 다음 SQL Server의 SPN을 검색하고 협상 과정을 거쳐 KDC의 SPN 검증 여부에 따라 NTLM 또는 Kerberos를 사용해 인증을 시도한다. 만약 Kerberos 인증이 실패할 경우 NTLM 인증을 시도한다. 명명된 파이프로 접속하는 경우에는 SQL 드라이버는 빈 SPN을 생성해 NTLM 인증으로 인증을 시도한다.

:
Posted by 커널64