[네트워크 해킹] 05. 세션 하이재킹(Session Hijacking)
TCP Session Hijacking
- 정의 : 정상적인 통신을 하고 있을 때, 공격자가 사용자의 세션을 가로채서 별도의 인증 작업 없이 해당 세션으로 통신을 계속하는 공격 방식
- 공격 원리 : TCP Session Hijacking 공격은 서버와 클라이언트가 통신할 때 TCP Sequence Number를 제어하는데 문제를 이용
정상으로 TCP 프로토콜로 통신을 할 때 :
- TCP 프로토콜 :
1) 3-way handshake : 연결 검증 후 연결
2) 데이터를 주고받음
3) 4-way handshake : 연결을 해제
TCP Session Hijacking 공격 방법
- 공격의 목표 : 공격자는 클라이언트처럼 행동해서 세션을 가져오는 것이 목표이다.
[공격 방법]
1) 서버와 클라이언트가 세션을 맺고 통신을 한다.
- 공격자는 중간에서 스니핑을 하고 있음.
2) 공격자는 중간에서 클라이언트 IP로 서버에 RST(강제 종료)를 보낸다.
- 서버 : 연결이 잠시 끊겼다고 생각
- 클라이언트 : 연결이 끊긴지 모름. 통신이 되지 않으니 계속해서 ACK 응답을 보낸다. 이 상태를 'Ack Storm' 이라고 한다.
3) 공격자는 Seq를 생성해서 서버에 보내고, 서버와 새로운 통신 연결을 맺는다.
4) 공격자는 이후, 클라이언트와 서버와 통신하던 Seq Num을 알고 있기에
- 클라이어언트와 정상적으로 통신
- 서버와도 공격자가 새로 생성한 세션으로 통신
* 참고 : 서버와 클라이언트 통신 시 서버의 Session을 끊는 이유는 서버의 포트는 일정하지만, 클라이언트의 포트는 랜덤하게 생성되기 때문.
조건
1. [ARP Spoofing] 정상적인 통신이 자신을 거쳐서 통과하도록 만들어야 함
2. [IP Spoofing] 공격자는 자신의 IP를 속여서 마치 원래 통신을 하던 호스트인 것 처럼 가장
3. 통신을 모니터링(tcpdump 등을 활용) 하면서 Seq Num, Ack Num의 변화를 정확하게 파악하고 있어야 함.
1) 서버가 보낸 Seq Number = 클라이언트가 보낸 Ack Number
2) 서버가 보낸 Ack Number = 클라이언트가 보낸 Seq Number
실습해보기
준비사항
공격자 | 희생자1 | 희생자2 |
Kali | Windows | CentOS |
192.168.255.128 | 192.168.255.129 | 192.168.255.130 |
- 목표 : hping3 툴을 통해 nc 통신 세션 하이재킹하여 한쪽 세션 끊기
- 사용 툴 : nc, tcpdump, hping3
공격 과정
[ARP Spoofing]
1) 세션 하이재킹 공격 전에 공격자는 arp spoofing 공격으로 스니핑을 한다.
arpspoof 192.168.255.129 -t 192.168.255.130
arpspoof 192.168.255.130 -t 192.168.255.129
fragrouter -B1
2) 윈도우 사용자와 CentOS 사용자가 nc라는 통신 툴을 사용해서 메시지를 주고받는다.
- 희생자1 : Windows 사용자(192.168.255.129)
- 희생자2 : CentOS 사용자(192.168.255.130)
3) 두 클라이언트 간 통신을 Kali에서 tcpdump를 이용해 패킷 내용을 본다.
- 공격자 : Kali (192.168.255.128)
# tcpdump -i eth0 tcp port 7777 -S -n -nn
- tcpdump를 통해서 패킷의 포트, 패킷 세그먼트 순서, 플래그 등과 같은 정보를 확인하고, 다른 한쪽의 세션을 끊는다.
- 그러면 한쪽은 연결이 완전히 끊기지만, 다른 한쪽은 끊겼는지 모르고 통신이 계속되는 줄 안다.
# hping3 -a [위장할 IP] [victim IP] -s [src_port] -p [dst_port] -M [seq_num] -L [ack_num] -R -c 1
[공격 결과]
- 희생자1 : Windows 사용자(192.168.255.129)
세션이 강제 종료됨. 하지만 정상적으로 세션이 끊긴 줄 안다.
- 희생자2 : CentOS 사용자(192.168.255.130)
세션이 끊겼는지 모른다.
그래서, 공격자가 메시지를 보내면 정상적인 세션으로 메시지가 보내진 줄 안다.
대응방법
1) 패킷 유실 및 재전송 증가 패킷을 탐지
- 중간자가 있기 때문에 패킷 유실과 재전송 패킷이 늘어나며 응답 시간이 길어진다. 이를 탐지한다.
2) 네트워크 트래픽에서 'ack storm'을 감시
- 클라이언트와 서버 간에 패킷의 순서(sequence number)를 맞추기 위해 ack 패킷을 보내는 과정에서 무한 루프에 걸려서 ack패킷의 양이 증가한다.
3) 데이터 전송 시 암호화를 사용
- 암호화 시 데이터에 대한 sequence number를 추측하기 어려워진다.
4) 지속적인 인증
- 한번 인증 후에는 별도의 인증과정이 없기 때문에 특정 행동을 하거나 일정 시간이 지나면 재인증 요청한다.