T_era

JWT 보안 취약점 및 대응 방안 본문

Programing/Spring

JWT 보안 취약점 및 대응 방안

블스뜸 2025. 5. 15. 12:01

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가 사용자 실수 또는 시스템 취약점을 통해 공격자에게 노출될 수 있다. 키 탈취 시 공격자는 임의의 유효 토큰을 발행하여 시스템 접근이 가능하다.
  • 대응 방안:
    1. JWT 저장소를 활용하거나 보안 장치를 사용하여 키를 안전하게 보관한다.
    2. 토큰 유출 또는 의심 시 해당 토큰을 블랙리스트에 등록하여 사용을 제한한다.
    3. Access Token 유효 시간을 짧게 설정하고, Refresh Token Rotation 방식을 적용하여 피해를 최소화한다.

결론적으로, JWT는 다양한 보안 취약점을 내포하고 있으므로, 적절한 대응 방안을 마련하여 안전하게 사용하는 것이 중요하다.