1) TCP 세션 하이재킹
TCP 세션 하이재킹은 트러스트를 이용한IP 스푸핑에서의 공격 개념과 크게 다르지 않다. 하지만TCP 세션 하이재킹은Client와 서버간의 통신을 관찰할 수 있을 뿐만 아니라 트러스트를 이용한 세션은 물론Telnet, FTP등TCP를 이용하는 세션을 갈취가 가능하다.
2) TCP 세션 하이재킹 공격 환경
TCP 세션 하이재킹 공격 환경을 알기 위해서는 TCP 3 – Way Handshaking에서 정상적인TCP Sequence Number의 교환과Established상태에 대해 알아야 한다. 먼저 다음 표를 잘 기억해 둔다.
명 칭 |
설 명 |
Client_My_Seq |
클라이언트가 관리하는 자신의 Sequence Number |
Client_Server_Seq |
클라이언트가 알고 있는 서버의 Sequence Number |
Server_My_Seq |
서버가 관리하는 자신의 Sequence Number |
Server_Client_Seq |
서버가 알고 있는 클라이언트의 Sequence Number |
Data_Len |
데이터의 길이 |
정상적인 접속이 유지되기 위해서는 서버와 클라이언트가 서로의 Sequence Number를 올바르게 알고 있어야 한다. 이러한 생태를 동기화 상태라고 한다.
서버와 클라이언트가 동기화된 Sequence Number를 가지려면 다음과 같은 과정을 거친다.
|
① 연결하기 전 클라이언트의 포트는Closed 상태며, 서버는 서비스를 제공하기를 기다리고 있으므로Listen 상태이다.
② 클라이언트는32비트의 숫자 중 임의의 숫자(Client_My_Seq)를 생성하여 서버에게 SYN 패킷을 보내며, 서버는 클라이언트가 보낸Client_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 세션 하이재킹은 위의 상태를 무너뜨리는 것에서 시작한다. TCP 세션 하이재킹은 먼저 서버와 클라이언트가 각자아는 Sequence Number를 조작해서 속인 뒤 다음과 같은 상황을 만든다.
[클라이언트 측]
Client_My_Seq = 공격자가 생성한Server_Client_Seq
Client_Server_Seq = 공격자가 생성한Server_My_Seq
[서버 측]
Server_Client_Aeq = 공격자가 생성한Client_My_Seq
Server_My_Seq = 공격자가 생성한Client_Server_Seq
3) TCP 세션 하이재킹 공격 방법
- 공격자가 생성한 패킷에는A붙여 구분 한다.
TCP 세션 하이재킹 공격은 다음과 같다.
|
① 클라이언트는 서버와 접속되어 있는 상태로 모두Established 상태며, 공격자는 적절한 Sequence Number 획득하기 위해 스니핑을 하고 있다.
② 공격자는 공격하려는 시점에서 세션이 완전히 끊기지 않는 Sequence Number의 범위에서RST 패킷을 생성하여 서버에게 보낸다. 서버는 잠시Closed상태가 된다. 그러나 클라이언트는 Established 상태이다.
③ 공격자는A_Client_My_Seq를 생성하여 서버로 보낸다.
④ 서버는 새로운A_Client_My_Seq를 받아들이고, Server_My_Seq를 재 생성하여 공격자에게 보낸 후SYN_Received 상태가 된다.
⑤ 공격자는 정상적인 연결처럼 서버와 Sequence Number를 교환하고, 공격자와 서버 모두 Established 상태가 된다. 원래의 클라이언트도 이 단계까지도 Established 상태이며, 서버가 네트워크 문제로 인한 잠시 동안의 연결 문제처럼 받아들이며, 연결은 끊어졌지만 인증 세션은 열려 있는 상태이다.
⑥ 격자는 공격 전 클라이언트가 서버와 통신을 하던 Sequence Number를 모두 알고 있는 상태므로 클라이언트와 정상적으로 통신을 하며, 서버와는 공격자가 새로 생성한 Sequence Number를 가지고 통신을 한다.
※ 공격자가 서버와 연결을 끊고 다시 연결을 시도하는 동안 클라이언트?
- 공격자가 서버와 연결을 끊고 다시 연결을 시도하는 동안 클라이언트는 정상적인 패킷을 서버로 보낸다. 하지만 서버는 정상적이지 않은Sequence Number로 인식하여, ACK 패킷에Server_My_Seq와Server_Client_Seq를 담아 보낸다. 이 작업은Sequence Number를 맞추기 위한 작업이다. 그러나 클라이언트 역시 서버가 보낸Server_Client_Seq가 자신의Client_My_Seq과다르다는 것을 확인하고, 서버에게Client_My_Seq와Client_Server_Seq가 담긴ACK패킷을 보낸다. 이러한 과정이 무한히 반복되는 경우가 있는데, 이를 ‘ACK Storm”이라고 한다.
※ 공격자가 서버가 아닌 클라이언트측에 연결을 끊었다 다시 연결하면 공격이 성공할까?
- 이 공격방법은 성공할 수 없는 공격이다. 그 이유는 우선 서버는 포트 번호가 일정하여 연결의 재 설정이 쉬우나 클라이언트는 랜덤 하게 포트 번호가 설정되기 때문에 연결의 재 설정이 어렵다. 또한, 클라이언트에는 인증 세션이 존재 하지 않기 때문에 사실상 아무 의미가 없는 공격이다.
4) 보안 대책
- 패킷의 유실 및 재 전송 증가를 탐지한다. 공격자가 중간에 끼어서 작동하므로 패킷의 유실과 재 전송이 발생하여 서버와의 응답 시간이 길어진다.
- 네트워크 트래픽을 감시하여ACK Storm을 탐지한다. 위에서 말했듯이 클라이언트와 서버는 정확한 Sequence Number를 맞추기 위해 서로ACK패킷을보내는 과정에서 무한 루프에 걸리게 된다. 결국ACK패킷의 비율이 급격하게 증가 한다.
- 데이터 전송할 때 암호화 방식을 사용한다. 데이터 전송의 암호화는 스니핑에 대한 대응책이 되기도 한다. 데이터 전송할 때 암호화를 하면 Sequence Number를 추측하기 어렵게 된다.
- 지속적인 인증(Continuous Authentication)을 한다. 지속적인 인증이란 대부분의 시스템이 로그인 시 패스워드를 한 번 입력하고 난 뒤에 다시 재 인증을 거치는 과정을 거치지 않는데, 어떤 특정한 행동을 하거나 일정 시간이 되면 다시 패스워드 등을 물어 접속자가 정당한 인증을 받은 유요한사용자 인지 확인하는 것이다.
[Wireless] 숨긴 SSID 확인 (0) | 2014.01.27 |
---|---|
SSL (Secure Socket Layer) (0) | 2014.01.27 |
야후 웹 서버 Remote Command execution (원격 명령 실행) 취약점 보고서 (0) | 2014.01.27 |
[랜섬웨어] Crypto Locker 변종 분석보고서 (HSHC) (0) | 2014.01.24 |
[KISA] 모바일 오피스 정보보호 안내서 발간 (0) | 2014.01.21 |