[네트워크] 컴퓨터 네트워크

[네트워크] 스니핑 공격 툴 - TCP Dump (실습)

ITsubin 2022. 9. 18. 16:27

[ 1) TCP Dump ]

> Linux에서 가장 기본이 되는 강력한 스니핑 도구

> 처음에는 네트워크 관리를 위해 개발되었기 때문에 관리자 느낌이 강함

> *Snort라는 *IDS의 기반 도구

> TCP Dump로 획득한 증거 자료는 법적 효력이 있음

 

   * Snort?

    > 리눅스에서 작동하는 *NIDS (최근에는 Windows에서도 구동 가능)

 

   * IDS?

    > 침입 탐지 시스템(Intrusion Detection System)

    > 방화벽이 막을 수 없거나 차단에 실패한 공격을 탐지하여 관리자에게 알려주는 역할

 

   * NIDS?

    > Network Intrusion Detection System, 네트워크 침입 탐지 시스템

 

[ 실습 - TCP Dump로 계정 및 패스워드 스니핑 ]

 

> 실습 환경 :

    - Host A (Client) : Ubuntu Desktop (Ubuntu 20.04 LTS)

    - Host B (Server) : Kali Linux (Kali GNU/Linux Rolling)


1) TCP Dump 설치

Host A에서 TCP Dump를 아래와 같은 명령으로 설치합니다.

sudo apt-get install tcpdump

2) TCP Dump 실행

Host A에서 TCP Dump를 아래와 같은 명령으로 실행합니다.

sudo tcpdump -i [NIC이름] -xX host [통신상대주소]

( i 옵션 : Interface 지정 )

( xX 옵션  : 각 패킷 값을 Hex코드와 ASCII코드 형태로 출력 )

( host 옵션 : 통신 상대 지정 )

 

( 위 명령에 들어갈 NIC 이름은 명령을 실행하는 해당 OS의 NIC 이름입니다 )

저는 통신상대 (서버, Kali)의 주소가 192.168.100.132이기 때문에 아래와 같이 명령을 사용하겠습니다.

sudo tcpdump -i ens33 -xX host 192.168.100.132

( -i ens33 : 패킷을 수집할 인터페이스를 ens33으로 지정 )

( -xX : 각 패킷 값을 Hex Code와 ASCII Code로 출력 )

( host 192.168.100.132 : host 192.168.100.132와의 통신 패킷을 수집 )


3) 텔넷 접속

 

이제 Host B에서 Host A로 Telnet 접속을 해줍니다.

telnet [서버IP]

저는 연결하고자 하는 서버(Host A)의 IP가 192.168.100.138로 되어있기 때문에, 아래와 같이 명령을 사용하겠습니다.

telnet 192.168.100.138

 

오류: [  telnet: Unable to connect to remote host: Connection refused  ]

만약 위와 같은 오류가 나올 시, 텔넷 서버 (Host A)의 포트가 오픈상태인지 확인해줘야 합니다.

nmap 명령어로 포트스캔 시 tcp 23번의 telnet 포트가 아래의 예시처럼 open상태(state)여야 합니다.

┌──(root㉿kali)-[~/Desktop]
└─# nmap 192.168.100.138

( ... )

PORT   STATE SERVICE
23/tcp open  telnet

 

( 아래의 방법들로 telnetd 먼저 업그레이드하는 것을 추천드립니다 )

 

sudo apt-get install telnetd
sudo apt-get upgrade telnetd

4) 텔넷 패킷 분석

 

아래처럼 특정 파일에 결과를 리다이렉션하여 해당 파일을 편집기(vi나 nano 등)로 열어서 보면 보다 편합니다.

sudo tcpdump -i ens33 -xX host 192.168.100.132 >> tcpdump_logfile

 

아래의 예시 패킷에서는 user-vm.login 이 보입니다.

(user-vm은 제 hostname입니다. 프롬프트 혹은 hostnamectl 명령어로 hostname을 확인할 수 있습니다.)

 

아이디 입력 요청 패킷

해당 패킷은 아이디 입력을 요청하는 패킷입니다.

해당 패킷 아래의 패킷들을 찾아보면 클라이언트에서 서버로 ACK 를 전송하는 패킷,

아이디의 글자단위로 클라이언트에서 서버, 서버에서 클라이언트로 전송되는 패킷들을 확인할 수 있습니다.

 

아래의 패킷은 Password를 요청하는 패킷입니다.

패스워드 입력 요청 패킷

해당 패킷 아래의 패킷들을 찾아보면 역시 마찬가지로 패스워드의 글자단위로 클라이언트와 서버가 패킷을 주고받습니다.