보안 공부/Web 보안

JWT(Json Web Token) 보안 특성 및 대처 방안

H.J.World 2022. 1. 10. 17:15
728x90
반응형

JWT 란?

- JWT는 상호간의 정보를 안전하게 전송하는데 사용되는 기술
- 주로 신원(identity) 정보와 클라이언트의 요청과 관련된 정보를 운반하는데 사용
- 토큰은 인증(authentication)을 통해서 생성 -> 서버에 의해서 검증
- 휴대성(portability), 비상태성(stateless)상태로 클라이언트와 서버 기술의 기술의 분리가 용이


JWT 구조

- 3개파트로 분리 (헤더 영역, 데이터 영역, 시그니처 영역)
- 헤더 영역(HEADER)
 -> 알고리즘 정의(alg), 타입결정(typ)
- 데이터 영역(payload)
 -> sub, name, admin ex)
- 시그니처 영역(signiture)
 -> 헤더 영역과 데이터 영역을 결합한 데이터를 서버 비밀키(Secret)을 통해 암호화


None 해싱 알고리즘

- 공격자가 해싱 알고리즘을 None으로 변경하는 것
- 몇몇 라이브러리들은 none 알고리즘을 서명된 토큰으로 인식해 발생
 -> node-jsonwebtoken, pyjwt, namshi/jose, php-jwt, jsjwt

 
토큰 하이재킹

- 토큰이 중간에서 가로 채기 당하거나 도난을 당했을 경우 시스템에 대한 접근 권한을 얻기위해 악용
 -> 인증 시퀀스 동안에 생성된 무작위 문자열이 토큰 내 포함되어 있어야함
 -> HTTP 헤더 보안 플래그를 사용
 -> secure : https프로토콜 사용시에만 전송가능 
 -> httponly : 자바스크립트의 Document.cookie api를 통해 접근이 불가
 -> SameSite : 교차도메인전송을 방지 CSRF에대해 보안을 제공

 
명시적 토큰 철회/취소

- 토큰이 유출되도 사용자는 토큰 자체를 취소할 수 없게 되며 공격자를 차단할 수 없음
 -> token의 블랙리스트를 구현해 Loout 기능을 모방 / 헥사로 인코딩된 SHA256 다이제스트와 취소일자(revokation date)를 보관

 
토큰 정보 노출

- 공격자가 토큰에 접근해 정보를 추출하는 방식
 -> 알고리즘을 이용해 토큰을 암호화 


토큰 하이재킹

- 토큰이 인터셉트되거나 도난을 당했을때, 목표로하는 사용자 신원정보를 사용해 시스템에 권한을 획득
 -> 사용자 컨텍스트를 토큰에 추가

* OWASP JWT 참조

728x90
반응형