TCP 세션 하이제킹 (TCP session hijacking) 이란?

tcp세션을 훔쳐서 서버에게 새로운 시퀀스 넘버를 보내서 마치 클라이언트 인척하며 연결을 이어나가는 공격 기법


공격 절차

  1. 공격자가 적절한 Sequnce Number를 획득하기 위해 스니핑을 한다. 
  2. 공격자는 공격하려는 시점에서 RST 패킷을 생성하여 서버에게 보낸다. 서버는 잠시 Closed 상태가 되지만, 클라이언트는 Established 상태다
    (Sequence Number는 40억개가 존재 하며 포트 번호는 6만개가 넘어, 이 조합을 맞출 확륙은 1/28조의 확률이다. 하지만 TCP 규칙과 리눅스 시스템 구현의 취약점을 이용한 공격이 가능하다)
  3. 공격자는 (새로운) Client_My_Seq를 생성해서 서버로 전송한다
  4. 서버는 새로운 Client_My_Seq를 받아들이고, Server_My_Seq를 재 생성해서 공격자에게 보낸 후 SYN_Received 상태가 된다
  5. 공격자는 정상적인 연결처럼 서버와 Sequence Number를 교환하고, 공격자와 서버 모두 Established 상태가 된다. 
    (원래의 클라이언트도 이 단계 까지도 Established 상태이며, 서버가 네트워크 문제로 인한 잠시 동안의 연결 문제처럼 받아들이며, 연결은 끊어졌지만 인증 세션은 열려 있는 상태이다.)
  6. 공격자는 공격전 클라이언트가 서버와 통신을 하던 Sequence Number를 모두 알고 있는 상태이므로 클라이언트와 정상적으로 통신을 하며, 서버와는 공격자가 새로 생성한 Sequnce Number를 가지고 통신을 한다. 

관련 개념

  • ACK Storm : 공격자가 서버와 연결을 끊고 다시 연결을 시도하는 동안 클라이언트는 정상적인 패킷을 서버로 보낸다. 하지만 서버는 정상적이지 않은 Sequnce Number로 인식하여 ACK 패킷에 Server_My_Seq가 자신의 Client_My_Seq와 다르다는 것을 확인하고, 서버에게 Client_My_Seq와 Client_Server_Seq가 담긴 ACK 패킷을 보낸다. 이러한 과정에서 무한히 반복된다.
  • 동기화 상태 : 서로의 Sequence Number를 올바르게 알고 있는 정상적인 상태. TCP 하이제킹이 일어날 경우 비동기 상태에 놓이게 된다
  • TCP 연결 종료 
    • TCP 는 신뢰성 있는 (메세지의 손실이 없다는 뜻) 프로토콜이기 때문에 메세지의 손실 없이 연결을 종료하는 프로토콜 절차가 필요함 
    • 예 : 두 사람이 전화 통화를 하고 있고, 두 사람의 목소리의 흐름(?)은 각자에게 전달된다. 때문에 한 사람이 전화를 끊기 전에 자신이 전한 모든 이야기가 모두 상대방에게 전달 되었는지 확인한 후 전화를 끊고자 한다. 때문에 "안녕!" 이라는 최종 말을 전한다. 이 뜻은 상대방에게 더이상 전할 말(데이터)가 없고 연결을 종료하고 싶다는 신호이다. 이 말을 전한 후, 상대가 남은 할 말을 다 한 후 "알겠다!" 라는 대답을 기다려 연결을 종료한다 
    • FIN, ACK를 사용한 우아한 종료(Graceful Shutdown)이 위의 경우
    • RST 를 사용한 종료의 경우는 강제적인 종료다
  • TCP RST 패킷
    • 강제적인 종료 : 포트가 수신중(Listening) 이 아니거나, 현재 과부하(overloading) 상태라는 신호
    • SEQ 필드에 의해서 유효성 검사를 수행해서, 유효할 경우에 연결을 종료한다.
    • 수신자의 상태에 따라 LISTEN 혹은 CLOSED 상태로 전이한다
 <Reset Processing >

  In all states except SYN-SENT, all reset (RST) segments are validated 

  by checking their SEQ-fields.  A reset is valid if its sequence number 
  is in the window.  In the SYN-SENT state (a RST received in response 
  to an initial SYN), the RST is acceptable if the ACK field 
  acknowledges the SYN. 

  The receiver of a RST first validates it, then changes state.  If the 
  receiver was in the LISTEN state, it ignores it.  If the receiver was 
  in SYN-RECEIVED state and had previously been in the LISTEN state, 
  then the receiver returns to the LISTEN state, otherwise the receiver 
  aborts the connection and goes to the CLOSED state.  If the receiver 
  was in any other state, it aborts the connection and advises the user 
  and goes to the CLOSED state. 


보안대책  

  • 패킷 유실 및 재전송 증가를 탐지한다. 

  • 네트워크 트래픽을 감시하여 ACK Storm을 탐지한다. 

  • 데이터 전송시에 암호화 방식을 사용한다. 스니핑이 어렵고 Sequnce Number를 추측하기 어렵게 된다 

  • 지속적인 인증을 통해, 시스템이 로그인 시 패스워드를 한번 입력하고 난 뒤에 일정 시간 후 다시 재인증을 하도록 한다. 

'정보보안' 카테고리의 다른 글

[스텔스 스캔] ACK 스캔  (0) 2019.10.17
[윈도우] 윈도우 운영체제의 관리 공유 (Administrative shares)  (0) 2019.10.08
NAT (Network Address Translation)  (0) 2019.08.20
VPN과 IPSec  (0) 2019.08.19
VoIP 서비스와 공격  (0) 2019.08.16

+ Recent posts