세션 하이재킹은 '세션 가로채기'라는 의미다.
세션은 '사용자와 컴퓨터, 또는 두 컴퓨터 간의 활성화 상태'를 말한다.
1. TCP 세션 하이재킹
TCP 세션 하이재킹은 서버와 클라이언트가 통신할 때 TCP의 시퀀스 넘버를 제어하는 데 문제점이 있음을 알고 이를 파고든 공격이다.
Non-Blind Attack과 Blind Attack이 있다.
Non-Blind Attack : 공격 대상을 탐지할 수 있으며 서버와 클라이언트가 통신할 때 시퀀스 넘버를 알아낼 수 있다
Blind Attack : 서버와 클라이언트가 통신할 때 시퀀스 넘버를 알 수 없다. 즉, 찍어야 한다.
- 개념
클라이언트와 서버 간의 통신을 관찰할 수 있을 뿐만 아니라 텔넷, FTP 등 TCP를 이용한 거의 모든 세션을 갈취하는 것이 가능하다.
또한 인증에 관한 문제를 해결하기 위해 도입된 일회용 패스워드, 토큰 기반 인증을 이용한 세션 갈취도 가능하다.
- TCP의 시퀀스 넘버 교환
명칭 |
설명 |
Client_My_Seq |
클라이언트가 관리하는 자신의 시퀀스 넘버 |
Client_Server_Seq |
클라이언트가 알고 있는 서버의 시퀀스 넘버 |
Server_My_Seq |
서버가 관리하는 자신의 시퀀스 넘버 |
Server_Client_Seq |
서버가 알고 있는 클라이언트의 시퀀스 넘버 |
Data_Len |
데이터의 길이 |
시퀀스 넘버에 따른 TCP 연결 상태는 동기화와 비동기화 두 가지다.
정상적인 접속일 경우 시퀀스 넘버는 동기화 상태에 있으며, 클라이언트가 가진 시퀀스 넘버를 서버가, 서버가 가진 시퀀스 넘버를 클라이언트가 정확히 알고 서로 일치한다.
① 연결이 되기 전 클라이언트의 포트는 Closed 상태
서버는 서비스를 제공하기 위해 기다리는 Listen 상태
② 클라이언트는 32비트 숫자 중 임의의 숫자( Client_My_Seq )를 생성하여 서버에 SYN 패킷을 보냄
서버는 클라이언트가 보낸 Cient_My_Seq 값을 읽어 Server_Client_Seq 값으로 저장
이때 클라이언트는 SYN_Sent 상태
③ 서버는 Server_My_Seq 값을 생성하고, Server_Client_Seq에 패킷의 길이만큼 더해 클라이언트로 보냄
여기서 데이터는 0이므로, 단지 +1 이라고만 표시
이때 서버는 SYN_Received 상태
클라이언트는 Server_Client_Seq+1 을 받음
자신의 Client_My_Seq와 비교하고 일치하면 Server_My_Seq 값을 Client_Server_Seq 값으로 저장
④ 클라이언트는 Client_Server_Seq+1을 서버에 보내고 Established 상태
서버는 클라이언트가 보낸 Client_Server_Seq+1과 Server_My_Seq와 비교 일치하면 Established 상태
이렇게 동기화가 되면 다음과 같은 상태가 된다.
Client_My_Seq = Server_Client_Seq
Server_My_Seq = Client_Server_Seq
- 비동기화 상태
TCP 세션 하이재킹은 동기화 상태를 무너뜨리는 것에서 시작한다. 즉, 서버와 클라이언트를 비동기화 상태로 만들어야 한다.
① 데이터가 전송되기 전까지는 안정적인( stable ) 상태
Client_My_Seq ≠ Server_Client_Seq
Server_My_Seq ≠ Client_Server_Seq
② 데이터가 전송될 때는 다음과 같은 상태의 데이터가 차후 사용을 위해 저장되지만 클라이언트에 서버의 승인 번호는 전달되지 않음
Server_Client_Seq < Client_My_Seq
Clinet_My_Seq < Server_Clinet_Seq + Data_Len
③ 패킷 수신이 불가능한 상태로, 데이터도 버려짐
Server_Client_Seq + Data_Len < Clinet_My_Seq
Client_My_Seq < Server_Client_Seq
- 비동기화 상태로 만드는 방법
> 서버에서 초기 설정 단계의 접속을 끊고 다른 시퀀스 넘버로 새로 접속을 생성
> 대량의 널( Null )데이터를 보냄
- 새로운 접속 생성하기
TCP를 이용한 세션은 네 가지 요소( 클라이언트의 IP 주소와 포트번호, 서버의 IP 주소와 포트번호 )로 이루어짐
먼저 서버와 클라이언트가 각자 알고 있는 시퀀스 넘버를 조작해서 속인 후 다음과 같은 상황을 만든다.
> 클라이언트측
Client_My_Seq = 공격자가 생성한 Server_Client_Seq
Client_Server_Seq = 공격자가 생성한 Server_My_Seq
>서버측
Server_Client_Seq = 공격자가 생성한 Client_My_Seq
Server_My_Seq = 공격자가 생성한 Client_Server_Seq
① 클라이언트는 서버와 모두 접속되어 있는 Establised 상태
공격자는 적절한 시퀀스 넘버를 획득하기 위해 스니핑
② 공격자는 공격하려는 시점에 세션이 완전히 끊어지지 않는 시퀀스 넘버의 범위에서 RST 패킷을 서버에 보냄
서버는 잠시 Closed 상태
클라이언트는 그대로 Established 상태
③ 공격자는 A_Client_My_Seq를 생성하여 서버에 보냄
④ 서버는 새로운 A_Client_My_Seq를 받아들이고, Server_My_Seq를 재생성해 공격자에게 보냄
서버는 SYN_Received 상태
⑤ 공격자는 정상 연결처럼 서버와 시퀀스 넘버를 교환하고, 공격자와 서버 모두 Established 상태가 된다.
원래의 클라이언트는 이 단계까지도 Established 상태
서버의 네트워크 상태로 인한 잠시 동안의 연결 문제로 인식
연결은 끊어졌지만 인증 세션은 열린 상태
⑥ 공격자는 공격 전 클라이언트가 서버와 통신을 하던 시퀀스 넘버를 모두 알고 있는 상태
클라이언트와 정상적으로 통신
서버와 공격자가 새로 생성한 시퀀스 넘버를 가지고 통신
'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글
[Network Hacking] MITM (0) | 2017.05.01 |
---|---|
[Network Hacking] 스푸핑 공격 (0) | 2017.04.30 |
[Network Hacking] 스니핑 (0) | 2017.04.30 |
[Network Hacking] TCP 스캔 (0) | 2017.04.30 |
[Network Hacking] ICMP스캔 (0) | 2017.04.30 |