0Pricing
Cyber Security Academy · 강의

SAML과 페더레이션

엔터프라이즈 싱글 사인온을 익힙니다.

SAML과 페더레이션은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

SAML이란

SAML(보안 어설션 마크업 언어)은 인증 및 권한 부여 데이터를 교환하기 위한 XML 기반 표준으로, 기업용 SSO에서 널리 사용됩니다.

  • 기업의 ID 제공자가 여러 애플리케이션에 사용자를 보증할 수 있도록 합니다.
  • SAML 2.0은 OIDC보다 먼저 등장했으며 B2B와 인력 신원 관리 분야에 여전히 깊이 자리 잡고 있습니다.

기업 연합 인증을 방어하려면 SAML을 이해해야 합니다. 신뢰의 결함 하나로 연결된 모든 앱이 노출될 수 있기 때문입니다.

IdP와 SP의 역할

SAML 연합에는 두 주요 당사자가 있습니다.

  • ID 제공자 (IdP)는 사용자를 인증하고 어설션을 발급합니다(Okta, Entra ID, Ping).
  • 서비스 제공자 (SP)는 IdP를 신뢰하고 액세스 권한을 부여하는 애플리케이션입니다.

신뢰는 서명 인증서와 엔드포인트 URL을 포함한 메타데이터를 교환하는 별도 절차로 설정됩니다.

IdP  -> authenticates user, signs assertion
SP   -> consumes assertion, grants access
Metadata exchange establishes trust (certs, ACS URLs)

SAML 어설션

핵심 산출물은 IdP가 주체를 인증했음을 나타내는 XML 문서인 어설션입니다.

  • 주체는 사용자를 식별합니다(NameID).
  • 조건은 유효 기간과 의도된 수신 대상을 정의합니다.
  • AuthnStatement는 인증이 어떻게, 언제 이루어졌는지 기록합니다.
  • AttributeStatement는 역할, 이메일, 그룹 클레임을 전달합니다.
<saml:Assertion>
  <saml:Subject><saml:NameID>user@corp</saml:NameID></saml:Subject>
  <saml:Conditions NotOnOrAfter="2026-06-04T10:05:00Z"
     AudienceRestriction="https://sp.example"/>
  <saml:AuthnStatement .../>
</saml:Assertion>

SP에서 시작하는 SSO 흐름

가장 일반적인 방식은 SP에서 시작하는 SSO입니다.

  • 사용자가 SP에 접속하면 SP가 AuthnRequest를 생성하여 IdP로 리디렉션합니다.
  • IdP가 사용자를 인증한 후 서명된 Response를 SP의 어설션 소비 서비스(ACS)로 POST합니다.
  • SP가 어설션을 검증하고 로컬 세션을 생성합니다.
1. SP -> AuthnRequest -> IdP (redirect)
2. user authenticates at IdP
3. IdP -> signed SAMLResponse -> SP ACS (HTTP POST)
4. SP validates -> session

XML 서명으로 신뢰 기반 확보

SAML 보안은 XML 디지털 서명에 기반합니다. IdP가 개인 키로 어설션 및/또는 응답에 서명하고, SP가 신뢰된 인증서로 검증합니다.

  • 외부 응답에만 서명하지 말고 어설션 자체에 서명하십시오.
  • 메시지에 포함된 인증서가 아니라 메타데이터에서 가져온 고정된 IdP 인증서로 서명을 검증하십시오.

대부분의 SAML 공격은 서명 검증 로직을 겨냥합니다.

XML 서명 래핑(XSW)

XML 서명 래핑은 SAML에서 발생하는 서명 공격 유형입니다. 공격자는 유효하게 서명된 요소를 그대로 둔 채, 애플리케이션 로직이 실제로 읽는 두 번째 위조 어설션을 추가합니다.

  • 서명은 여전히 원래 조각에 대해 검증됩니다.
  • 그러나 비즈니스 로직은 주입된 서명되지 않은 어설션을 처리합니다.

완화 방법: 보안이 강화된 SAML 라이브러리를 사용하고, 서명된 요소가 실제로 소비되는 요소인지 검증하며, 여러 개이거나 모호한 어설션이 있는 문서는 거부하십시오.

Document after XSW:
  <Response>
    <Assertion id="evil">attacker claims</Assertion>  // read by app
    <Assertion id="orig" SIGNED>real user</Assertion>  // sig valid here
  </Response>

수신 대상 및 수신자 제한

어설션은 의도된 SP에 결속되어야 합니다. SAML은 이를 위한 명시적인 제한을 제공합니다.

  • AudienceRestriction은 어설션이 유효한 SP 엔터티 ID를 지정합니다.
  • SubjectConfirmation의 수신자는 ACS URL과 일치해야 합니다.

SP는 이러한 제한을 적용해야 합니다. 수신 대상 확인을 건너뛰면 한 앱을 위해 발급된 어설션을 다른 앱에서 재생할 수 있습니다.

재생 공격 및 시간 방어

어설션은 수명이 짧고 한 번만 사용할 수 있는 자격 증명입니다. SP는 이를 반드시 적용해야 합니다.

  • 엄격한 시계 오차 범위와 함께 NotBefore 및 NotOnOrAfter를 준수하십시오.
  • 어설션 ID를 추적하고 유효 기간 내의 모든 재사용을 거부하십시오.
  • ACS 엔드포인트에 TLS를 요구하십시오.

재생 추적이 없으면 탈취된 어설션이 만료되기 전에 다시 제출될 수 있습니다.

SP checks:
  now in [NotBefore, NotOnOrAfter]  (+- small skew)
  assertion.ID not seen before -> store + reject reuse

연합과 신뢰 체인

연합은 조직 경계를 넘어 SSO를 확장하며, 때로는 프로토콜 간 변환을 수행하는 허브나 브로커를 통해 이루어집니다.

  • 각 신뢰 연결은 잠재적인 약점입니다. 손상된 ID 제공자는 모든 사용자를 가장할 수 있습니다.
  • ID 브로커는 SAML과 OIDC를 연결할 수 있으므로 클레임 매핑을 신중하게 수행해야 합니다.

특성 매핑에는 최소 권한을 적용하고, 예상하지 못한 새 SP 등록을 모니터링하십시오.

일반적인 SAML 약점

반복해서 나타나는 SAML 오류 유형 중 감사할 가치가 있는 항목은 다음과 같습니다.

  • 서명을 검증하지 않거나, 응답에는 서명했지만 어설션에는 서명하지 않음
  • XML 서명 래핑에 취약함
  • 대상/수신자 검사 누락
  • 재생 공격 방어가 없거나 유효 기간이 지나치게 김
  • SP에서 XML 외부 엔터티(XXE)를 파싱함
  • 고정된 메타데이터 대신 메시지에 포함된 인증서를 신뢰함
Disable external entities in the XML parser:
  parser.setFeature(
    "http://apache.org/xml/features/disallow-doctype-decl", true)

SAML과 OIDC 비교

둘 다 SSO를 제공하지만 설계가 다릅니다.

  • SAML XML, 브라우저 POST/리디렉션 바인딩, 엔터프라이즈 및 워크포스에서 널리 사용, 성숙한 도구
  • OIDC JSON/JWT, REST에 친화적이며 모바일과 단일 페이지 애플리케이션에 더 적합

많은 조직이 둘 다 운영합니다. 방어 담당자는 각 앱이 사용하는 프로토콜에 맞는 어설션 검증 규칙을 알아야 합니다. 공격 표면이 다르기 때문입니다.

빠른 확인: XSW 무력화

설명된 공격에 가장 적합한 방어 방법을 선택하십시오.

복습: SAML과 연합

핵심 내용:

  • SAML은 서명된 어설션을 사용해 IdP와 SP 사이에서 동작하는 XML 기반 엔터프라이즈 SSO입니다.
  • 보안은 고정된 인증서를 기준으로 올바르게 XML 서명 검증을 수행하는 데 달려 있습니다.
  • XML 서명 래핑, 재생 공격, XXE에 대응하십시오.
  • 항상 대상/수신자 제한과 유효 기간을 적용하십시오.
  • 연합은 신뢰를 확장하지만 손상된 IdP로 인한 피해 범위를 배가합니다.

자주 묻는 질문

“SAML과 페더레이션” 강의는 무료인가요?

네 — “SAML과 페더레이션” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“SAML과 페더레이션”에서 뭘 배우나요?

엔터프라이즈 싱글 사인온을 익힙니다. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“SAML과 페더레이션” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. OAuth 2.0 흐름
  2. OpenID Connect (OIDC)
  3. SAML과 페더레이션
  4. 토큰 공격과 보안 강화
← Cyber Security Academy(으)로 돌아가기