2020. 2. 11. 17:04ㆍSecurity/네트워크
* 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 |