tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
SAML 개요
**Security Assertion Markup Language (SAML)**는 아이덴티티 제공자(IdP)가 서비스 제공자(SP)에게 권한 부여 자격 증명을 전송할 수 있도록 하여 단일 로그인(SSO)을 촉진합니다. 이 접근 방식은 여러 웹사이트에서 단일 자격 증명을 사용할 수 있도록 하여 여러 로그인 관리를 간소화합니다. IdP와 SP 간의 표준화된 통신을 위해 XML을 활용하며, 사용자 신원의 인증과 서비스 권한 부여를 연결합니다.
SAML과 OAuth 비교
- SAML은 기업이 SSO 로그인 보안을 보다 잘 제어할 수 있도록 맞춤화되어 있습니다.
- OAuth는 모바일 친화적으로 설계되었으며, JSON을 사용하고 Google 및 Twitter와 같은 회사의 협력으로 개발되었습니다.
SAML 인증 흐름
자세한 내용은 https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/의 전체 게시물을 확인하세요. 다음은 요약입니다:
SAML 인증 프로세스는 여러 단계로 구성되어 있으며, 스키마에 설명되어 있습니다:
- 리소스 접근 시도: 사용자가 보호된 리소스에 접근하려고 합니다.
- SAML 요청 생성: SP는 사용자를 인식하지 못하고 SAML 요청을 생성합니다.
- IdP로 리디렉션: 사용자는 IdP로 리디렉션되며, SAML 요청은 사용자의 브라우저를 통해 전달됩니다.
- IdP가 요청 수신: IdP는 SAML 요청을 수신합니다.
- IdP에서 인증: IdP는 사용자를 인증합니다.
- 사용자 검증: IdP는 요청된 리소스에 접근할 수 있는 사용자의 정당성을 검증합니다.
- SAML 응답 생성: IdP는 필요한 주장을 포함한 SAML 응답을 생성합니다.
- SP의 ACS URL로 리디렉션: 사용자는 SP의 Assertion Consumer Service (ACS) URL로 리디렉션됩니다.
- SAML 응답 검증: ACS는 SAML 응답을 검증합니다.
- 리소스 접근 허용: 처음 요청한 리소스에 대한 접근이 허용됩니다.
SAML 요청 예시
사용자가 https://shibdemo-sp1.test.edu/secure/에서 보안 리소스에 접근을 요청하는 시나리오를 고려해 보세요. SP는 인증이 없음을 인식하고 SAML 요청을 생성합니다:
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
...
원시 SAML 요청은 다음과 같습니다:
<?xml version="1.0"?>
<samlp:AuthnRequest ...
</samlp:AuthnRequest>
이 요청의 주요 요소는 다음과 같습니다:
- AssertionConsumerServiceURL: IdP가 인증 후 SAML 응답을 보낼 위치를 지정합니다.
- Destination: 요청이 전송되는 IdP의 주소입니다.
- ProtocolBinding: SAML 프로토콜 메시지의 전송 방법을 정의합니다.
- saml:Issuer: 요청을 시작한 엔터티를 식별합니다.
SAML 요청 생성 후, SP는 302 redirect로 응답하여 브라우저를 SAML 요청이 HTTP 응답의 Location 헤더에 인코딩된 IdP로 안내합니다. RelayState 매개변수는 거래 전반에 걸쳐 상태 정보를 유지하여 SP가 SAML 응답을 수신할 때 초기 리소스 요청을 인식하도록 합니다. SAMLRequest 매개변수는 원시 XML 조각의 압축 및 인코딩된 버전으로, Deflate 압축 및 base64 인코딩을 사용합니다.
SAML 응답 예시
전체 SAML 응답은 여기에서 확인할 수 있습니다. 응답의 주요 구성 요소는 다음과 같습니다:
- ds:Signature: 이 섹션은 XML 서명으로, 어설션 발행자의 무결성과 진정성을 보장합니다. 예시의 SAML 응답에는 메시지용과 어설션용 두 개의
ds:Signature
요소가 포함되어 있습니다. - saml:Assertion: 이 부분은 사용자의 신원 및 기타 속성에 대한 정보를 포함합니다.
- saml:Subject: 어설션의 모든 진술의 주요 주체를 지정합니다.
- saml:StatusCode: 해당 요청에 대한 작업의 상태를 나타냅니다.
- saml:Conditions: 어설션의 유효성 타이밍 및 지정된 서비스 제공자와 같은 조건을 자세히 설명합니다.
- saml:AuthnStatement: IdP가 어설션의 주체를 인증했음을 확인합니다.
- saml:AttributeStatement: 어설션의 주체를 설명하는 속성을 포함합니다.
SAML 응답 후, IdP에서 302 redirect가 포함된 프로세스가 진행됩니다. 이는 서비스 제공자의 어설션 소비자 서비스(ACS) URL로의 POST 요청으로 이어집니다. POST 요청에는 RelayState
및 SAMLResponse
매개변수가 포함됩니다. ACS는 SAML 응답을 처리하고 검증하는 역할을 합니다.
POST 요청이 수신되고 SAML 응답이 검증된 후, 사용자가 처음 요청한 보호된 리소스에 대한 접근이 허용됩니다. 이는 /secure/
엔드포인트에 대한 GET
요청과 리소스에 대한 성공적인 접근을 나타내는 200 OK
응답으로 설명됩니다.
XML 서명
XML 서명은 전체 XML 트리 또는 그 안의 특정 요소에 서명할 수 있는 다재다능한 기능을 가지고 있습니다. 응답 요소뿐만 아니라 모든 XML 객체에 적용할 수 있습니다. 아래는 XML 서명의 주요 유형입니다:
XML 서명의 기본 구조
XML 서명은 필수 요소로 구성됩니다:
<Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
...
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
각 Reference
요소는 URI 속성으로 식별할 수 있는 서명된 특정 리소스를 나타냅니다.
XML 서명의 유형
- Enveloped Signature: 이 유형의 서명은 서명된 리소스의 자손으로, 서명이 서명된 콘텐츠와 동일한 XML 구조 내에 포함되어 있음을 의미합니다.
예시:
<samlp:Response ... ID="..." ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>
enveloped 서명에서 ds:Transform
요소는 enveloped-signature
알고리즘을 통해 enveloped됨을 지정합니다.
- Enveloping Signature: enveloped 서명과 대조적으로, enveloping 서명은 서명되는 리소스를 감쌉니다.
예시:
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
- Detached Signature: 이 유형은 서명하는 콘텐츠와 분리되어 있습니다. 서명과 콘텐츠는 독립적으로 존재하지만, 두 사이의 링크는 유지됩니다.
예시:
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
결론적으로, XML 서명은 XML 문서를 보호하는 유연한 방법을 제공하며, 각 유형은 서로 다른 구조적 및 보안 요구를 충족합니다.
References
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.