세션 하이재킹
사용자와 컴퓨터, 또는 두 컴퓨터 간의 활성화 상태인 세션(Session) 가로채기
TCP 세션 하이재킹
서버와 클라이언트 통신 시 TCP의 시퀀스 넘버를 제어하는 데 발생하는 문제를 공격하는 것
서버와 클라이언트가 TCP를 이용해 통신하고 있을 때 RST 패킷을 보내 일시적으로 TCP 세션 끊고 시퀀스 넘버를 새로 생성해 세션 빼앗고 인증 회피하는 것
서버와 클라이언트간의 통신을 관찰할 수 있을 뿐 아니라 트러스트를 이용한 세션은 물론 텔넷, FTP 등 TCP를 이용한 거의 모든 세션을 갈취하는 것이 가능함. 인증에 관한 문제를 해결하기 위해 도입된 일회용 패스워드, 토큰 기반 인증을 이용한 세션갈취도 가능
Non-Blind Attack(로컬 세션 하이재킹 공격) : 공격대상 탐지 가능하고 서버와 클라이언트가 통신할 때 시퀀스 넘버 알아낼 수 있음
Blind Attack(원격 세션 하이재킹 공격) : 공격대상 탐지 불가능하고 서버와 클라이언트 간의 시퀀스 넘버를 그냥 찍어야 함.. 성공 확률이 낮음.
시퀀스 넘버 : 32비트 숫자(0~4,294,967,295)로 이 중에서 아주 작은 숫자의 범위(약 1,000단위)를 눈감고 맞힐 확률은 0.0001%도 되지 않음
TCP 시퀀스 넘버 교환
TCP 쓰리웨이 핸드셰이킹(Three-Way Handshaking)에서의 정상적인 TCP 시퀀스 넘버 교환과 Established의 상태
명칭 | 설명 |
Client_My_Seq | 클라이언트가 관리하는 자신의 시퀀스 넘버 |
Client_Server_Seq | 클라이언트가 알고 있는 서버의 시퀀스 넘버 |
Server_My_Seq | 서버가 관리하는 자신의 시퀀스 넘버 |
Server_Client_Seq | 서버가 알고 있는 클라이언트의 시퀀스 넘버 |
Data_Len | 데이터 길이 |
시퀀스 넘버에 따른 TCP 연결상태는 동기화(Synchronized)와 비동기화(Desynchronized) 두 가지
정상적인 접속인 경우 시퀀스 넘버는 동기화 상태(클라이언트가 가진 시퀀스 넘버를 서버가, 서버가 가진 시퀀스 넘버를 클라이언트가 정확히 알고 서로 일치하는 상태). 서버와 클라이언트의 시퀀스 넘버를 동기화 하려면 쓰리 웨이 핸드셰이킹 과정이 필요하다.
- 연결 되기 전 클라이언트 포트는 Closed 상태이며, 서버는 서비스 제공 위해 기다리는 Listen 상태
- 클라이언트는 32비트 숫자 중 임의의 숫자(Client_My_Seq)를 생성해 서버에 Syn 패킷 보냄. 서버는 클라이언트가 보낸 Clinet_My_Seq 값을 읽어 Server_Client_Seq값으로 저장함. 이때 클라이언트는 Syn_Sent 상태가 됨.
- 서버는 Server_My_Seq 값 생성하고, Server_Client_Seq에 패킷 길이만큼 더해서 클라이언트로 보냄. 여기서 데이터는 0이므로, 단지 +1이라고만 표시. 이때 서버는 Syn_Received 상태가 되며, 클라이언트는 Sever_Client_Seq+1을 받아 자신의 Client_My_Seq와 비교하고 일치하면 Server_My_Seq 값을 Client_Server_Seq 값으로 저장함.
- 클라이언트는 Client_Server_Seq+1을 서버에 보내고 Established 상태(확립 상태)가 됨. 서버 역시 클라이언트가 보낸 Client_Servder_Seq+1과 자신의 Server_My_Seq와 비교하여 일치하면 Established 상태가 됨.
이렇게 동기화 하면 다음과 같은 상태가 됨.
- Clinet_My_Seq = Server_Client_Seq
- Server_My_Seq = Client_Server_Seq
비동기 상태
TCP 세션 하이재킹은 동기화 상태를 무너뜨리는 것에서 시작함. 즉 서버와 클라이언트를 비동기화 상태를 만들어야 함. 비동기화 상태는 세 가지로 나뉨
- 데이터가 전송되기 전까지는 안정적인(stable) 상태
- 데이터가 전송될 때는 다음과 같은 상태의 데이터가 차후 사용을 위해 저장되지만 클라이언트에서 서버의 승인번호는 전달되지 않음
- 패킷 숫니이 불가능한 상태, 데이터도 버려짐
비동기화 상태로 만드는 방법
- 서버에 초기 설정 단계의 접속 끊고 다른 시퀀스 넘버로 새로운 접속 생성하는 것.
- 대량의 Null 데이터 보내는 방법 => 예측할 수 없는 결과를 낳기도 하고, 성공 확률도 낮음
새로운 접속 생성하기
TCP 이용하는 세션 4가지 요소 : 클라이언트 IP 주소와 포트 번호, 서버의 IP 주소와 포트 번호
IP 주소와 포트 번호가 같은 세션이 두 개 존재하면 시퀀스 넘버가 일치하는 쪽에 우선권이 있음.
'보안' 카테고리의 다른 글
(번역) 대규모 NDSW/NDSX 악성코드 캠페인 분석 (0) | 2023.08.12 |
---|---|
Shijack 보고서 (0) | 2022.01.03 |