Refresh 토큰은 정말 필요한가?

김현조·2023년 3월 24일
6

Computer Science

목록 보기
5/6
post-thumbnail

토큰 기반 인증에서 Refresh 토큰은 Access 토큰의 유효기간을 줄여 보안상 이점을 가져가려는 목적에서 도입된다. 하지만...

궁금증

  1. HTTPS 기반으로 통신하면 어차피 암호화되어있는데 access token이 탈취되어도 상관없는 거 아닌가?
  2. Refresh token이 탈취되면 그걸 기반으로 access token을 발급받을 수 있지않나?

1. HTTPS 기반인데 왜 필요한가?

HTTPS란?

  • Hypertext Transfer Protocol Secure
  • TLS/SSL을 사용하여 암호화됨
  • TCP 기반의 통신 (TCP 방식으로 HTTP 메시지를 주고 받는다)
  • HTTPS 프로토콜을 사용하기 위해서는 CA로부터 SSL 인증서를 발급받아야 함
    • CA에 서버의 공개키와 각종 정보를 전달함
    • CA는 해당 정보를 사용해 SSL 인증서를 발급함
    • 이때 CA는 이 인증서를 암호화하기 위해 CA의 공개키와 비밀키를 사용
    • CA의 비밀키를 이용해 SSL 인증서를 암호화함
    • 암호화한 SSL 인증서를 서버에 전달하면 발급 완료
  • HTTPS를 사용하는 서버와 클라이언트가 통신을 하게 되면 SSL Handshake를 거침 (TCP 3-way handshake 이후)
    • 클라이언트 → 서버 (Client Hello)
    • 서버 → 클라이언트 (Server Hello)
    • 서버 → 클라이언트 (Certificate): 서버의 SSL 인증서 내용이 들어있음’
  • 클라이언트가 서버의 SSL 인증서를 검증 및 복호화
    • 브라우저/기기 → 주요 CA 리스트와 그들의 공개키 가지고 있음
    • 없으면 인터넷으로 인증기관 정보와 공개키 받아와야함
  • 클라이언트도 데이터 암호화 위한 대칭키 생성
    • 이때 대칭키를 서버에 전달해주어야 서버쪽도 복호화가 가능한데 대칭키라 탈취되면 안됨
    • 따라서 이 대칭키를 서버의 공개키로 암호화해서 서버에 전달함 (서버의 비밀키가 있는 경우에만 복호화 가능하게 되는 것이므로 서버측만 가능하게 됨)

따라서 HTTPS 기반으로 Access Token을 주고 받는다면, 탈취당해도 복호화 불가능하지 않는가?
=> 하지만 HTTPS도 만능은 아니다.

HTTPS 취약점

  • SSL Strip
    • MITM 공격 중 해커-타깃은 HTTP, 기존 웹서버 - 해커는 HTTPS로 통신
  • MITM 공격 (중간자 공격)
    • 가짜 웹서버에서 가짜 공개, 비밀키 만듦
    • 클라이언트가 가짜 웹서버로 접속하게 하여 클라이언트 비밀키 획득
    • 가짜 웹서버의 공개키와 브라우저의 비밀키로 symmetric key 생성하고 통신
  • 2014년 오픈 SSL 하트 블리드 (메모리 누수 버그)

따라서 HTTPS가 뚫릴 경우에 대비하여 refresh token을 활용하는 것이 좋음

2. Refresh token 탈취

" refresh토큰을 위한 refresh 토큰을 위한 refresh 토큰을 위한 refresh 토큰을 위한… 을 만들게 아니라면 결국 refresh 토큰이 탈취되었을 때 access token을 발급받을 수 있지 않나?"

사용시 이점

  • refresh 토큰이 탈취되어서 어뷰징이 발생했다면 이를 감지하고 DB에서 refresh 토큰을 지울 수 있다.
  • 추가적인 인증정보를 활용할 수 있다.

Access Token만 사용하는 경우에 비해 공격 당했을 때 대응이 용이함

결론

다 이유가 있었다.

“완벽한 보안은 없다. 그러나 ‘보안’은 있다”

0개의 댓글