본문 바로가기
IT Network System/Windows Srv

[Active Directory] AD 인증 (Kerberos v5)

by Skills 2021. 5. 20.

AD DS의 보안은 ID, PW 보호의 기초이기 때문에 모든 환경의 핵심이다. 이 편에서는 AD 인증이 Kerberos에서 작동하는 방식을 이해하고 넘어가자! (길지만 집중해서 읽어보면 쉽게 이해됩니다!!!)

 

각 인프라에는 다양한 유형의 인증 프로토콜이 사용되는데, AD는 서버와 클라이언트 간에 인증을 제공하기 위해 Kerberos V5를 사용한다. Kerberos V5는 Windows Server 2003에서부터 Windows Server의 기본 인증 프로토콜이 되었다. 

 

Kerberos 프로토콜은 다른 시스템도 연결된 개방형 네트워크에서 서버와 클라이언트 간의 인증을 보호하기 위해 구축되었다. 인증의 기본 개념은 두 당사자가 암호(비밀)에 동의하고 이를 사용하여 인증을 식별하고 확인하는 것이다.

 

 

이미지 출처 : https://www.rebeladmin.com/2018/06/active-directory-authentication-works/

위의 예에서 Dave와 Server A는 정기적으로 통신하며 기밀 데이터를 자주 교환한다. 이 통신을 보호하기 위해 그들은 데이터를 교환하기 전에 신원을 확인하는 데 사용할 공통 비밀 1234에 동의했다. Dave가 초기 통신을 할 때 그는 자신의 비밀을 서버 A에 전달하고 "I'm Dave"라고 말한다. 서버 A는 비밀을 확인하여 사실인지 확인한다. 올바른 경우 그를 Dave로 식별하고 추가 통신을 허용한다.

이미지 출처 : https://www.rebeladmin.com/2018/06/active-directory-authentication-works/

Dave와 Server A는 개방형 네트워크에서 통신하므로 다른 연결된 시스템이 존재한다. Sam은 Dave가 있는 동일한 네트워크에 연결된 사용자다. 그는 Dave와 Server A 사이의 통신에 대해 알고 있기에 그들이 사용하는 비밀을 찾기 위해 이 두 호스트 간의 트래픽을 도청하기 시작한다. Sam이 비밀을 발견하면 서버 A와 통신하기 시작하고 그가 비밀 1234를 제공하며 자신의 Dave라고 말한다. 서버 A 측에서는 Dave와 Sam의 메시지가 모두 올바른 비밀을 제공하기 때문에 지금은 차이를 느낄 수 없다.

 

Kerberos는 비밀 대신 공유 대칭 암호화 키를 사용하여 이 문제를 해결했다. 암호화 및 복호화에 동일한 키를 사용한다. Kerberos 이름은 그리스 신화에서 머리가 세 개인 개에서 유래했기에 세 가지 주요 구성 요소가 있다.

1) 클라이언트

2) 서버

3) 비밀 키를 발급하는 신뢰할 수 있는 기관

이 신뢰할 수 있는 기관을 KDC(Key Distribution Center)라고 한다. Kerberos를 자세히 살펴보기 전에 일반적인 키 교환이 어떻게 작동하는지 이해하자.

 

이미지 출처 : https://www.rebeladmin.com/2018/06/active-directory-authentication-works/

아까의 시나리오와는 다르게 이번에는 KDC가 생겼다. Dave는 서버 A와 직접 통신하지 않고 KDC로 이동하여 서버 A에 액세스 해야 한다고 말한다. (이제 서버 A와의 통신을 시작하려면 대칭 키가 필요하다. 이 키는 Dave와 서버 A에서만 사용해야 한다) KDC는 액세스 요청을 수락하고 키 (Key D + S)를 생성한 다음 Dave와 Server A에 배포한다. 매우 간단해 보이지만 서버 A에서는 Dave의 연결을 수락하려면 Key D + S를 알아야 한다. 따라서 이 키를 서버 A에 저장해야 한다. 여기서는 하나의 연결만 고려하지만 100개의 연결이 있는 경우 관련된 모든 키를 저장해야 한다. 그러면 서버 A는 많은 리소스를 소모하게 된다. 그러나 실제 Kerberos 프로토콜 작업은 이보다 더 효율적이다.

AD 환경에서 KDC는 도메인 컨트롤러의 일부로 설치된다. KDC는 두 가지 주요 기능을 담당한다.

1) 인증 서비스 (AS)

2) TGS (티켓 부여 서비스)

 

예를 들어 Dave가 시스템에 로그인할 때 KDC가 자신이 주장하는 사람과 똑같은 사람임을 증명해야 한다. Dave가 로그인하면 "장기 키"와 함께 사용자 이름을 KDC로 보낸다. 장기 키는 Dave의 비밀번호를 기반으로 생성된다. Dave의 PC에 있는 Kerberos 클라이언트는 자신의 암호를 수락하고 암호화 키를 생성한다. KDC는 또한 데이터베이스에 이 키의 복사본을 유지한다. KDC는 요청을 수신하면 레코드로 사용자 이름과 장기 키를 확인한다. 모두 확인되면 KDC는 세션 키로 Dave에게 응답한다. 이를 TGT(Ticket Granting Ticket)라고 한다. TGT에는 두 가지가 있다.

 

1) KDC가 Dave와 통신하는 데 사용하는 세션 키의 사본. 이것은 KDC의 장기 키로 암호화된다.

2) Dave가 KDC와 통신하는 데 사용할 수 있는 세션 키 사본. 이것은 Dave의 장기 키로 암호화되므로 Dave만 해독할 수 있다.

 

Dave가 이 키를 받으면 장기 키를 사용하여 세션 키를 해독할 수 있다. 이후 KDC와의 모든 향후 통신은 이 세션 키를 기반으로 한다. 이 세션 키는 일시적이며 TTL(Time to Live)값을 갖는다. 이 세션 키는 Dave의 컴퓨터 휘발성 메모리(RAM)에 저장된다.

 

이제 서버 A에 대한 액세스를 요청할 때이다. Dave는 KDC에 다시 연결해야 하지만 이번에는 KDC에서 제공하는 세션 키를 사용한다. 이 요청에는 TGT, 세션 키 및 서비스 ID(서버 A에서 실행되는 서비스)로 암호화된 타임스탬프가 포함되어 있다. KDC가 이를 수신하면 장기 키를 사용하여 TGT를 해독하고 세션 키를 검색한다. 그런 다음 세션 키를 사용하여 타임스탬프를 해독한다. 변경이 5분 미만이면 Dave가 보낸 것이며 이전 시간과 동일한 요청이 아님을 증명한다. KDC가 정당한 요청으로 확인되면 다른 티켓을 생성하고 이를 서비스 티켓이라고 한다.

 

두 개의 키가 있다. 하나는 Dave 용이고 다른 하나는 서버 A용이다. 두 키에는 요청자 이름(Dave), 수신자, 타입 스탬프, TTL 값, 새 세션 키(Dave와 서버 A 간에 공유됨)가 포함되어 있다. 이 중 하나의 키는 Dave의 장기 키를 사용하여 암호화된다. 다른 키는 서버 A의 장기 키를 사용하여 암호화된다. 결국 둘 다 KDC와 Dave 사이의 세션 키를 사용하여 암호화된다. 마지막으로 티켓을 준비하고 Dave에게 보낸다. Dave는 세션 키를 사용하여 티켓을 해독한다. 그는 또한 "그의"키를 입력하고 장기 키를 사용하여 암호를 해독한다. 그와 서버 A 간에 공유해야 하는 새 세션 키를 표시한다. 그런 다음 서비스 티켓에서 검색된 서버 A의 키, KDC에서 만든 새 세션 키를 사용하여 키를 해독하고 세션키를 검색한다. 세션키를 사용하여 타임스탬프를 해독하여 요청의 신뢰성을 확인할 수 있다. 이 프로세스에서 클라이언트의 키 사용을 추적하는 것은 서버 A의 책임이 아니며 관련 키를 유지하는 것은 클라이언트의 책임이 아니다.

 

* 배운 내용 요약

이미지 출처 : https://www.rebeladmin.com/2018/06/active-directory-authentication-works/

1) Dave는 사용자 이름과 그의 장기 키를 KDC(도메인 컨트롤러)로 보낸다.

 

2) KDC, 데이터베이스를 통해 사용자 이름 및 상기 키를 확인하고 신원을 확인한다. 그런 다음 TGT를 생성한다. 여기에는 KDC가 Dave와 통신하는 데 사용하는 세션 키 사본이 포함된다. 이것은 KDC의 장기 키로 암호화된다. 또한 Dave가 KDC와 통신하는 데 사용할 수 있는 세션 키 사본도 포함된다.

 

3) TGT와 함께 Dave에 대한 응답.

 

4) Dave는 장기 키를 사용하여 키를 해독하고 세션 키를 검색한다. 그의 시스템은 TGT, 세션 키 및 서비스 ID로 암호화된 타임스탬프를 호함한 새로운 요청을 생성한다. 요청이 생성되면 KDC로 보낸다.

 

5) KDC는 장기 키를 사용하여 TGT를 해독하고 세션 키를 검색한다. 그러면 세션 키를 사용하여 타임 스탬프를 해독할 수 있다. 그런 다음 서비스 티켓을 만든다. 이 티켓에는 두 개의 열쇠가 포함되어 있다. 하나는 서버 A 용이고 다른 하나는 Dave 용이다. Dave의 키는 장기 키를 사용하여 암호화되고 서버 A의 키는 서버 A의 장기 키를 사용하여 암호화된다. 마지막에는 KDC와 Dave가 사용하는 세션 키를 사용하여 암호화된다. 

 

6) 서비스 티켓을 Dave에게 보낸다.

 

7) Dave는 세션 키를 사용하여 티켓을 해독하고 키를 검색한다. 그런 다음 계속해서 암호를 해독하여 서버 A와의 연결을 설정하는 데 사용할 수 있는 새 키를 얻는다. 마지막에는 서버 A의 키(5단계에서 생성 한), Dave가 해독 한 세션 키로 암호화된 타임스탬프를 포함한 다른 요청을 생성한다. 이 단계의 앞부분이다. 모든 준비가 완료되면 시스템이 이를 서버 A로 보낸다.

 

8) 서버 A는 장기 키를 사용하여 키를 해독하고 세션 키를 검색한다. 그런 다음 이를 사용하여 서버 A는 타임 스탬프를 해독하여 요청의 신뢰성을 확인할 수 있다. 모든 것이 녹색이면 Dave와 Server A 간의 연결을 허용한다. 위의 프로세스를 완료하기 위해 수행해야 할 다른 사항이 거의 없다.

 

  • 연결 - 서버, 클라이언트 및 KDC는 요청과 응답을 처리하기 위해 둘 사이에 안정적인 연결이 필요하다.
  • DNS - 클라이언트는 DNS를 사용하여 KDC 및 서버를 찾는다. 올바른 레코드와 함께 작동하는 DNS가 필요하다.
  • 시간 동기화 - 프로세스는 타임 스탬프를 사용하여 요청의 진위를 확인한다. 최대 5분의 시차만 허용한다.(5분이 지나면 인증 안됨) PDC 또는 다른 시간 소스와 정확한 시간 동기화가 있어야 한다.
  • SPN(Service Principle Names) - 클라이언트는 SPN을 사용하여 AD 환경에서 서비스를 찾는다. 서비스에 대한 SPN이 없으면 클라이언트와 KDC가 필요할 때 찾을 수 없다. 서비스를 설정할 때 SPN도 설정해야 한다.
728x90

'IT Network System > Windows Srv' 카테고리의 다른 글

[Active Directory] WORKGROUP vs Domain  (0) 2021.05.28
[Active Directory] SSO  (0) 2021.05.28
[Active Directory] AD FS 용어  (0) 2021.03.12
[Active Directory] AD 용어  (0) 2021.03.11
[Active Directory] AD FS  (0) 2021.03.02

댓글