JWT
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 |
---|