Contents

세션 하이재킹

서버는 로그인하는 시점에 보통 내부적으로 사용자 세션을 생성하고 이를 식별할 수 있는 식별자(세션 키 - 자바 웹 애플리케이션에서는 jsessionid라는 이름을 가진다)를 사용자에 보내는 응답에 포함시킨다. 브라우저는 이를 쿠키 형태로 가지고 있게 되며, 이 세션 키가 서버 입장에서 사용자의 identity를 식별할 수 있는 식별자가 된다.

이 때 누군가가 이 세션 키를 가로채서 알게 되면 마치 그 사람인 척 하고 서버에 요청을 보내도 서버에서는 이게 진짜 사용자가 보냈는지 아닌지를 판단할 수 없다. 이것을 세션 하이재킹이라고 한다.

세션 하이재킹 방법

세션 하이재킹을 하는 방법에는 크게 4가지가 있다.

  1. 보안이 취약한 네트워크를 통해 전송되는 쿠키를 패킷 스니퍼를 사용하여 알아낸다. 예를 들어 해커가 악의적인 목적으로 Wi-Fi AP를 공개하고, 여기에 접속한 사람들이 보내는 패킷을 스니핑할 수 있다.
  2. 세션 키를 데이터베이스 등의 저장소를 이용하여 저장하는 경우, 데이터베이스에 몰래 접속하여 정보를 빼낼 수 있다.
  3. XSS를 사용한다.
  4. 사용자의 PC에 물리적으로 접속한다.

세션 하이재킹 대응

여기에 대해 아래와 같이 대응할 수 있다.

  1. 패킷 스니핑 : 보통 HTTPS를 씌우면 쉽게 해결된다.
  2. 데이터베이스 탈취 : 세션 키를 단방향 암호화하여 저장한다. 그러면 데이터베이스가 털리더라도, 원래 세션 키를 알아낼 수는 없다.
  3. XSS : 모든 컨텐츠를 escaping 해준다.
  4. 사용자 PC 접속 : 한 방에 해결해 주는 방법은 없다. 대신 사용자가 로그아웃할 때 혹은 주기적으로 세션 키를 바꿔주어 위험을 최소화시킬 수 있다.

참고

https://m.blog.naver.com/PostView.nhn?blogId=muchine98&logNo=220354628727&proxyReferer=https:%2F%2Fwww.google.co.kr%2F