목차
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로 변경한다.
- 반드시 이름과 실제 장치를 확인하고 그에 따라 명령어를 입력한다.
$ 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 주소를 나타낸다.
'일일 정리' 카테고리의 다른 글
Transport Layer, 해킹 실습 - SCAN (0) | 2025.04.10 |
---|---|
Network Layer 구조, 해킹 실습 John the Ripper (0) | 2025.04.09 |
게시판 웹브라우저 프로그래밍 (2) | 2025.04.04 |
게시판 웹브라우저 프로그래밍, PHP 보안 - 스크립트 공격 방지 (0) | 2025.04.03 |
웹브라우저 구성 및 모델링 (0) | 2025.04.02 |