S4U
Last updated
Was this helpful?
Last updated
Was this helpful?
S4U는 Service For User으로 2종류의 Kerberos 확장 서비스가 있습니다.
S4U2self ( Service for User to self )
S4U2Proxy ( Service for User to Proxy )
S4U2Proxy는 사용자의 유효한 ST를 이용하여 다른 ST를 얻는 매커니즘입니다.
사용자의 유효한 ST를 가진 상태라는 점에서 Kerberos 인증을 사용하는 사용자의
상황에서만 사용이 가능하며, 이를 제약된 위임(Constrained Delegation)이라고 합니다.
위 그림에서 Service1에서 유효한 ST를 가지고 TGS_REQ를 전송할 때
TGS는 TGS_REQ로부터 서비스 티켓에 forwardable 플래그가 설정되어 있는지를 확인합니다.
이 플래그가 존재한다면(True), 발급된 토큰이 전달 가능한 토큰임을 나타내며
이는 권한을 위임했음을 의미합니다.
반면 TGS가 확인한 TGS_REQ에서 forwardable 플래그 값이 없다면(False),
발급된 토큰은 전달 가능한 토큰이 아니므로 S4U2Proxy를 사용하지 못합니다.
S4U2Proxy에서 사용자의 유효한 ST를 보유하고 있다면,
사용자를 대신하여 다른 서비스에 접근 가능한 ST를 발급 하는 것이 가능하다고 했습니다.
하지만 이것은 Kerberos 인증을 사용해서 ST 발급이 가능한 사용자 계정에서만
정상적으로 동작하기 때문에 제약된 위임입니다.
반면, NTLM 인증과 같은 Kerberos 외의 인증 방식을 사용하는 경우
사용하는 사용자 계정에서는 ST 발급이 안 되기 때문에 나온 확장이 S4U2self입니다.
S4U2self는 서비스가 자신을 위한 ST를 요청할 수 있도록 합니다.
여기서 "서비스"는 자신을 대신하여 티켓을 요청/제공 가능한 위임된 서비스입니다.
하지만 자신을 대행하여 수행하는 객체가 반드시 주체와 다를 필요는 없습니다.
따라서 NTLM 인증을 사용하는 사용자 역시 자신을 대행하여 자신의 ST를 요청할 수 있습니다.
본질적으로 Kerberos 프로토콜의 인증 과정에서 TGS 응답으로부터 오는 서비스 세션 키는
TGT 응답에 있던 유저의 패스워드에서 파생된 키로 암호화되어 전송됩니다.
하지만 S4U2self를 이용하여 ST 발급 요청을 한다면 TGT 과정이 생략되기 때문에
서비스 세션 키는 유저로부터 받은 세션키로 할당됩니다.
S4U2self는 사용자가 Kerberos 인증이 아닌 다른 방식의 인증을 사용하는 상황에서도
ST를 발급 받을 수 있는 제약 없는 위임이기 때문에 Unconstrained Delegation이라고 부릅니다.