SPN (Service Principal Name)

agnusdei·2025년 12월 8일

Information Security

목록 보기
55/96

🔑 SPN (Service Principal Name)

SPN (Service Principal Name)Kerberos 인증 프로토콜을 사용하는 환경, 특히 Windows Active Directory (AD) 도메인 내에서 특정 서비스 인스턴스를 고유하게 식별하는 데 사용되는 이름입니다.

SPN은 클라이언트가 서비스를 이용하려고 할 때, 해당 서비스가 어떤 보안 주체(Security Principal, 즉 계정) 하에서 실행되고 있는지 Kerberos KDC (Key Distribution Center)에 알리는 역할을 수행합니다. 이는 마치 '서비스의 신분증'과 같으며, SSO (Single Sign-On)상호 인증(Mutual Authentication)을 구현하는 데 있어 가장 핵심적인 보안 메커니즘입니다.


1. 배경 및 개념 정의

1.1. 배경: 서비스 인증의 필요성

  • 사용자 인증과 서비스 인증의 분리: AD 환경에서 클라이언트(사용자)가 서버에 접속할 때, Kerberos는 클라이언트의 신원(ID)뿐만 아니라 클라이언트가 접속하려는 서비스의 신원(ID)도 확인해야 합니다.
  • SPN의 역할: SPN은 서버의 서비스가 유효하고 신뢰할 수 있는 계정에서 실행되고 있음을 보장하여, 클라이언트가 잘못된 서버(예: 중간자 공격자)에 연결되는 것을 방지합니다.

1.2. 개념 정의

구분설명
풀네임Service Principal Name
정의Kerberos 기반 네트워크에서 특정 서비스 인스턴스를 고유하게 식별하는 식별자입니다.
저장 위치서비스가 실행되는 사용자 계정 또는 컴퓨터 계정의 속성(servicePrincipalName Attribute)으로 AD에 저장됩니다.
핵심 목적클라이언트의 요청에 대해 KDC가 해당 서비스에 대한 Kerberos 티켓(Service Ticket)을 발급할 수 있도록 하는 기준 제공.

2. SPN의 포맷 및 구성 요소

SPN은 표준화된 포맷을 가지며, 일반적으로 두 가지 유형이 존재합니다.

2.1. SPN 일반 포맷

SPN은 다음과 같은 세 부분으로 구성됩니다.

ServiceClass/HostName:Port/ServiceName\text{ServiceClass} / \text{HostName} : \text{Port} / \text{ServiceName}
구성 요소설명예시
ServiceClass서비스의 유형 (예: 웹 서비스는 HTTP, LDAP 서비스는 LDAP, SQL 서비스는 MSSQLSvc)HTTP
HostName서비스를 제공하는 서버의 FQDN 또는 NetBIOS 이름webserver01.corp.local
Port (선택적)서비스가 실행되는 포트 번호 (표준 포트가 아닐 경우 명시)8080 (표준 포트인 80/443은 생략 가능)

2.2. SPN 두 가지 유형

  1. 호스트 기반 SPN (Host-based SPN): FQDN을 사용하여 서버를 식별합니다. (대부분의 서비스에 사용됨)
    • 예시: HTTP/webserver01.corp.local
  2. 사용자/서비스 기반 SPN (User/Service-based SPN): 특정 명명된 인스턴스에 사용됩니다.
    • 예시: MSSQLSvc/dbserver:1433

3. 작동 원리: Kerberos 인증에서의 역할

SPN은 Kerberos 5단계 인증 프로세스 중 티켓 요청(Ticket Request) 단계에서 결정적인 역할을 합니다.

3.1. SPN 기반 티켓 요청 흐름

  1. 클라이언트 서비스 요청: 클라이언트가 특정 서비스(예: webserver01의 HTTP 서비스)에 접근하려고 시도합니다.
  2. SPN 생성: 클라이언트는 접속하려는 서버와 서비스 정보를 바탕으로 접근 대상 SPN을 생성합니다. (예: HTTP/webserver01.corp.local)
  3. TGS 요청: 클라이언트는 이미 발급받은 TGT (Ticket-Granting Ticket)를 첨부하여 TGS (Ticket-Granting Service)서비스 티켓(Service Ticket)을 요청합니다. 이때 요청 메시지 안에 생성된 SPN이 포함됩니다.
  4. SPN 검색 및 티켓 발급 (KDC의 역할):
    • KDC는 AD 데이터베이스 내의 모든 컴퓨터/사용자 계정 속성에서 클라이언트가 요청한 SPN이 등록된 계정(servicePrincipalName Attribute)을 검색합니다.
    • 검색 성공 시: KDC는 해당 SPN이 등록된 계정의 비밀 키를 사용하여 서비스 티켓을 암호화하고 클라이언트에게 발급합니다.
    • 검색 실패 시: 인증 실패. (클라이언트가 요청한 서비스를 제공하는 서버를 찾을 수 없거나, 서버의 신원이 확인되지 않음)
  5. 서비스 사용: 클라이언트는 이 서비스 티켓을 서비스 서버에 제시하여 상호 인증을 완료하고 서비스에 접근합니다.

4. 기술사적 판단: SPN의 중요성 및 관리

4.1. 관리의 중요성: SPN 충돌과 미등록 문제

  • SPN 충돌 (Conflict): 두 개 이상의 계정동일한 SPN이 등록되는 경우를 말합니다. KDC는 충돌 SPN 중 어떤 계정을 사용해야 할지 결정할 수 없어 인증 실패(Kerberos Error)가 발생합니다. AD 환경에서 가장 흔한 Kerberos 인증 문제의 원인입니다.
  • SPN 미등록 (Missing SPN): 필요한 SPN이 서비스 계정에 등록되어 있지 않은 경우, KDC가 해당 서비스에 대한 티켓을 발급할 수 없어 서비스 접근 자체가 불가능해집니다.

4.2. 기술적 해결 및 보안 전략

  • 권한 최소화 (Principle of Least Privilege): SPN을 등록/수정하는 명령어(setspn)는 도메인 관리자에게만 권한이 있지만, 특정 서비스 계정에는 자체 SPN을 관리할 수 있는 위임 권한을 최소한으로 부여해야 합니다.
  • 서비스 계정 분리: 웹 서버, 데이터베이스 서버 등 중요 서비스는 개별적인 사용자 계정(Service Account)을 생성하여 실행하고, 해당 계정에 필요한 SPN만 등록하여 보안 경계를 명확히 해야 합니다. LocalSystem 또는 NetworkService 계정을 사용하면 자동 등록되지만, 보안 관리 측면에서는 권장되지 않습니다.
  • Delegation (위임)과의 연관성: SPN은 Kerberos 위임(Delegation)을 설정하는 데 필수적입니다. 특히, 제한된 위임 (Constrained Delegation)은 서비스 티켓을 발급받을 수 있는 목표 SPN을 명시적으로 지정하여 보안을 강화합니다.

5. 요약 및 미래 방향성

SPN은 AD 기반 SSO의 근간이며, Kerberos 인증의 견고함을 책임지는 보안 식별자입니다. SPN의 정확한 등록 및 충돌 관리는 대규모 IT 인프라에서 서비스의 가용성(Availability)보안(Security)을 유지하는 핵심 관리 영역입니다.

클라우드 환경에서는 Azure Active Directory (Azure AD)OAuth 2.0 및 OpenID Connect를 주로 사용하지만, 온프레미스 AD와 연동되는 하이브리드 환경에서는 레거시 애플리케이션에 대한 Kerberos 인증이 여전히 중요하므로, SPN 관리 기술은 IT 전문가에게 필수적입니다.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글