세션 하이재킹(Session Hijacking)
세션 하이재킹(Session Hijacking)은 정상 사용자의 로그인 세션을 가로채거나 탈취해, 인증 없이 해당 사용자로 위장하는 공격이다. 핵심은 비밀번호를 훔치는 것이 아니라 ‘이미 인증된 상태’를 빼앗는다는 점이다.
웹이나 네트워크 서비스에서는 사용자가 한 번 로그인하면, 서버가 세션 ID나 토큰을 발급한다. 이후 요청에서는 이 세션 정보를 기준으로 “이미 인증된 사용자”임을 판단한다. 세션 하이재킹은 바로 이 세션 식별자(Session ID)를 탈취해 공격자가 그대로 사용하는 공격이다.
세션 하이재킹이 일어나는 대표적인 방식은 몇 가지로 나뉜다.
첫째, 스니핑 기반 하이재킹이다. 암호화되지 않은 HTTP 통신이나 무선 네트워크에서 패킷을 도청해 세션 ID를 가로챈다.
둘째, 세션 고정(Session Fixation)이다. 공격자가 미리 만든 세션 ID를 피해자에게 사용하게 만든 뒤, 그 세션을 재사용한다.
셋째, XSS 기반 하이재킹이다. 악성 스크립트를 통해 브라우저의 쿠키에 저장된 세션 ID를 탈취한다.
넷째, TCP 세션 하이재킹으로, 시퀀스 번호를 예측해 중간에 패킷을 끼워 넣는 방식도 있다.
이 공격이 위험한 이유는, 서버 입장에서는 정상적인 요청과 공격 요청을 구분하기 어렵기 때문이다. 이미 유효한 세션을 사용하고 있기 때문에, 추가 인증 없이도 중요 기능에 접근할 수 있다.
대응 방법은 비교적 명확하다.
통신 구간을 암호화(HTTPS, TLS) 한다.
세션 ID를 쿠키에 저장할 때 Secure, HttpOnly 옵션을 적용한다.
로그인 이후에 세션 ID를 재발급한다.
일정 시간 동안 활동이 없으면 세션 타임아웃을 적용한다.
비정상적인 세션 사용 패턴을 탐지한다.
세션 하이재킹은 인증 이후 세션을 탈취하는 공격이다.
비밀번호 탈취가 아니다.
스니핑, XSS와 밀접하게 연관된다.
대응은 암호화와 세션 관리 강화다.