IT Study/보안 및 프라이버시

🔐 보안 인증 토큰(JWT)의 구조와 취약점 분석

cs_bot 2025. 4. 9. 17:51

1. 개요

  • 현대 웹 서비스 환경에서 사용자 인증과 권한 부여를 위해 토큰 기반 인증 방식 활발히 활용됨
  • JWT(JSON Web Token)는 OAuth2.0 및 OpenID Connect 등 다양한 인증 프로토콜에서 사용되는 핵심 요소임
  • 간결한 포맷, 자체 포함(Self-contained)된 정보 구조, RESTful 환경과의 높은 호환성으로 인해 보편적으로 채택됨
  • 그러나 구조적 특징으로 인해 여러 보안 취약점 존재함
  • JWT의 구조와 해당 구조로 인한 보안 위협 분석 필요

2. JWT 개요 및 구조

JWT 정의

  • JSON 포맷 기반으로 인코딩된 인증용 토큰
  • 서버-클라이언트 간 인증 상태 공유 없이 상태(State-less) 방식으로 인증 수행 가능
  • 클라이언트에 토큰 저장 후 요청마다 전송함으로써 세션 미유지 환경에서도 인증 연속성 확보 가능

기본 구조
JWT는 “.”으로 구분된 3개의 Base64Url 인코딩된 문자열로 구성됨

[Header].[Payload].[Signature]

① Header

  • 토큰 유형 및 서명 알고리즘 명시
  • 일반적으로 다음과 같은 구조 사용
    {
    "alg": "HS256",
    "typ": "JWT"
    }

② Payload

  • 인증 대상에 대한 클레임(Claims) 포함
  • 등록 클레임(iss, exp, sub 등), 공개 클레임, 비공개 클레임 등으로 구분
  • 사용자의 정보 및 권한, 토큰 만료시간 등 중요 데이터 포함됨

③ Signature

  • Header와 Payload를 조합하여 지정된 알고리즘으로 서명 생성
  • 무결성 및 위변조 방지 목적
  • 대칭키(HS256) 또는 비대칭키(RS256 등) 방식 사용 가능

3. JWT의 장점

  • 상태를 유지하지 않아 서버 자원 부담 감소
  • 다양한 플랫폼 및 언어 간 호환성 보장
  • URL, HTTP Header, 쿠키 등 다양한 채널을 통한 전달 가능
  • 자체 정보 포함으로 인증 서버에 대한 의존도 낮음
  • Redis 등의 별도 저장소 없이도 사용자 정보 유지 가능

4. JWT의 보안 취약점 및 대응 방안

(1) 서명 알고리즘 변조 취약점 (alg=none)

  • JWT 초기 사양에서는 alg: none 허용됨
  • 공격자가 알고리즘을 none으로 변경한 후 임의의 Payload로 토큰 재생성 가능
  • 검증 시 서명을 확인하지 않기 때문에 인증 우회 가능
  • 대응: none 알고리즘 비활성화 및 서명 강제 검증 처리 필요

(2) 대칭키 오용 취약점 (HS256 ↔ RS256 전환)

  • 서버가 RS256을 사용하는 경우, 공격자가 키 쌍 중 공개키를 가져와 HS256 방식으로 위조 가능
  • 공개키를 대칭키처럼 사용해 임의의 JWT 생성 가능
  • 대응: 알고리즘 변경 제한 및 키 유효성 철저 검증 필요

(3) 토큰 탈취 및 재사용 공격

  • JWT가 클라이언트에 저장되어 HTTP 요청 시 전송되므로 탈취 가능성 존재
  • 탈취된 토큰을 이용해 동일 권한으로 악의적 접근 가능
  • 대응: HTTPS 적용 필수, 토큰 수명 짧게 설정, IP/Device 기반 세션 식별 도입 필요

(4) 토큰 만료 시간 미설정 또는 과도한 설정

  • Payload에 exp 클레임 미포함 시, 무기한 유효한 토큰으로 악용 가능
  • exp가 과도하게 긴 경우, 탈취 시 장기 위협 가능
  • 대응: 만료시간 필수 설정 및 짧은 유효 시간 권장

(5) 클레임 정보 위변조

  • Payload는 서명 전까지 평문 형태로 존재하므로 누구나 디코딩 가능
  • 민감 정보 포함 시 정보 노출 위험 존재
  • 대응: 민감 정보는 Payload에 포함하지 않도록 설계, 필요시 암호화 고려

(6) Refresh Token 미사용 및 재발급 정책 부재

  • 액세스 토큰 탈취 시 리프레시 토큰 없으면 무방비 상태
  • 대응: 액세스 토큰-리프레시 토큰 쌍 사용, 재발급 정책 구축 필요

5. 실무 활용 시 고려 사항

  • 토큰 저장 위치에 따른 보안 고려: LocalStorage보다 HttpOnly 쿠키 선호
  • 토큰 유출 대응 방안 마련: 블랙리스트, 즉시 무효화 등
  • 사용자 행위 기반 이상 징후 탐지 및 토큰 무효화 가능하도록 설계
  • 비정상 요청 반복 시 토큰 폐기 및 사용자 인증 재요청
  • Multi-Factor Authentication 연동 시 JWT 발급 조건 추가 가능
  • 전송 채널 보안 유지: TLS 기반 통신 필수

6. 결론

  • JWT는 무상태 인증의 효율성과 확장성을 제공하는 강력한 도구임
  • 반면, 구조의 단순성과 클라이언트 저장 방식으로 인해 다양한 보안 취약점 내재함
  • 알고리즘 설정, 만료 정책, 저장소 관리, 서명 검증 등의 요소를 통합적으로 고려한 안전한 설계 필요
  • 실무 적용 시 최신 보안 권고안 기반으로 시스템 전반에 대한 보안성 강화 요구됨
  • 보안성을 고려한 JWT 설계 및 운영은 전체 인증 시스템의 신뢰성과 안정성을 결정짓는 핵심 요소임