세션이란 서버와 클라이언트 간의 일정 기간 동안의 연결 상태를 의미하며, 보통 웹 사이트에서는 세션 ID를 통해 세션을 유지하고, TCP에서는 세션을 유지하기 위해 시퀀스 넘버, ACK, 소스 및 목적지 IP, Port, TCP 플래그 등을 사용한다.
공격자는 클라이언트가 서버에게 보내는 패킷을 중간에서 탈취한 후, 패킷의 세션 정보들을 이전 패킷과 자연스럽게 연결해 자신이 클라이언트인 것처럼 서버로 데이터를 전송하고, 클라이언트에게는 RST 패킷을 보내 세션을 강제로 종료시켜버린다.
이렇게하면 클라이언트는 서버와의 접속이 끊어지고 서버는 여전히 같은 세션 정보를 통해 데이터를 전송받기 때문에 의심없이 공격자를 클라이언트로 생각하고 데이터를 주고받게 된다.
| 역할 | OS | IP | MAC |
|---|---|---|---|
| 타겟 | Rocky9 | 192.168.5.40 | 00:0c:29:b2:33:f3 |
| 서버 | CentOS7 | 192.168.5.130 | 00:0c:29:5d:93:fa |
| 해커 | KALI | 192.168.5.220 | 00:0c:29:c6:4e:5d |
fragrouter는 사용자에게 받은 패킷을 서버로 forwarding해주는 역할을 한다.
터미널 한 쪽에서 fragrouter -B1을 입력해 서버로 전송할 준비를 한다.
명령어 :
fragrouter -B1
- -B1 : 일반 IP 패킷 forwarding

이제 arpspoof 명령어로 타겟의 MAC 테이블에 등록된 서버의 MAC 주소를 해커의 MAC 주소로 변경한다.
명령어 :
arpspoof -i eth0 -t [타겟 IP] [서버 IP]
- -i : 랜카드
- -t : 타겟 IP 지정

공격이 성공하면 타겟이 서버로 보내는 모든 패킷이 해커에게 전송된다.
- 공격 전 타겟의 MAC 테이블
- 공격 후 타겟의 MAC 테이블
해커의 MAC주소와 서버의 MAC 주소가 동일해진 것을 볼 수 있다.
동일하게 서버에도 공격을 수행한다.

tcpdump 명령어는 와이어샤크의 기반이되는 프로그램으로 네트워크 패킷을 캡처할 수 있다.
명령어 :
tcpdump -i eth0 tcp and host [타겟 IP]
- -i : 랜카드
- tcp : tcp 패킷.
- host : 출발지, 목적지가 특정 호스트인 패킷.
위 명령어를 사용하면 특정 타겟에게 오고가는 tcp 패킷만 필터링해서 볼 수 있다.
명령어를 입력하고 타겟에서 서버로 telnet 접속.

IP : 192.168.5.40, Port : 46878
접속 시 tcpdump에 패킷 정보가 올라온다. 여기서 확인해야할 것은 Port 번호이다. 클라이언트가 사용하는 포트를 동일하게 사용해야 하기 때문에 tcpdump를 통해 port 번호를 확인하는 것.
shijack 다운 > 압축 해제 후 shijack 디렉토리로 이동.
명령어
./shijack [interface] [src_IP] [src_port] [dst_IP] [dst_port]

명령어를 입력하면 패킷을 캡처할 준비를 한다. 이 상태에서 타겟이 서버로 데이터를 보내게되면,

Got packet! ~~~ from now on is sent to the hijacked TCP connection. 구문이 출력되면서 세션을 탈취해온다.
테스트를 위해 mkdir 명령어를 사용해 디렉토리 생성.

서버의 /home/user10 경로를 확인해보면 hacked 디렉토리가 생성된 것을 볼 수 있다.


wireshark에서 tcp stream을 확인해보면 타겟에서 입력한 정보와 공격자에서 입력한 데이터가 자연스럽게 섞여있다.
하이재킹 공격은 당했는지 알아채기 힘들기 때문에 사전에 확실하게 대비해야 한다.
TCP 하이재킹의 원리가 패킷을 중간에 가로채 해당 패킷의 정보를 통해 세션을 탈취하는 것이다. 그런데 보안 프로토콜을 사용하면 탈취한 패킷의 정보를 확인할 수 없기 때문에 하이재킹 공격을 자연스럽게 차단하게 된다.
TCP 하이재킹 공격을 수행하기 위해서는 시퀀스 넘버를 정확히 예측해야한다. 때문에 시퀀스 넘버를 난수화하게 되면 TCP 하이재킹 공격을 수행하기 어려워진다.
최신 운영체제와 네트워크 장비에서는 자동으로 시퀀스 넘버 난수화를 지원하기 때문에 운영체제 또는 네트워크 장비를 최신으로 유지하는 것이 좋다.
모든 TCP 하이재킹 공격이 동일하진 않겠지만 현재 포스트에서는 하이재킹 공격을 위해 arp spoofing 공격을 사용해 패킷을 캡처했다. 이를 차단하기 위해 스위치와 클라이언트의 MAC 주소를 정적으로 설정해 패킷이 탈취당하지 않도록 설정한다.
스위치 static 설정
SW(config)mac-address-table static [MAC_addr] [vlan_number] [interface]
리눅스 static 설정
arp -s [목적지 IP]