패킷의 이해

2020. 2. 11. 17:04Security/네트워크

* TCP/IP 개요

TCP/IP 네트워크 구조

arp : 상대방의 ip는 알고 mac주소를 모를때 사용

rarp : 상대방의 mac주소는 아는데 나의 ip 주소를 모를때 사용

 

* link layer 구조

네트워크 인터페이스 계층

- preamble : 패킷을 보낼때의 신호. 패킷이 온다고 인식만 할뿐 패킷이라고 생각하지 않음.

- FCS : 에러 검출을 위해서 사용. 패킷이라고 생각하지 않음.

- DA(Destination Address) : 목적지 시스템의 이더넷 주소
- SA(Source Address) :패킷을 전송하는 호스트의 이더넷 주소
- Type : 이더넷 프레임 상단의 데이터의 종류. 

- DA~type까지 header 부분

- MAC주소의 broadcast 주소는 FF이다.

- Type의 대표적인 값은 0800(IP), 86DD(IPv6), 0806(ARP), 0835(RARP)가 있음.

 

* Network Layer 구조 - IP

IP 헤더

version(4bit)

- 인터넷 프로토콜 버전으로 IPv4는 4, IPv6은 6

 

header length(4bit)

- IP 프로토콜 헤더의 길이(word 단위)

total length(16bit)

- ip packet의 전체 길이. byte 단위 사용

 

identification(16bit)

- IP가 가지고 있는 고유 번호.

- host가 연속적으로 전송하는 각 datagram을 식별하기 위한 번호

 

flag(3bit)

- IP datagram의 분할(fragment)에 관한 정보를 나타냄

- 첫 번째 비트 : 사용안함

- 두 번째 비트 : do not fragment(identification number가 같은 fragment가 더 이상 없음)

- 세 번째 비트 : more fragment(identification number가 같은 fragment가 존재)

- 만약 3가지 비트 모두 0이면 fragmentation이 되지 않음.

 

fragment offset(13bit)

- 각 fragment의 첫 번째 데이터의 위치를 몇 번째 byte인지 나타냄

- 만약 flag가 모두 0인데 offset이 1이면 공격 당한 것으로 간주

- 만약 첫 번째 datagram의 offset값과 두 번째 datagram의 offset값이 맞지 않으면 계속해서 메모리에 다음 datagram이 들어올때까지 저장하는데 이를 이용한 공격 기법이 fragment offset 공격이다. 현재는 offset 가격이 다르면 메모리에 바로 지워버리기때문에 먹히지 않음.

 

TTL(8bit)

- time to live의 약자로 통과 가능한 라우터의 남은 수. 라우터를 경유할 때마다 이 값이 하나씩 감소

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

 

header checksum(16bit)

- IP 프로토콜 헤더 자체의 내용이 바르게 교환 되고 있는가를 점검

 

Source 및 Destination IP 

- 발신지 및 수신지의 IP

 

* Network Layer 구조 - ARP

- ARP(Address Resolution Protocol)은 32bit IP와 48bit 이더넷 주소 간에 변환을 담당.
- 이들 변환은 동적으로 이뤄진다.

- ARP cache 목록을 조회하거나 추가, 삭제

- arp -a : cache 전체 목록 검색

- arp -s : 목록 추가

- arp -d : 목록 삭제 

 

ARP 헤더

H/W type : link layer, physical layer에 관한 정보 

Protocol Type : 어떠한 프로토콜을 사용하는지 정의. 

H/W Length : SA의 길이. ex) ethernet : 6byte 

Protocol Length : 프로토콜의 길이

OP : ARP 요청인지 응답인지, RARP의 요청인지 응답인지 구분

SA : 송신자의 이더넷 주소

Sender IP : 송신자의 IP 주소

DA : 수신자의 이더넷 주소

Target IP : 수신자의 IP 주소

 

RARP

- 데이터 링크 계층의 주소로부터 네트워크 계층의 주소를 얻어오는 프로토콜
- 디스크를 가지지 않은 호스트가 자신의 IP 주소를 서버로부터 얻어내려면 RARP라는 TCP/IP 인터넷 프로토콜을 사용해야 하며 일반적으로 자체의 디스크 기억 장치가 없는 워크스테이션이나 지능형 터미널에 의해 이용.
- RARP 패킷은 ARP 패킷과 동일한 형식을 갖는다.

 

* Network Layer 구조 - ICMP

- ICMP는 송신측의 상황과 목적지 노드의 상황을 진단.

- type : ICMP 메세지 종류

- code : 각 type에 대한 코드 값. 에코 응답(ping 응답) 에코 요청(ping 요청)을 가장 많이 사용.

- checksum : ICMP 메세지 자체(헤더+데이터)에 대한 오류를 검사하는 field

 

ICMP - Ping

Identifier

- Ping 프로세스의 프로세스 ID
- 여러 개의 ping이 동일 호스트에서 실행되는 경우 응답을 식별할때 쓰인다.

 

Sequence number
- 요구 패킷의 순서, 0부터 시작.

 

* TCP/IP 구조

TCP 헤더

source port #

- 송신자의 port number

 

dest port #

- 수신자의 port #

 

sequence number

- packet의 byte stream number

 

acknowledgement number

- 상대방이 다음에 받아야 할 packet의 sequence number

- 누적 ACK(만약 5000이라면 4999까지 잘 받았다는 의미)

 

header len(gth)(4bit)

- options가 만약 생기면 늘어날 수 있음

 

not used(6bit)

- header length의 다음 6bit는 아직 사용하지 않음.

 

U(URG)

- urgent point 

- 1이면 urg data pointer를 읽어야하고, 0이면 무시.

- 현재는 사용하지 않아서 U와 urg data pointer 모두 사용하지 않아 쓰레기값이 들어있음

 

A(ACK)

- 1이면 acknowledgement number를 읽고, 0이면 무시

- 0이면 응답 패킷이 아니라는 의미

 

P(PSH)

- packet의 우선순위를 정함

- 사용하지 않음. 

 

R(RST)

- 1이면 tcp connection을 reset(초기화)

- reset의 의미는 연결을 끊지않고 기존의 socket을 유지하면서 접속을 초기화.

- client나 server 누구나 먼저 보낼 수 있음

 

S(SYN)

- client가 먼저 보냄

- syn signal. 접속이 없어서 접속을 하기위해 신호 

- 첫번째 신호는 client가 server에게 1을 보내고 server가 client에게 다시 1을 보내고 세번째 신호를 

- sequence number와 window size에 대해서 주고 받음.

- 3번째 신호는 의미가 없음.

- syn flooding 공격에 사용됨.

 

F(FIN)

- 대부분 client가 먼저 보냄.

- 접속을 끊는 것.

 

receive window 또는 flow control용 window size

- 패킷을 보낼때마다 가용할 수 있는 메모리 버퍼 사이즈를 알려줌.

- 일종의 흐름제어

 

checksum

- 패킷이 손상됐는지 확인

- IP와 달리 전체 packet이 깨졌는지 확인

 

urgent point(urgent data pointer)

- 사용하지 않음

 

옵션 및 데이터

- 대부분 존재하지 않음.

 

christmas packet

- R과 S, S와 F는 동시에 1인 경우가 존재할 수 없는데 R, S, F중 2개 이상이 1인 패킷

- destination port의 application(서비스)이 구동(반응)중인지 확인해보기 위해서 보냄.(=스캔) 

- 스캔 공격에 사용되기도 함.

 

 

[실습]ethernet 헤더(14byte) 분석

Ethernet

Destination : 00:1a:4d:4e:ad:ac

Source : 00:0c:29:15:e4:52

Type : 0800(IP)

 

Internet Protocol

Version : 4(IPv4)

Header length : 5(5words, 20bytes)

Type of service : 00

Total length : 00 db(219byte)

Identification : 9d 7a(40314)

Flags : 4000 -> 010((identification number가 같은 fragment가 더 이상 없음) 

Fragment offset : 4000(0)

Time to live : 40(64)

Protocol : 06(TCP)

Header checksum : 06 d2(0000 0110 1101 1110)

Source IP : c0 a8 0a 7d(192.168.10.125)

Destination IP : c0 a8 0a 03(192.168.10.3)

 

Ethernet

Destination : 00:25:22:5f:48:34

Source : 00:0c:29:15:e4:5e

Type : 0806(ARP)

 

Address Resolution Protocol

H/W type : 00 01(ethernet)

Protocol Type : 08 00(IP v4)

H/W Length : 6byte

Protocol Length : 4byte

OP : 0002(ARP 응답)

SA : 00:0c:29:15:e4:5e

Sender IP : c0 a8 0a 7d(192.168.10.125)

DA : 00:25:22:5f:48:34

Target IP : c0 a8 0a 33(192.168.10.51)

 

Ethernet

Destination : 00:0c:29:15:e4:5e

Source : 00:25:22:5f:48:34

Type : 0800(IP)

 

Internet Protocol

Version : 4(IPv4)

Header length : 5(5words, 20bytes)

Type of service : 00

Total length : 00 54(84byte)

Identification : 00 00(0)

Flags : 4000 -> 010((identification number가 같은 fragment가 더 이상 없음) 

Fragment offset : 4000(0)

Time to live : 40(64)

Protocol : 01(ICMP)

Header checksum : a4 a8(1010 0100 1010 1000)

Source IP : c0 a8 0a 33(192.168.12.51)

Destination IP : c0 a8 0a 7d(192.168.12.125)

Ethernet

Destination : 78:28:03:0d:8f

Source : 00:0c:29:15:e4:5e

Type : 0800(IP)

 

Internet Protocol

Version : 4(IPv4)

Header length : 5(5words, 20bytes)

Type of service : 00

Total length : 0047(71byte)

Identification : 03f5(1013)

Flags : 4000 -> 010((identification number가 같은 fragment가 더 이상 없음) 

Fragment offset : 4000(0)

Time to live : 40(64)

Protocol : 11(UDP)

Header checksum : 84 0c(1000 0100 0000 1100)

Source IP : c0 a8 0a 7d(192.168.10.125)

Destination IP : a8 7e 3f 01(168.126.63.1)

Ethernet

Destination : 00:0c:29:15:e4:5e

Source : 00:25:22:5f:48:34

Type : 0800(IP)

 

Internet Protocol

Version : 4(IPv4)

Header length : 5(5words, 20bytes)

Type of service : 00

Total length : 003c(60byte)

Identification : de72(56946)

Flags : 4000 -> 010((identification number가 같은 fragment가 더 이상 없음) 

Fragment offset : 4000(0)

Time to live : 40(64)

Protocol : 06(TCP)

Header checksum : c6 48(1100 0110 0100 0100)

Source IP : c0 a8 0a 33(192.168.12.51)

Destination IP : c0 a8 0a 7d(192.168.12.125)

 

Ethernet

Destination : 00:0c:29:0f:f4:2c

Source : 00:50:56:00:00:08

Type : 0800(IP)

 

Internet Protocol

Version : 4(IPv4)

Header length : 5(5words, 20bytes)

Type of service : 00

Total length : 00 3c(60byte)

Identification : 05 d0(1488)

Flags : 0000 -> 000((fragment 되지 않음) 

Fragment offset : 0000(0)

Time to live : 80(128)

Protocol type  : 01(ICMP)

Header checksum : d4 fe(1101 0100 1111 1110)

Source IP : c0 a8 6f 03(192.168.111.3)

Destination IP : c0 a8 0a 9e(192.168.111.158)

Type : 08(ICMP 요청)

 

ICMP

code : 00

checksum : 4d 3b(19771)

identifier : 00 01(1)

sequence number : 00 20(32)

Ethernet

Destination : c4:54:44:3a:b8:81

Source : 00:26:66:d5:e1:08

Type : 0800(IP)

 

Internet Protocol

Version : 4(IPv4)

Header length : 5(5words, 20bytes)

Type of service : 00

Total length : 00 34(52byte)

Identification : 00 00(0)

Flags : 4000 -> 010((identification number가 같은 fragment가 더 이상 없음) 

Fragment offset : 4000(0)

Time to live : 35(53)

Protocol type : 06(TCP)

Header checksum : 16 53(0001 0110 0101 0011)

Source IP : 7d d1 e6 ee(125.209.230.238)

Destination IP : c0 a8 0a 09(192.168.10a.9)

source port number : 00 50(80) -> HTTP

destination port number : ea 05(59909)

sequence number : d1 b7 92 26(3,518,468,646‬)부터 보냄

ACK number : de 37 2c df(3,728,157,919‬)까지 받음.

Header Length : 8(8word, 32bytes)

not used : 0000 0001 -> 0000 00

U : 0

A : 1

P : 0

R : 0

S : 1

F : 0

window size : 16 d0(5840byte)

checksum : cf 88(53128)

urgent point : 00 00(0)

'Security > 네트워크' 카테고리의 다른 글

network - transport layer(3)  (0) 2020.02.14
network - transport layer(2)  (0) 2020.02.12
wireshark 기본 사용법  (0) 2020.02.11
네트워크 - 전자우편&FTP  (2) 2020.02.06
네트워크 - application layer(2)  (0) 2020.02.05