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 설계 및 운영은 전체 인증 시스템의 신뢰성과 안정성을 결정짓는 핵심 요소임
'IT Study > 보안 및 프라이버시' 카테고리의 다른 글
🔐 보안 인증 표준(OpenID Connect, OAuth 2.0)의 구성과 차이점 (0) | 2025.04.11 |
---|---|
🔐 OTP(일회용 비밀번호) 생성 알고리즘과 인증 프로세스 (0) | 2025.04.10 |
🕵️ 사회공학적 공격(Social Engineering)의 유형과 실제 사례 분석 (0) | 2025.04.08 |
🔐 해시 함수(SHA-256 등)의 역할과 무결성 검증 개념 (0) | 2025.04.08 |
🔐 개인정보 보호법과 개인정보 비식별화 처리 방식 (1) | 2025.04.07 |