[해킹 이론] TCP 세션 하이재킹
관련이론
- 세션 하이재킹(Session HiJacking) : 사용자와 컴퓨터, 또는 두 컴퓨터간의 활성화된 상태인 세션을
가로채어 공격자가 모든 작업을 감시하거나 제어할 수 있게 하는 공격 기법
- TCP 세션 하이재킹 : 현재 활성화 되어있는 TCP 세션의 Sequence Number를 알아내 RST 신호를
이용하여 강제로 리셋 시킨 후 공격을 시도하는 방법
ㆍTCP 세션 하이재킹의 두가지 방법
(1) Non-Blind-Attack(로컬 세션 하이재킹) : 서버와 클라이언트가 통신할 때 시퀀스 넘버를 알아낼 수
있어 공격 대상을 탐지 할 수 있다.
(2) Blind-Attack(원격 세션 하이재킹) : 서버와 클라이어트가 통신할 때 시퀀스 넘버를 알아낼 수 없어
시퀀스 넘버를 추측하여야 하기 때문에 성공 확률이 낮음.
ㆍ TCP 시퀀스 넘버 정의
① Client_My_Seq : 클라이언트가 관리하는 자신의 시퀀스 넘버
② Client_Server_Seq : 클라이언트가 알고 있는 서버의 시퀀스 넘버
③ Server_My_Seq : 서버가 관리하는 자신의 시퀀스 넘버
④ Server_Client_Seq : 서버가 알고있는 클라이언트의 시퀀스 넘버
⑤ Data_Len : 데이터의 길이
ㆍ 시퀀스 넘버에 따른 TCP 연결 상태
① 동기화 상태 : 정상적인 접속일 경우 클라이언트와 서버가 서로의 시퀀스 넘버를 정확히 알고 서로 일치한다.
* Client_My_Seq = Server_Client_Seq
* Server_My_Seq = Client_Server_Seq
② 비동기화 상태로 만드는 방법
1. 서버에서 초기 설정 단계의 접속을 끊고 다른 일련번호로 새로운 접속을 생성
2. 대량의 널(null) 데이터를 보내 비동기화시키는 것
ㆍ 새로운 접속 생성하기
먼저 서버와 클라이언트가 각자 아는 시퀀스 넘버를 조작해서 속인 뒤 다음과 같은 상황을 만든다.
Client_My_Seq = 공격자가 생성한 Server_Client_Seq
Client_Server_Seq = 공격자가 생성한 Server_My_Seq
Server_My_Seq = 공격자가 생성한 Client_Server_Seq
Server_Client_Seq = 공격자가 생성한 Client_My_Seq
- TCP 세션 하이재킹의 과정을 정리 하면
1. 클라이언트와 서버가 서로 연결되어 있으며 공격자는 적절한 시퀀스 넘버를 획득하기 위해 스니핑을 진행 중
2. 공격자는 연결되어 있는 세션에 완전히 끊어지지 않는 범위의 RST 패킷을 보내 서버를 Close 상태로 만든다.
(이때, 클라이언트는 연결 상태 즉, 서버만 close 되어있는 상태)
3. 공격자는A_Client_My_Seq를 생성하여 서버에 보냄
4. 서버는 신규 A_Client_My_Seq를 받아들이고, Server_My_Seq를 재생성하여 공격자에게 보낸 후 Syn_Received 상태
5. 공격자는 정상 연결처럼 서버와 시퀀스 넘버를 교환하고, 공격자와 서버 모두 Established 상태. 원래의 클라이언트는
여전히 Established 상태고 서버의 네트워크 상태로 인한 잠시 동안의 연결 문제로 받아들임.