AD 인증은 두 가지 주요 프로토콜을 사용합니다: Kerberos와 NTLM
NTLM
인증 절차는 다음과 같습니다:
- 클라이언트는 로컬에서 NTLM 해시를 생성하며, 그 값은 사용자의 비밀번호의 해시 값입니다.
- 클라이언트는 사용자 이름을 애플리케이션 서버에 전송합니다.
- 애플리케이션 서버는 클라이언트에 대해 보통 논스 또는 챌린지라고 불리는 임의 값을 생성합니다.
- 클라이언트는 NTLM 해시로 논스를 암호화한 후 애플리케이션 서버로 전송합니다.
- 수신 후 애플리케이션 서버는 사용자 이름과 nonce와 함께 AD 서버로 전송합니다.
- AD는 사용자의 비밀번호를 기반으로 NTLM 해시를 생성하고, nonce를 암호화한 후 클라이언트의 메시지를 비교합니다.
- 값이 같으면 인증이 통과하고, 값이 다르면 인증이 실패합니다.
케르베로스
주요 용어:
- KDC: 키 배포 센터로, 인증 서비스(AS)와 티켓 부여 서비스(TGS) 두 가지 서비스를 제공합니다. 도메인은 KDC용 krbtgt라는 도메인 계정을 생성하며, TGT는 암호화 및 복호화에 비밀번호를 사용합니다. 도메인 사용자가 처음 접속할 때, AS가 인증을 받기를 원하고, 통과 후 AS는 TGS에 도메인 사용자에게 티켓(TGT)을 제공해 달라고 요청합니다.
- SPN:Service Principal Name. 사용자 계정 외에도 AD 계정에는 서비스 계정도 있습니다. 애플리케이션에는 서비스 계정이 연결되어 있어 Exchange, SQL, IIS 등 서버 자원에 접근할 수 있습니다. SPN은 애플리케이션이 활성화한 서비스를 AD 내 서비스 계정과 연관시키는 데 사용되는 서비스입니다.
인증 절차:
1. 도메인 사용자가 로그인할 때, AS 요청(AS_REQ)이 DC에 전송되며, 이 요청에는 사용자의 비밀번호 해시와 사용자 이름으로 암호화된 타임스탬프가 포함되어 있습니다.
2. 요청을 받은 후, DC는 사용자의 사용자 이름과 비밀번호 해시를 사용해 복호화합니다. DC는 클라이언트에게 세션 키와 TGT(티켓 부여 티켓)를 포함한 AS 응답(AS_REP)을 보냅니다. 세션 키는 사용자의 비밀번호 해시로 암호화되어 있습니다. TGT는 그룹 멤버십, 도메인, 타임스탬프, 클라이언트 IP, 세션 키를 포함합니다. TGT는 또한 KDC 서비스 계정 비밀번호로 암호화되어 있으며, 클라이언트는 이를 복호화할 수 없습니다. (TGT는 기본적으로 10시간 동안 유효하며, 그 이후에 업데이트가 있을 때 사용자가 비밀번호를 다시 입력할 필요가 없습니다)
3. 사용자가 도메인 내 자원을 요청하면, 사용자 이름, 타임스탬프, TGT, SPN을 포함한 티켓 부여 서비스 요청(TGS_REQ)이 전송됩니다. 타임스탬프와 사용자 이름은 세션 키로 암호화됩니다.
4. 요청을 받은 후, KDC는 먼저 요청에 SPN이 있는지 확인한 후 TGT를 복호화하고, 세션 키와 타임스탬프를 추출한 뒤, TGT의 세션 키를 사용해 암호화된 사용자 이름과 타임스탬프를 복호화합니다. 여러 점검을 수행하세요:
(1) TGT가 복호화한 타임스탬프는 유효해야 합니다. (리플레이 공격이 발생하면 타임스탬프가 무효가 됩니다.) )
(2) TGT의 사용자 이름이 요청서의 사용자 이름과 일치하는지 여부.
(3) TGT의 IP 주소가 요청의 IP 주소와 동일한지 여부.
이 체크는 클라이언트의 Ticket Granting ServiceReply(TGS_REP)에 응답하며, 여기에는 SPN 권한 있는 접근, 클라이언트와 SPN 간 접근에 사용되는 새로운 세션 키, 그리고 새로운 서비스 티켓 서비스 티켓(새로운 세션 키, 사용자 이름, 사용자 그룹 포함)이 포함되어 있습니다. 승인된 SPN과 SPN에 접근하는 세션 키 모두 TGT에서 세션 키로 암호화되어 있습니다. 서비스 티켓은 해당 SPN 서비스 계정의 비밀번호로 암호화되어 있습니다.
1. 위 과정을 거친 후, 사용자는 애플리케이션 서비스와 관련된 세션 키와 서비스 티켓을 획득합니다. 사용자는 사용자 이름과 타임스탬프를 포함하고 세션 키로 암호화된 애플리케이션 요청(AP_REQ)을 애플리케이션 서비스에 보냅니다.
2. 애플리케이션 서비스는 서비스 계정 비밀번호 해시를 사용하여 서비스 티켓을 복호화하고 사용자, 사용자 그룹, 세션 키를 추출합니다. 복호화된 세션 키로 AP_REQ에서 사용자 이름과 타임스탬프를 복호화하세요. AP_REQ 그렇다면 요청이 수락되고, 애플리케이션 서비스는 서비스 티켓의 사용자 그룹 정보를 바탕으로 권한을 할당하며, 사용자는 요청된 서비스에 접근할 수 있습니다.
원본 주소:하이퍼링크 로그인이 보입니다.
|