707. 세션 하이재킹 (Session Hijacking) - TCP 시퀀스 넘버, 쿠키 갈취 기법
핵심 인사이트: 놀이공원에서 1시간 줄을 서서 롤러코스터 탑승권을 받았다. 화장실에 간 사이 소매치기가 내 탑승권을 몰래 훔쳐서 내 자리에 당당히 앉아 롤러코스터를 타버렸다. 이것이 세션 하이재킹이다. 해커는 귀찮게 아이디와 비밀번호를 털려고 노력하지 않는다. 이미 정상적으로 로그인을 끝마친 사용자의 '합격 목걸이(세션 ID, 쿠키)'만 쏙 빼내서 자기가 로그인한 척 서버를 농락하는 고단수 도둑질이다.
Ⅰ. 세션 하이재킹의 개념
- 시스템(웹 서버)과 사용자 간에 합법적으로 맺어져 유지되고 있는 연결(Session)을 중간에서 비정상적인 방법으로 가로채어(Hijacking), 해커가 마치 정상적인 사용자인 것처럼 행세하며 권한을 탈취하는 해킹 기법입니다.
- 공격 방식에 따라 크게 시스템(L4) 단의 TCP 세션 하이재킹과, 웹(L7) 단의 웹 세션(쿠키) 하이재킹으로 나뉩니다.
Ⅱ. TCP 세션 하이재킹 (L4 계층) 🌟
클라이언트와 서버가 맺고 있는 TCP 연결 자체를 뺏어버립니다.
1. 동작 원리 (TCP 시퀀스 넘버 맞추기)
- TCP 통신은 데이터를 주고받을 때 순서가 꼬이지 않도록
Sequence Number(시퀀스 번호, 순서표)를 사용합니다. - 해커는 스니핑을 통해 앨리스와 서버가 주고받는 이 시퀀스 번호의 흐름을 몰래 훔쳐보며 다음에 올 번호를 수학적으로 추정(예측)합니다.
2. 공격 시나리오 (RST와 가짜 패킷 인젝션)
- 앨리스와 서버가 한참 즐겁게 통신(Session 확립)하고 있습니다.
- 해커가 갑자기 앨리스의 컴퓨터로 뜬금없는 리셋 패킷(
RST)을 던져 앨리스 컴퓨터를 통신 불능 상태(기절)로 만들어버립니다. - 그 찰나의 순간, 해커가 앨리스의 IP 주소로 위장(IP 스푸핑)한 뒤, 아까 미리 계산해 둔 '다음 순서표(정확한 시퀀스 번호)'를 달아서 서버에게 악성 패킷을 팍 꽂아 넣습니다.
- 서버는 앨리스가 기절한 줄도 모르고, "오! IP도 맞고 번호표 순서도 정확하네!" 하며 해커의 패킷을 앨리스의 핏줄(세션)로 그대로 받아들여 버립니다. 통제권이 완벽히 넘어갔습니다.
- 방어법: 데이터를 IPsec이나 TLS를 통해 통째로 암호화해버리면, 해커가 겉면의 시퀀스 번호를 예측해서 중간에 끼어들어도 내용물 변조 시 MAC(무결성) 검사에 걸려 실패합니다.
Ⅲ. 웹 세션 (Cookie/Token) 하이재킹 (L7 계층) 🌟
우리가 매일 쓰는 웹 사이트에서 벌어지는 악명 높은 해킹입니다.
1. 동작 원리 (세션 ID 쿠키 갈취)
- 우리가 네이버에 한 번 로그인(ID/PW 입력)하고 나면, 네이버는 우리 브라우저에 임시 통행증인 **'Session ID 쿠키'**를 구워줍니다. 이후에는 이 쿠키만 내밀면 로그인 상태가 유지됩니다.
- 해커는 XSS 공격(크로스 사이트 스크립팅)이나 공용 와이파이 스니핑을 통해 사용자의 브라우저에 저장된 이 '쿠키(Session ID) 값' 텍스트를 몰래 훔쳐갑니다.
- 해커는 자기 컴퓨터 브라우저를 켜고, 훔친 쿠키 값을 자기 브라우저에 덮어씁니다. 그리고 네이버를 열면? 비밀번호를 칠 필요도 없이 홍길동의 로그인 상태로 네이버 화면이 열려버립니다.
2. 완벽한 웹 세션 방어 기법
- HTTPS(TLS) 전면 적용: 공용 와이파이에서 날아다니는 쿠키를 훔쳐보지 못하게 통신 전체를 암호화합니다.
- Secure 속성 부여: 개발자가 쿠키를 구워줄 때
Secure플래그를 달아두면, 브라우저는 이 쿠키를 무조건 암호화된 HTTPS 통신일 때만 밖으로 내보내어 탈취를 막습니다. - HttpOnly 속성 부여 🌟: 해커가 XSS 악성 스크립트를 이용해 남의 쿠키를 훔쳐 가지 못하도록, 자바스크립트 코드(
document.cookie)로는 절대 이 쿠키를 열어볼 수 없도록 브라우저 단에서 격리해 버리는 가장 확실한 방어 옵션입니다.
📢 섹션 요약 비유: 세션 하이재킹은 VIP 클럽 파티장 팔찌 훔치기입니다. 힘겹게 줄을 서서 신분증 검사(로그인)를 마치고 VIP 야광 팔찌(세션 ID)를 찬 손님이 잠시 방심한 사이, 해커가 그 팔찌를 가위로 몰래 끊어내어 자기 손목에 찹니다. 그리고 클럽 가드(서버) 앞을 쓱 지나가면, 가드는 이미 밖에서 신분 확인이 다 끝난 무적의 팔찌만 보고 아무 의심 없이 해커에게 VIP 룸 문을 활짝 열어주는 기만술입니다.