일일 정리

패킷 분석 실습 서버 구축, Wireshark, 패킷의 이해

mysecurity 2025. 4. 9. 00:46

목차

1. 패킷 분석 실습 서버 구축

1-1 칼리 리눅스 설치

1-2 CentOS 7 설정

 

2. Wireshark 

2-1 와이어샤크 설치

2-2 와이어샤크 실행

 

3. 패킷의 이해

3-1 Link Layer 구조

3-2 Network Layer 구조

 

 

1. 패킷 분석 실습 서버 구축

패킷 분석 실습 서버 구축을 위해 다양한 OS로 NAT 영역에 다음과 같이 서버를 구성한다. 

 

Kali linux         : 192.168.11.36 / 24  (공격자)
windows XP    : 192.168.11.7  / 24

windows 10     : 192.168.11.7  / 24

CentOS 7        : 192.168.11.17  / 24

Rocky linux 8  : 192.168.11.17  / 24

 

1-1 칼리 리눅스 설치

● 기본작업

칼리 리눅스 공식 홈페이지에서 설치 가능하다.

 

기본 ip/pw : kali/kali

 -반드시 pw를 변경한다.

 -필요에 따라 root pw도 변경할 수 있다.

 

시간대 설정 : sudo dpkg‐reconfigure tzdata

- 서버로 사용할 시 반드시 설정한다.

 

● 칼리 리눅스 ip 설정

$ sudo nmcli dev status

- 시스템에 연결된 네트워크 장치를 확인한다.

 

$ sudo nmcli connection modify "Wired connection 1" connection.id eth0

- 이름이 Wired connection 1 인 것을 eth0로 변경한다.

- 반드시 이름과 실제 장치를 확인하고 그에 따라 명령어를 입력한다.

ip 인터페이스 이름 변경

 

 

$ sudo nmcli connection modify "eth0" ipv4.addresses 192.168.11.36/24

$ sudo nmcli connection modify "eth0" ipv4.gateway 192.168.11.1

$ sudo nmcli connection modify "eth0" ipv4.dns "8.8.8.8"

-  eth0 네트워크 인터페이스의 ipv4에 대한 설정을 한다.

 

$ sudo nmcli connection modify "eth0" ipv4.method manual

- eth0 네트워크 인터페이스의 ipv4 설정을 수동으로 변경한다.

 

$ sudo nmcli connection down "eth0" && sudo nmcli connection up "eth0"

- eth0 네트워크 인터페이스를 재부팅한다.

 

● SSH 접속 설정

putty나 mobaxterm과 같은 프로그램으로 접속하기 위해 다음과 같이 ssh 접속을 위한 설정을 해준다.

# apt install ‐y openssh‐server
# systemctl start ssh
# systemctl status ssh
# echo "set mouse=" >> ~/.vimrc

 

- # echo "set mouse=" >> ~/.vimrc 설정으로 칼리리눅스에 마우스 오른쪽 키로 붙여넣기 하는 기능을 활성화한다.

 

1-2 CentOS 7 설정

centos 7 네트워크 설정을 위해 net-tools나 ntsysv를 깔아야 하는데 레파지토리가 없어 yum을 사용할 수 없는 경우, 다음과 같이 레파지토리를 수정하고 초기화하여 yum을 사용할 수 있다.

레파지토리 수정
# cd /etc/yum.repos.d/
# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

레파지토리 초기화
# yum clean all
# yum makecache

 

나머지 운영체제의 경우 기존의 방식대로 ip를 설정하고 방화벽을 해제하여 원활한 실습 환경을 구현한다.

 

2. Wireshark 

2-1 와이어샤크 설치

와이어샤크 공식 홈페이지에서 설치 가능하다.

 

● winpcap(npcap)

구형 환경에서는 winpcap, 현재는 npcap으로 대체되었다.

와이어샤크 실행 시 실제로 패킷을 캡처하는 기능은 npcap이 담당하며, 와이어샤크는 캡처된 것을 화면에 보여주는 역할일 뿐이므로 와이어샤크 설치 시 npcap을 함께 설치하겠냐는 항목이 나오면 반드시 함께 설치한다.

 

npcap은 NIC를 프로미스큐어스 모드(Promiscuous mode)로 작동시킨다.

이는 맥주소를 확인하고 나한테 온 패킷이 아니라도 버리지 않고 일단 위로 받아 올려 패킷 정보를 저장한 후 버린다.

수정할 그림

2-2 와이어샤크 실행

● 첫 화면 구성

와이어샤크 실행 시 다음과 같이 현재 사용중인 네트워크 인터페이스를 확인할 수 있다.

와이어샤크 실행 첫 화면

 

 

 

 

 

네트워크를 사용함에도 목록이 보이지 않는 경우는 다음과 같다.

 

① [캡처] ‐ [옵션] ‐ [Manage Interface]에 각 인터페이스의 show 항목이 비활성화된 경우

② winpcap(npcap)이 삭제된 경우

 

가상 인터페이스의 경우는 추가 후 리부팅 또는 winpcap(npcap) 재설치까지 보이지 않을 수 있다.

1번의 경우 관리자권한으로 와이어샤크 실행 시 해결되며, 2번의 경우 와이어샤크를 재설치하는 것이 가장 깔끔하다.

 

● 실행 화면 구성

패킷 분석 실행 시 다음과 같이 현재 네트워크에 흐르는 패킷의 정보를 확인할 수 있다.

와이어샤크 실행 화면 구성

 

- 패킷 리스트 창 : 현재 네트워크에 흐르는 패킷의 목록을 나열한다.

- 패킷 세부 창 : 선택한 패킷의 세부 정보를 출력한다.

- 패킷 바이트 창: 선택한 패킷을 16진수 형식의 바이트 단위로 출력한다.

 

※ 패킷 리스트 창 메뉴

No 패킷 표시기와 각 프레임의 숫자
Time 패킷의 도착 시간
Source/Destination 프레임 안에 이용 가능한 최상위 계층의 주소
Protocol 프레임에 적용된 마지막 해석 프로토콜
Length 프레임의 전체 길이
Info 프레임의 기본 정보

 

또한 패킷 리스트 창에서 패킷을 선택하고 다음과 같은 설정을 할 수 있다.

Mark/Unmark Packet      : Ctrl+m

Ignore/Unignore Packet : Ctrl+d

 

※ 주요 실행 메뉴

주요 실행 메뉴

 

왼쪽 아이콘부터 '시작, 종료, 재시작, 조건선택, 이전 내용(파일) 열기, 내용저장, 열린 파일 닫기, 리로드'를 수행한다.

 

● 캡처 필터

다음과 같이 캡처 필터를 통해 주소, 포트, 프로토콜, 혹은 복합적인 필터링이 가능하다.

캡처 필터

※ 주소 필터링

host #.#.#.#  #.#.#.# 주소 관련 패킷만 출력한다.
src host #.#.#.# 주소 #.#.#.#가 출발지인 패킷만 출력한다.
dst host #.#.#.# 주소 #.#.#.#가 목적지인 패킷만 출력한다.
net #.#.#.#/# #.#.#.# / # 네트워크 주소 관련 패킷만 출력한다.
src net #.#.#.#/# 네트워크 주소 #.#.#.# / #가 출발지인 패킷만 출력한다.
dst net #.#.#.#/# 네트워크 주소 #.#.#.# / #가 목적지인 패킷만 출력한다.
ether host #:#:#:#:#:# #:#:#:#:#:# 맥주소 관련 패킷만 출력한다.
ether src #:#:#:#:#:# 맥주소 #:#:#:#:#:#가 출발지인 패킷만 출력한다.
ether dst #:#:#:#:#:# 맥주소 #:#:#:#:#:#가 목적지인 패킷만 출력한다.

 

※ 포트 필터링

port ## ## 포트번호 관련 패킷만 출력한다.
src port ## 포트번호 ##가 출발지인 패킷만 출력한다.
dst port ## 포트번호 ##가 목적지인 패킷만 출력한다.
tcp port ## ## tcp 포트번호 관련 패킷만 출력한다.
udp port ## ## udp 포트번호 관련 패킷만 출력한다.

 

※ 프로토콜 필터링

tcp, udp, icmp, icmp6, ipx, ip, ip6, arp, rarp 등으로 필터링 가능하다.

 

복합적인 필터링의 경우 and, or를 이용하여 가능하다.

 

● 디스플레이 필터

다음과 같이 캡처된 패킷 표시 필터링을 위한 표현식을 확인할 수 있다.

[분석] - [표시 필터 표현식]

 

※ 연산자

- ==, === 

- !=, !== 

- <, >, <=, >=

- is present  : 해당 필드가 패킷에 존재하는지 확인한다.

    * ip.src : 출발지 IP가 있는 패킷을 출력한다.(IPv4 패킷에만 존재)

    * tcp.options.mss is present   : TCP MSS 옵션이 포함된 패킷만 출력한다.

    * http.host : HTTP Host 헤더가 존재하는 패킷만 출력한다.

    * icmp : ICMP 프로토콜이 포함된 패킷만 출력한다. (ping 등)

- contains : 특정 문자열을 포함한 패킷을 출력한다.

- in : 리스트 내 포함되는 패킷을 출력한다. sql의 in 연산자와 동일하다.

 

3. 패킷의 이해

3-1 Link Layer 구조

● 네트워크 인터페이스 계층

Preamble
(8 byte)
DA
(6 byte)
SA
(6 byte)
Type
(2 byte)
DATA FCS
(4 byte)

 

- Preamble

: 네트워크 장치가 패킷을 받아서 이더넷 프레임의 시작 부분을 결정하고 동기화할 때 사용한다. 와이어샤크 패킷 분석에는 나오지 않는다.

 

- DA(Destination Address) ()

: 목적지 시스템의 이더넷 주소이다.

 

- SA(Source Address)

: 패킷을 전송하는 호스트의 이더넷 주소이다.

 

- Type

: 이더넷 프레임 상단의 데이터의 종류이다.

: DA, SA, TYPE로 헤더를 구성한다.

 

- DATA

: 상위 레이어의 프로토콜에 의해 사용되는 정보가 포함된다.

: 일반적인 경우 페이로드는 데이터그램이다.

 

- FCS

: 에러 검출을 위해 사용되는 필드로, 수신측이나 송신측 호스트 시스템에 의해 프레임에 포함되는 내용을 계산한 값이다. 값이 다르면 해당 프레임은 무시된다.

 

● 이더넷(Ethernet)

Destination MAC Address (6 byte)
Source MAC Address (6 Byte)
Type (2 Byte) Data (46 ~ 1500 Byte)
Frame check sequence (4 byte)

 

 

● Type의 대표적인 값들 (0x600 이상의 값 만이 가능하다.)

 0800  : IP

 86DD : IPv6

 8191  : NetBIOS

 0806  : ARP

 0835  : RARP

      .  .  .

 

3-2 Network Layer 구조

● IP 헤더 구조

Version
(4 bit)
Header Length
(4 bit)
Type of Service
(8 bit)
Total Length
(16 bit)
Identification
(16 bit)
Flag
(3 bit)
Fragment Offset
(13 bit)
TTL
(8 bit)
Protocol Type
(8 bit)
Header Checksum
(16 bit)
Source IP Address
(32 bit)
Destination IP Address
(32 bit)
Option & data

 

- Version (4 bit)

: 인터넷 프로토콜 버전으로 4는 IPv4, 6은 IPv6이다.

 

- Header length (4 bit)

: IP 프로토콜 헤더의 길이로 word 단위이다. (1 word = 4 byte = 32bit)

: 나중에 헤더가 늘어날 수 있으므로 삽입한다.

 

- Type Of Service (8 bit)

: 데이터그램에 기대되는 QoS(Quality of Service)를 지시하는 8비트 코드이나 현재는 무시되는 부분이다.

 

- Total Length (16 bit)

: IP의 프로토콜 헤더에서 내가 보내려는 페이로드까지 모두 합친 전체 길이이다. (byte 단위)

 

- Identification (16 bit)

: 호스트가 연속적으로 전송하는 각 데이터그램을 식별하기 위한 번호이다. (10진수로 해석한다.)

: 패킷이 라우터를 통과할 때 쪼개질 수 있으므로 이때 쪼개진 패킷이 원래 하나였음을 알려준다.

 

- Flags (3 bit)

: 데이터그램 분할에 대한 정보를 나타낸다. (2진수로 해석한다.)

    * 첫 번째 비트 : 사용하지 않는다.

    * 두 번째 비트 : 내 뒤에 나와 Identification이 같은 데이터그램은 없음을 나타낸다.

    * 세 번째 비트 : 내 뒤에 나와 Identification이 같은 데이터그램이 있음을 나타낸다.

    * 한 번도 분할되지 않았다면 000으로 날아온다.

 

- Fragment Offset (13 bit)

: 각 프래그먼트의 원 데이터에 있어서의 위치를 byte 단위로 나타낸다. (10진수로 해석한다.)

 

- TTL (8 bit)

: Time To Live의 약자로 통과 가능한 라우터의 남은 수를 나타낸다. 라우터를 경유할 때마다 이 값이 하나씩 줄어든다.

    * 값이 0이 되면 데이터그램은 폐기한다.

    * 라우팅 과정에서 무한 루프에 빠지는것을 방지한다.

 

- Protocol Type (8 bit)

: 데이터에 포함되는 상위 프로토콜의 종류를 나타낸다.

    * 1   =  ICMP

    * 6   =  TCP

    * 17 =  UDP

 

- Header Checksum (16 bit)

: IP 프로토콜 헤더 자체의 내용이 바르게 교환되고 있는가를 점검한다. (2진수로 해석한다.)

 

- Source 및 Destination IP Address (32 bit)

: 발신지 및 수신지의 IP 주소를 나타낸다.