707. 세션 하이재킹 (Session Hijacking) - TCP 시퀀스 넘버, 쿠키 갈취 기법

핵심 인사이트: 놀이공원에서 1시간 줄을 서서 롤러코스터 탑승권을 받았다. 화장실에 간 사이 소매치기가 내 탑승권을 몰래 훔쳐서 내 자리에 당당히 앉아 롤러코스터를 타버렸다. 이것이 세션 하이재킹이다. 해커는 귀찮게 아이디와 비밀번호를 털려고 노력하지 않는다. 이미 정상적으로 로그인을 끝마친 사용자의 '합격 목걸이(세션 ID, 쿠키)'만 쏙 빼내서 자기가 로그인한 척 서버를 농락하는 고단수 도둑질이다.

Ⅰ. 세션 하이재킹의 개념

  • 시스템(웹 서버)과 사용자 간에 합법적으로 맺어져 유지되고 있는 연결(Session)을 중간에서 비정상적인 방법으로 가로채어(Hijacking), 해커가 마치 정상적인 사용자인 것처럼 행세하며 권한을 탈취하는 해킹 기법입니다.
  • 공격 방식에 따라 크게 시스템(L4) 단의 TCP 세션 하이재킹과, 웹(L7) 단의 웹 세션(쿠키) 하이재킹으로 나뉩니다.

Ⅱ. TCP 세션 하이재킹 (L4 계층) 🌟

클라이언트와 서버가 맺고 있는 TCP 연결 자체를 뺏어버립니다.

1. 동작 원리 (TCP 시퀀스 넘버 맞추기)

  • TCP 통신은 데이터를 주고받을 때 순서가 꼬이지 않도록 Sequence Number(시퀀스 번호, 순서표)를 사용합니다.
  • 해커는 스니핑을 통해 앨리스와 서버가 주고받는 이 시퀀스 번호의 흐름을 몰래 훔쳐보며 다음에 올 번호를 수학적으로 추정(예측)합니다.

2. 공격 시나리오 (RST와 가짜 패킷 인젝션)

  1. 앨리스와 서버가 한참 즐겁게 통신(Session 확립)하고 있습니다.
  2. 해커가 갑자기 앨리스의 컴퓨터로 뜬금없는 리셋 패킷(RST)을 던져 앨리스 컴퓨터를 통신 불능 상태(기절)로 만들어버립니다.
  3. 그 찰나의 순간, 해커가 앨리스의 IP 주소로 위장(IP 스푸핑)한 뒤, 아까 미리 계산해 둔 '다음 순서표(정확한 시퀀스 번호)'를 달아서 서버에게 악성 패킷을 팍 꽂아 넣습니다.
  4. 서버는 앨리스가 기절한 줄도 모르고, "오! IP도 맞고 번호표 순서도 정확하네!" 하며 해커의 패킷을 앨리스의 핏줄(세션)로 그대로 받아들여 버립니다. 통제권이 완벽히 넘어갔습니다.
  • 방어법: 데이터를 IPsec이나 TLS를 통해 통째로 암호화해버리면, 해커가 겉면의 시퀀스 번호를 예측해서 중간에 끼어들어도 내용물 변조 시 MAC(무결성) 검사에 걸려 실패합니다.

우리가 매일 쓰는 웹 사이트에서 벌어지는 악명 높은 해킹입니다.

1. 동작 원리 (세션 ID 쿠키 갈취)

  • 우리가 네이버에 한 번 로그인(ID/PW 입력)하고 나면, 네이버는 우리 브라우저에 임시 통행증인 **'Session ID 쿠키'**를 구워줍니다. 이후에는 이 쿠키만 내밀면 로그인 상태가 유지됩니다.
  • 해커는 XSS 공격(크로스 사이트 스크립팅)이나 공용 와이파이 스니핑을 통해 사용자의 브라우저에 저장된 이 '쿠키(Session ID) 값' 텍스트를 몰래 훔쳐갑니다.
  • 해커는 자기 컴퓨터 브라우저를 켜고, 훔친 쿠키 값을 자기 브라우저에 덮어씁니다. 그리고 네이버를 열면? 비밀번호를 칠 필요도 없이 홍길동의 로그인 상태로 네이버 화면이 열려버립니다.

2. 완벽한 웹 세션 방어 기법

  • HTTPS(TLS) 전면 적용: 공용 와이파이에서 날아다니는 쿠키를 훔쳐보지 못하게 통신 전체를 암호화합니다.
  • Secure 속성 부여: 개발자가 쿠키를 구워줄 때 Secure 플래그를 달아두면, 브라우저는 이 쿠키를 무조건 암호화된 HTTPS 통신일 때만 밖으로 내보내어 탈취를 막습니다.
  • HttpOnly 속성 부여 🌟: 해커가 XSS 악성 스크립트를 이용해 남의 쿠키를 훔쳐 가지 못하도록, 자바스크립트 코드(document.cookie)로는 절대 이 쿠키를 열어볼 수 없도록 브라우저 단에서 격리해 버리는 가장 확실한 방어 옵션입니다.

📢 섹션 요약 비유: 세션 하이재킹은 VIP 클럽 파티장 팔찌 훔치기입니다. 힘겹게 줄을 서서 신분증 검사(로그인)를 마치고 VIP 야광 팔찌(세션 ID)를 찬 손님이 잠시 방심한 사이, 해커가 그 팔찌를 가위로 몰래 끊어내어 자기 손목에 찹니다. 그리고 클럽 가드(서버) 앞을 쓱 지나가면, 가드는 이미 밖에서 신분 확인이 다 끝난 무적의 팔찌만 보고 아무 의심 없이 해커에게 VIP 룸 문을 활짝 열어주는 기만술입니다.