세션 하이재킹
Contents
서버는 로그인하는 시점에 보통 내부적으로 사용자 세션을 생성하고 이를 식별할 수 있는 식별자(세션 키 - 자바 웹 애플리케이션에서는 jsessionid라는 이름을 가진다)를 사용자에 보내는 응답에 포함시킨다. 브라우저는 이를 쿠키 형태로 가지고 있게 되며, 이 세션 키가 서버 입장에서 사용자의 identity를 식별할 수 있는 식별자가 된다.
이 때 누군가가 이 세션 키를 가로채서 알게 되면 마치 그 사람인 척 하고 서버에 요청을 보내도 서버에서는 이게 진짜 사용자가 보냈는지 아닌지를 판단할 수 없다. 이것을 세션 하이재킹이라고 한다.
세션 하이재킹 방법
세션 하이재킹을 하는 방법에는 크게 4가지가 있다.
- 보안이 취약한 네트워크를 통해 전송되는 쿠키를 패킷 스니퍼를 사용하여 알아낸다. 예를 들어 해커가 악의적인 목적으로 Wi-Fi AP를 공개하고, 여기에 접속한 사람들이 보내는 패킷을 스니핑할 수 있다.
- 세션 키를 데이터베이스 등의 저장소를 이용하여 저장하는 경우, 데이터베이스에 몰래 접속하여 정보를 빼낼 수 있다.
- XSS를 사용한다.
- 사용자의 PC에 물리적으로 접속한다.
세션 하이재킹 대응
여기에 대해 아래와 같이 대응할 수 있다.
- 패킷 스니핑 : 보통 HTTPS를 씌우면 쉽게 해결된다.
- 데이터베이스 탈취 : 세션 키를 단방향 암호화하여 저장한다. 그러면 데이터베이스가 털리더라도, 원래 세션 키를 알아낼 수는 없다.
- XSS : 모든 컨텐츠를 escaping 해준다.
- 사용자 PC 접속 : 한 방에 해결해 주는 방법은 없다. 대신 사용자가 로그아웃할 때 혹은 주기적으로 세션 키를 바꿔주어 위험을 최소화시킬 수 있다.