728x90

 

애플리케이션 세션 하이재킹이란?

세션 하이재킹은 사용자가 웹 애플리케이션 또는 서비스에 로그인한 뒤 서버로부터 부여받은 세션 식별자(session ID) 를 공격자가 탈취하거나 가로채서, 해당 사용자의 권한으로 서버에 접근하거나 행동하는 공격입니다.
쉽게 말해, 사용자 행세를 하는 겁니다.

웹 애플리케이션은 로그인 이후 사용자 인증을 계속 유지하기 위해 쿠키나 URL 파라미터, 헤더 등에 세션 ID를 사용합니다. 이 세션 ID만 확보하면 공격자는 비밀번호나 ID 없이도 피해자 계정으로 접속할 수 있습니다.

 

 

 세션 하이재킹 주요 공격 기법

1. 세션 스니핑(Session Sniffing)
네트워크 상에서 패킷을 도청하여 세션 ID를 가로채는 방법입니다.

  • 공격자가 같은 네트워크(예: 공용 Wi-Fi)에 있을 때 유용
  • HTTP 트래픽은 암호화되지 않아 세션 쿠키나 헤더가 평문으로 노출됨
  • 이를 막기 위해 HTTPS가 필수

 

2. 세션 예측(Session Prediction)
세션 ID 생성 규칙이 약하거나 예측 가능한 경우, 공격자가 가능한 세션 ID를 추측하여 접속하는 방식입니다.

  • 예: 순차적인 숫자나 짧은 랜덤 값
  • 보안성이 약한 PRNG(난수 생성기) 사용 시 쉽게 예측 가능

 

3. Cross-site Scripting (XSS) 활용
웹사이트에 XSS 취약점이 있으면, 공격자가 악성 스크립트를 삽입해 피해자의 브라우저에서 세션 쿠키를 훔쳐 서버로 전송시킬 수 있습니다.

  • document.cookie로 쿠키 값 접근 후 공격자 서버로 전송
  • HttpOnly 속성을 쿠키에 설정하면 자바스크립트로 접근을 차단 가능

 

 

4. 세션 고정(Session Fixation)
공격자가 미리 고정된 세션 ID를 피해자에게 심어주고, 피해자가 로그인하면 해당 세션 ID로 공격자가 접속하는 방식입니다.

  • 예: 피싱 링크에 세션 ID를 포함시켜 전달
  • 서버가 로그인 후 세션 ID를 재발급하지 않으면 공격이 성공

 

 

5. Man-in-the-Middle (MITM)
공격자가 네트워크 중간에 위치해 트래픽을 중간에서 가로채거나 변조하는 공격입니다.

  • 세션 하이재킹뿐 아니라 패스워드, 개인정보 탈취도 가능
  • SSL/TLS 사용 및 인증서 검증으로 방어 가능

 

 공격 시나리오 예시

1 사용자가 카페에서 공용 Wi-Fi로 웹사이트에 로그인
2 공격자가 같은 Wi-Fi에 접속해 패킷 스니핑(예: Wireshark) 진행
3 HTTP 트래픽에서 세션 쿠키 값 발견
4 공격자가 자신의 브라우저에서 해당 쿠키를 강제로 세팅하고 사이트 접속
5 피해자 계정으로 로그인된 상태에서 민감 정보 접근, 행동 가능

 

 방어 방법

  •  모든 트래픽에 HTTPS 사용
  • 세션 쿠키에 HttpOnly, Secure 속성 설정
  • 세션 ID를 충분히 길고 예측 불가능하게 생성
  • 로그인 시마다 세션 ID 재발급 (세션 고정 방지)
  • 사용자 활동 감지 및 의심스러운 요청 차단 (예: IP/브라우저 Fingerprint 변경 시 로그아웃)
  • XSS 방어 (입력값 검증, Content Security Policy 설정)

 


 

 TCP 세션 하이재킹이란?

TCP는 통신 세션을 유지하기 위해 시퀀스 번호(Sequence Number) 확인 번호(Acknowledgment Number) 를 사용합니다.
공격자는 이 시퀀스 번호 체계를 조작하여 클라이언트와 서버 간 세션에 끼어들거나 기존 세션을 탈취할 수 있습니다.

즉, 서버와 클라이언트가 이미 연결된 상태에서 공격자가 다음과 같은 과정을 거쳐 세션을 가로채는 방식입니다.

 


공격 원리

1. 세션 식별
공격자는 타겟 클라이언트와 서버 간의 TCP 연결 상태, IP, 포트, 현재 시퀀스 번호를 파악해야 합니다.
이것을 위해 스니핑(패킷 캡처) 또는 예측(시퀀스 넘버 예측)이 필요합니다.

 

 

2. 세션 방해
공격자는 클라이언트 또는 서버에게 TCP RST (Reset) 패킷을 보내 현재 세션을 강제로 종료시킵니다.
예:

  • 클라이언트에게 RST → 클라이언트는 연결이 끊긴 줄 알고 통신 중단
  • 서버에게 RST → 서버는 해당 클라이언트 연결을 끊음

 

 

3. 세션 재구성
공격자는 클라이언트 대신 서버로, 서버 대신 클라이언트로 위장된 패킷을 보냅니다.

  • 올바른 IP/포트 조합 사용
  • 정확한 시퀀스 번호로 패킷 전송

만약 시퀀스 번호가 정확히 맞아떨어지면, 서버는 공격자를 클라이언트로 인식하고 통신을 이어갑니다.

 

 인증 우회

TCP 레벨 세션은 일반적으로 애플리케이션 인증 (예: ID/PW, 세션 토큰)과 별개로 동작합니다.
따라서 TCP 세션만 탈취해도 이미 인증된 애플리케이션 레이어의 세션을 가로채거나 추가 인증 없이 패킷을 주고받을 수 있게 됩니다.

예:

  • Telnet, FTP, POP3 같은 평문 프로토콜에서 로그인 후 TCP 세션을 하이재킹하면 ID/PW 없이 명령어 주입 가능

 

 공격 시나리오 예시

1. 공격 준비

  • 같은 네트워크에 위치하거나 중간자 위치 확보 (예: MITM)
  • Wireshark, tcpdump 등으로 트래픽 모니터링
  • 클라이언트와 서버 간 세션 정보 (IP, 포트, 시퀀스 번호) 파악

 

 

2. RST 패킷 전송

  • 클라이언트에게 서버로부터 온 것처럼 RST 패킷을 보냄 → 클라이언트 연결 종료
  • 서버에게 클라이언트로부터 온 것처럼 RST 패킷을 보냄 → 서버 연결 종료

 

 

3. 세션 재구성

  • 공격자는 클라이언트의 IP와 포트, 시퀀스 번호를 그대로 복제
  • 서버로부터의 응답을 받아 세션을 이어감 (패킷 인젝션 가능)

 

 조건 및 난이도

조건 설명
IP 스푸핑 가능 공격자가 클라이언트 IP로 패킷 전송 가능해야 함
시퀀스 번호 예측 또는 캡처 최신 시스템은 랜덤 시퀀스 번호 사용, 예측 어려움
응답 패킷 수신 IP 스푸핑만으로는 서버 응답을 받지 못하는 경우가 많음 (반송 패킷은 클라이언트로 감)
즉, 스니핑 가능성(MITM 위치) 이 있으면 쉬워지고, 원격에서 스푸핑만으로는 어려운 공격입니다.

 

방어 방법

  • 최신 TCP/IP 스택은 랜덤 시퀀스 넘버를 사용 (RFC 6528)
  • 서버와 클라이언트 간 암호화 (SSH, TLS)
  • 세션 무결성 검증 (애플리케이션 레벨에서)
  • IP 필터링, 방화벽 설정
  • 짧은 세션 타임아웃, 세션 재검증

 

실제 실습 도구

  • hping: TCP 패킷 조작 및 RST 패킷 전송
  • ettercap / Cain & Abel: ARP 스푸핑 및 MITM + 세션 하이재킹
  • Wireshark: 시퀀스 번호 및 세션 모니터링

 

728x90

+ Recent posts