네트워크/네트워크 보안

TCP Session Hijacking

비니화이팅 2018. 2. 5. 11:44

* 세션

- 두 대의 컴퓨터 간의 활성화된 상태를 말한다.


* TCP 세션 하이재킹

-> 개념

- TCP가 가지는 고유한 취약점을 이용해 세션을 가로채는 공격이다.(즉, 로그인된 상태를 가로챈다.)


-> 원리

- TCP는 시퀀스 넘버가 잘못되면 이를 바로잡기 위한 작업을 하는 데, 이를 이용한다.

- 서버와 클라이언트에 각각 잘못된 시퀀스 넘버를 위조해서 연결된 세션에 혼란을 준 뒤 자신이 끼어들어가는 방식이다.


1. 공격자는 ARP Spoofing을 이용하여 서버와 클라이언트 사이에서 패킷을 스니핑하고 있다가 서버에  RST패킷을 보내 서버쪽 연결을 끊는다.

2. 그 후 공격자는 새로운 시퀀스 넘버를 생성하여 서버로 보낸다.

4. 서버는 새로운 시퀀스 넘버를 받고 다시 세션을 연다. 

5. 공격자는 정상적인 연결처럼 서버와 시퀀스 넘버를 교환하고 공격자와 서버 모두 Established상태가 된다.



* ACK Storm

- 클라이언트에서 다시 TCP 세션 연결을 시도해도 이미 세션 하이재킹이 되었기 때문에 세션 연결이 이루어지지 않는다.

- 클라이언트가 계속 ACK을 보내도 서버에서 공격지에 거쳐 계속 ACK만 왕래하는 현상이다.



[실습 1]

- 실습을 진행하기 전에 아래와 같은 토폴로지를 구성한다.

 -> 실습 환경

 - WinXP(Victim)

 - BT(Attacker)

 - R1(Telnet Server)


 -> 실습 도구

 - hunt


- 먼저 스니핑하기 위해 ARP Spoofing을 진행해준다. 클라이언트에게 Attacker 자신이 Telnet Server라고 속인다.


- 포워딩 해준다.


- hunt를 실행시킨다. 


- XP에서 Telnet Server에 접속한다.


- 먼저 세션이 연결된 list를 확인한다.


- reset하기위해 r을 선택한다.


- 해당 세션 번호를 선택한다.


- 둘다 할 것이기 때문에 b를 선택한다.


- XP에서 세션이 끊어진 것을 확인할 수 있다.



- 이번에는 도청을 해본다.


- w을 선택한다.


- 번호를 선택한다.


- XP에서 어떤 명령어를 실행하는지 확인이 가능하다.



- 이번에는 세션을 가로채본다,


- s를 선택하고 0번, b를 선택해주었다.


- XP에서 입력한 명령어가 그대로 Attacker에게 그대로 표시되었다.


- 원하는 시점에서 Ctrl+C키를 눌러 하이재킹을 시도한다.


- 다음과 같이 Attacker가 원하는 명령어를 실행할 수 있다.



[실습 2]

- 토폴로지는 [실습 1]과 동일하다.

 -> 실습 환경

 - WinXP(Victim)

 - BT(Attacker)

 - CentOS(Telnet Server)


 -> 실습 도구

 - hunt


- hunt를 실행시킨다.


- XP에서 Telnet Server로 접속한다.


- 스니핑하기 위해 ARP Spoofing을 진행해준다. Victim에게 공격자 자신이 Telnet Server라고 속인다.


- 포워딩 해준다.


- s를 선택한다.


- 아래와 같이 도청이 가능하다.


- 이유는 모르겠지만 Telnet Server가 CentOS에서 동작하고 있을 때는 s를 선택했을 시 도청만 가능하다.



* 대응법

1. 취약한 프로토콜인 텔넷을 이용하는 대신 SSH와 같이 세션에 대한 인증수준이 높은 프로토콜을 이용해야한다.

2. 클라이언트와 서버 사이에 MAC주소를 고정시켜 준다. (ARP Spoofing)

3. 지속적인 인증을 요구한다.