Burp를 활용한 SAML 취약점 점검과 디버깅
Burp로 SAML 메시지를 캡처하고 분석하는 절차와 주요 취약점 유형, 디버깅 사례를 초보자도 이해하기 쉬운 설명
목차
서론
SAML 기반 인증 흐름은 기업 환경에서 널리 사용되며, 잘못된 구성 하나로 심각한 보안 문제가 발생할 가능성이 있다. 본문은 Burp를 활용한 SAML 취약점 점검과 Burp SAML 디버깅 관점에서 핵심 절차와 확인 포인트를 정리한다. 대상은 SAML 개념을 처음 접하는 보안 실무자와 개발자이다.
SAML 기본 흐름과 핵심 요소
핵심 개념
SAML은 주로 Identity Provider(IdP)와 Service Provider(SP) 간에 사용자 인증 정보를 교환하는 표준이다. 주요 구성 요소는 Assertion, Response, Signature, Audience, AssertionConsumerService(ACS) 등이다. 각 요소의 역할과 신뢰 경계가 취약점 탐지의 출발점이 된다.
Assertion 구조 요약
Assertion은 사용자 정보와 조건(유효기간, 대상 등)을 포함한다. 이 구조가 어떻게 위변조 방지 및 수신 검증에 사용되는지 이해하는 것이 중요하다.
점검 준비: Burp 설정과 환경
프록시와 SSL 설정
Burp Proxy로 브라우저 트래픽을 캡처할 수 있다. 대상 애플리케이션이 HTTPS일 경우 Burp의 CA 인증서를 브라우저에 설치해야 한다. 설치 후에는 SAML 요청과 응답이 프록시를 통해 보이는지 확인한다.
테스트 범위와 윤리적 고려
테스트 대상 선정은 명확한 허가 범위 내에서 진행되어야 한다. 권한이 없는 시스템에 대한 접근이나 변조 시도는 법적 문제가 될 수 있다. 점검 목적과 범위를 문서화해 책임 있는 절차를 유지하는 것이 기본이다.
Burp로 SAML 메시지 캡처와 분석
캡처 과정 요약
- 브라우저 트래픽을 Burp로 라우팅하여 AuthnRequest, Response 등 SAML 메시지 확인
- Base64 인코딩된 SAML 페이로드는 디코딩하여 XML 구조 확인
- Replay나 변조를 시도하기 전에는 반드시 테스트 범위와 영향도를 재검토
분석 시 주요 포인트
- Signature 유효성: 서명 대상이 전체 Response인지, Assertion인지 확인
- Issuer와 Audience: 토큰이 의도한 수신자와 발급자로부터 왔는지 확인
- 유효기간(Conditions): NotBefore/NotOnOrAfter 값의 적절성 검토
- ID 재사용: 동일한 Assertion ID가 재사용되는지 여부 확인
일반적인 취약점 유형과 징후
서명 처리 실수
서명이 잘못된 노드에만 적용되거나 검증 로직이 불완전한 경우가 있다. 예를 들어 Response는 서명되어 있지 않으나 내부 Assertion만 서명되는 구조에서 검증 우회 가능성이 발생한다는 징후가 보인다.
XML Signature Wrapping 관련 문제
XML 구조를 조작해 원래 서명된 부분과 다른 Assertion이 처리되는 경우가 있다. 이 문제는 XML 파서를 사용하는 방식과 서명 검증 범위가 분리된 환경에서 주로 발생한다.
Audience 및 Destination 검증 미비
Audience나 Destination 검증이 없거나 느슨한 경우, 토큰이 의도치 않은 SP에서 수용될 가능성이 존재한다.
Burp를 이용한 점검 절차(요약)
- Proxy 설정 후 전체 SAML 교환 캡처
- Base64 디코딩으로 XML 획득
- Assertion/Response 구조와 서명 위치 확인
- Signature 검증 로직과 파서 동작 방식 검토
- 유효기간, Audience, Issuer 필드 점검
디버깅 예제와 해석
아래 예시는 SAML Response의 단순화된 구조이다. 실제 분석 시에는 Base64 디코딩 후 이와 유사한 XML을 확인하게 된다. 태그는 <와 >로 이스케이프 처리되어 있다.
<Response ID="_abc123" IssueInstant="2025-01-01T00:00:00Z" Version="2.0">
<Issuer>https://idp.example.com</Issuer>
<Assertion ID="_assert1" IssueInstant="2025-01-01T00:00:00Z">
<Issuer>https://idp.example.com</Issuer>
<Subject>
<NameID>user@example.com</NameID>
</Subject>
<Conditions NotBefore="2025-01-01T00:00:00Z" NotOnOrAfter="2025-01-01T01:00:00Z">
<AudienceRestriction><Audience>https://sp.example.com</Audience></AudienceRestriction>
</Conditions>
<AuthnStatement><AuthnContext/></AuthnStatement>
</Assertion>
<Signature>...</Signature>
</Response>
예시에서 확인해야 할 항목은 Signature 위치(Response 전체 또는 Assertion 내부), Assertion ID의 고유성, Audience 일치 여부, Conditions의 유효기간 기준 등이다. Burp Repeater로 응답을 재전송하는 과정에서 ID 값과 Audience를 관찰하면 비정상 동작 징후를 찾을 수 있다. 다만 재전송 과정은 허가된 테스트 범위에서만 수행되어야 한다.
Burp 확장과 자동화 활용
Burp의 확장(Extensions)은 SAML 메시지 디코딩·검증을 자동화하는 데 유용하다. 확장 기능을 통해 Base64 디코딩, XML 파싱, 서명 위치 식별 작업을 반복적으로 자동화할 수 있다. 자동화는 대량 점검 시 효율을 높이나 결과 해석은 사람이 최종 검증하는 절차가 권장된다.
결론
Burp SAML 테스트와 Burp SAML 디버깅은 SAML 기반 인증의 신뢰 경계를 검토하는 데 중요한 방법이다. 기본 흐름 이해, 캡처·디코딩 절차, 주요 검증 포인트 점검이 핵심이다. 점검은 명확한 허가와 영향도 평가 하에 수행되어야 하며, 자동화 도구는 보조 수단으로 활용하는 것이 적절하다.