JWT

2023. 3. 19. 22:40

JWT는 JSON Web Token의 약자로 JSON 문서를 Base64로 인코딩 후 서명하는 방식이다.

대부분 웹사이트 사용자 인증에 사용되고, 쿠키에 포함되어 주로 쓰인다.

JWT는 사용자의 정보나 세션 만료 시간 등을 JSON 문서 형식으로  나타낸다.

 

JWT의 형태 : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiYWRtaW4ifQ.eIoIhSYmcaKDgn5ADDldZIbE4444NkglSgPrZJAF68Y

Header, Payload, Signature 이렇게 세 부분으로 나뉘어진다. (.으로 구분)

 

Header

- alg : 어떤 알고리즘을 이용하여 서명을 할 것인가.

- typ : 미디어타입의 옵션값 (JWT일 경우 "JWT")

{
  "alg": "HS256",
  "typ": "JWT"
}

 

Signature

- HS256(HMAC-SHA256) : Secret Key로 암호화 & 복호화(대칭키)

- RS256(RSA-SHA256) : Private Key로 암호화, Public Key로 복호화(비대칭키)

- ES256

- None

 

 

JWT None 알고리즘 공격

: None 알고리즘 공격은 Header의 Algorithm을 None으로 변조하여 인증을 우회하는 공격이다.

 

공격 방법

- JWT 라이브러리 내에는 많은 알고리즘 타입을 제공한다.

- 이때 이미 검증된 토큰을 디코딩하기 위한 알고리즘으로 "none" 알고리즘을 사용한다.

- "none"알고리즘은 검증 절차를 더이상 진행하지 않고 끝내도록 처리가 되어있다. -> 이때 JWT Signature 인증 우회가 가능한 취약점 발생

 

'기타' 카테고리의 다른 글

녹스 오류 해결 방법 +) 녹스에서 도커로 바꾸기  (0) 2023.03.13

BELATED ARTICLES

more