T_era
JWT 보안 취약점 및 대응 방안 본문
1. alg: None 공격
- 취약점: JWT Header의 alg 값 선택 가능성을 악용한다. 서버가 alg: None 처리를 부적절하게 수행할 경우, 공격자는 alg 값을 None으로 설정하여 서명 검증 없이 임의 토큰 발행이 가능하다.
- 대응 방안: 서버는 alg: None을 허용하지 않도록 엄격히 설정한다. 허용된 암호화 알고리즘만을 처리하도록 구현한다.
2. 쉬운 디코딩
- 취약점: JWT는 Base64 URL 인코딩을 사용하므로 디코딩이 용이하다. Payload에 민감 정보를 포함할 경우 정보 유출 위험이 증대된다.
- 대응 방안: Payload에 민감한 개인 정보 또는 중요 데이터를 포함하지 않는다. 필요한 정보는 암호화하거나 서버 측 저장소에 보관하고, 토큰에는 식별자만 포함하는 방식을 고려한다.
3. Secret Key (무차별 대입 공격)
- 취약점: JWT 서명 시 사용되는 Secret Key가 예측 용이하거나 단순할 경우, 무차별 대입 공격을 통해 키가 노출되어 임의의 유효 토큰 생성이 가능하다.
- 대응 방안:
- 강력하고 예측 불가능한 Secret Key를 사용한다.
- 토큰 생성용(Private Key)과 검증용(Public Key) 키를 분리하여 사용하고, Private Key는 안전하게 보관하며 외부 공유를 금지한다.
4. 키 탈취
- 취약점: Secret Key가 사용자 실수 또는 시스템 취약점을 통해 공격자에게 노출될 수 있다. 키 탈취 시 공격자는 임의의 유효 토큰을 발행하여 시스템 접근이 가능하다.
- 대응 방안:
- JWT 저장소를 활용하거나 보안 장치를 사용하여 키를 안전하게 보관한다.
- 토큰 유출 또는 의심 시 해당 토큰을 블랙리스트에 등록하여 사용을 제한한다.
- Access Token 유효 시간을 짧게 설정하고, Refresh Token Rotation 방식을 적용하여 피해를 최소화한다.
결론적으로, JWT는 다양한 보안 취약점을 내포하고 있으므로, 적절한 대응 방안을 마련하여 안전하게 사용하는 것이 중요하다.
'Programing > Spring' 카테고리의 다른 글
| 영속성 컨텍스트 - Entity 생명주기 및 캐시 (0) | 2025.05.15 |
|---|---|
| 공통 관심사(Cross-Cutting Concerns)와 Servlet Filter (0) | 2025.05.15 |
| JWT 인증 과정 및 특징 (0) | 2025.05.15 |
| Token 사용 이유 및 작동 방식 (0) | 2025.05.15 |
| Cookie와 Session (0) | 2025.05.15 |