2024. 1. 16. 08:53ㆍInformation Security 정보보안/Network Security 네트워크 보안
배울 내용:
MAC address 구조
TCP Header 구조
UDP Header 구조
TCP UDP 헤더구조
Ethernet Frame 구조
ipv4 구조
ARP 구조
ARP 요청
4way handshake 와 SSL , TLS
3way handshake
제가 지금 부터 작성하는 모든글은 제가 공부기록용이기 때문에 정확하지 않을수 있음을 알려드립니다.
틀린게 있으면 댓글로 써주시면 고치겠습니다.
지난번에 이것들의 구조를 마지막으로 끝냈다
그럼 좀더 자세히보면
2계층에 존재하는 물리적주소인 MAC (Media Access Control) 은
48비트로 이뤄져있고 필드당 8 비트고 6개의 필드가 있다
16 진수로 표현이 가능하니깐 1필드에 8비트니깐
젤앞에있는 1필드에 01101100 8비트가 들어간다
그러면 이걸 4비트로 나누면
0110 1100
으로 이 16진수로 하면
이렇게 6C 가 되있다
그럼아까 첫번째 필드가
6C 가 동일한걸 알수있다
IP address 는 4개의 필드로 8 비트로 되어있다
이걸 4x8 하면 32 비트로 되어있는것이다
그리고 이걸 다시
이렇게 2의 몇승인지를 계산해보면 128+64 = 192 인걸알수있다
위에 까지는 쉬웠다 그러나 아래는 조금 복잡할것이다
이더넷 프레임의 구조다
Ethernet Header (6+6+2 = 14 bytes) 가 구성되어있다
아까의 도착지 MAC 가 6 bytes
출발지 MAC 이 6bytes
Ethernet Type이 2bytes (08 00 은 ip 임 ) (어떤프로토콜이 그다음에 탑재되어있는지 미리알려줌)
순서로
그래서 여기서 잘보면 IP 나 ARP 가 Frame안에서 위쪽에 있을것같지만
사실상 이더넷의 아랫쪽에 위치해있다
Data
는 46~1500 bytes 까지로 데이터를 담고있고
IP 는 20 bytes 인데
그러면 총 12 (Header ) +2 (Type) + 40( IP, TCP Header)
그럼 기본 54 bytes 이후에 데이터가 존재한다
(데이터를 넣을려면 최소 54 bytes 이후에 가능 )
이거를 Depth 라고함
그러면 이걸 좀더 이해하려면
IPv4 Header로 가봐야한다
ipv4 의 크기는 32 bits (4bytes) 인데
필드가 보면
IP Header
이렇게 필드가 4bytes 씩 5 필드니깐 20 bytes 인것이다
(Options는 데이터가 들어갈 위치라 0)
그러나 1개의 IP 가 다해서 32bytes 라는걸 알수있는데
이거는 Size 인것이고 Header는 20bytes 이다
그럼 전시간에 Incapsulation Decapsulation 을했을때
이렇게 14 bytes 라는 앞에 EthernetHeaeder 를 그리고 options에는 TCP header와 Message를 담고 있다
다시 돌아와서
Data 가 46~ 1500 bytes
이렇게 되있는데
최대가 1500 이되어있는데 이는
MTU
Maximum Transmission Units
한방으로 처리할수있는 최대전송단위인 것이다
정확히는 (실제길이)
1518 Bytes 다
이제 Ethernet Frame 중 가장 뒤에는
Trailer 라고
에러가있는지없는지확인하는게 있다
(오류제어 4Bytes )
CRC는 Cyclic Redundancy Check 로
데이터 전송의 정확성을 확인하기 위해 사용되는 기술을 말한다
이번엔 ARP Header 다
이런식으로 구성되어있는데
Hardware는 MAC을 말한다
Protocol 은 IP Address 을 말한다
Hard Add Len MAC 길이를 말하는것이고
Proto Add Len 또한 IP의 길이를 말하는 것이다
Operation Code 는 요청할떄는 1이고 요청했는데 응답했으면 2로 표현된다
별도의 헤더가 있는게 아니다
Source Hardware Address 는 보내는 사람 MAC Address 고
Source Protocol Address 는 보내는 사람 IP Address 고
Destination에 있는거는 받는사람의 MAC와 IP address 다
그럼 ARP가 뭐였냐면
IP 주소로 MAC주소를 알아내는 Protocol 이다
알아낸다 (매핑,변환,해석 이란단어는 조금 완벽하지않다고한다 )
예를들면 ARP가 BroadCast 로 방송해서 10.10.10.10 이 누구야? 라고
방송을한다 그러면 한명씩 다 돌면서 10.10.10.10을 찾게 된다
그럼이제 이더넷과 ARP 헤더를 합쳐보면
이런식으로 볼수있다
(ARP 도 Ethernet Header에 있음 )
Ethernet은 LAN을 통과할수있는 아스팔트라고 생각하면된다
이더넷이 싫든 좋든 Ethernet안에 있어야한다
따로따로 봤다고 해서 따로 있는게아니라 항상같이다닌다는것.
다시 Ipv 4로 돌아와서
version 은 ipv4인지 6인지 알아야 하니깐있고
IHL(Internet Header Length) 과 ToS (Type of Service) 서비스 종류가있다
이건 그렇게 중요하지않고
그밑에 있는 Identification 식별
그전이전 시간에 데이터를 1500bytes 를보낼려면 1460 bytes 밖에 못보낸다
왜냐면 MTU 가 1500 이라고해도 앞에 해더크기가 54가 있기때문에 1460 정도밖에 안된다
그러면 맨뒤에서 쪼끔 짤리는데 이걸 Fragmentation 으로 짤리는데
같은데이터 인데 2번째 데이터라는걸 알려줘야한다
사과를 4등분으로 나눴을때 A 사과의 1번쨰 ,2번째를 표시를해야하는
식별자가 필요하다
그게 Identification
즉 식별이 필요하다
DF 와 MF 는
DF (Don't Fragment)와 MF (More Fragments) 로
DF (Don't Fragment): 이 플래그가 설정되어 있으면, 네트워크 장비는 해당 IP 패킷을 분할할 수 없고
MF (More Fragments): 이 플래그는 분할된 IP 패킷들 중 마지막이 아닌 패킷에 설정
Fragment OffSet 은
자르긴 잘랐는데 어디 부분을 잘랐는지를 알려준다
(상대주소 - 어디서부터의 얼만큼떨어졌는지)
여기서 가장중요한게
Ping of Death 이라는 DOS 공격과
Tear Drop 이라는 공격이 있다
(IP 패킷을 분할해서 공격 , Tear Drop이 더 강력함(쪼개서 공격))
왜냐면 패킷을 분할을해서 공격을 하는걸 여기서 offset에서 조작을 해버리는 것이다
TTL 은 ping 을하면 볼수있는데 패킷이 살아있는 시간으로 알려져있다
이것은 얼마동안 살아있는지를 나타내는데 128, 256, 64 가 있는데
이 개수는 홉 카운트 이다 (Router를 거친 횟수, L3 스위치를 거친횟수)
그러면 128 설정했을때 5개의 홉을 지나면 123개로 출력이 된다
이것은 루핑을 방지하기위해서이다
예를들어 Ping 10.10.10.10. 을했으면
Ping이 패킷을 생성해서 TTL 값을 설정해서 보내는데
그때에 취소를해도 이미 전송이 됨으로 전송된것은 여전히 전송이 됬던것이다
그래서 그게 무한대로 되버리면 데이터쓰레기가 되기때문에
이걸 방지해 128번만 이동하게 해두기 위해서이다
( Looping 방지 )
우리는 그냥 단순히 Ping이 네트워크 연결상태로만 알고있지만
이런 걸로 홉의 개수를 추측할수도있고 연결상태뿐아니라 다른 정보도 얻을수있다
TCP 나 UDP 를 설정해주는것이다
오류를 체크 해주는 CheckSum 이다
그럼 어떤 오류를 체크하냐면 IPv4 Header를 체크한다
그런데 IPv4에서 Header만 체크하고 data는 체크를 안한다
그래서 Header Checksum 이다
나머지 Source Destination address는 말안해도 알것이다
이번엔 TCP Header 다
sequence Number 는 주고 받기위한 순서를 정한것이고
Acknowlegement Number는 응답을 위한 번호고
URG , ACK , PSH , RST , SYN , FIN 을 활성화 시키냐 비활성화
시키는것이고
에러가생기면 재전송해주는 Check Sum 에서 확인까지함
Window size는 패킷 size를 말함
버퍼가 한번에 받아서 처리할수있는 용량이다
TCP 에서는 Flow Control을하는데 (흐름제어) sliding window 방식으로 흐름 제어한다
이게 뭐냐면 윈도우 크기에다가 상대측에다가 여기에 남은 크기를 알려준다
만약 상대방층에서 데이터를 주고받을때 내 버퍼가 얼마 남았나를 알려줌
그런데 만약 1000bytes 를 보내려고하는데 상대방쪽에서 100 bytes 가있다면
줄여서 보내야함 이래서 50% 줄여서 500bytes 로 줄이고 서서히 늘려서 속도를 늘림
이걸로 흐름제어를함
Urgent Point 는 플래그를 활성화시켜서 응급으로 실행시킬수있는데
잘안쓴다고한다
UDP 헤더는 간단하다
딱히 설명이 많이 없어도 TCP 헤더를 설명했던거를 토대로 보면 이해가 된다
UDP 의 헤더는 TCP의 약 3분의 1밖에 안된다고 생각하면된다
( UDP 8 bytes , TCP 20 bytes)
그러면 TCP의 3 way handshake 를 보자
UDP는 3 way handshake를 안하고 TCP만하는데 이렇게 하나하나 물어따진뒤에
연결한 뒤(세션확립한뒤) 에 데이터를 보낸다
그래서 UDP 보다 조금 느리다
SYN 보낼때
"1000, 2000, 1001, 2001"과 같은 숫자들은 일반적으로 TCP 패킷의
순서 번호(Sequence Number)와 확인 응답 번호(Acknowledgment Number)를 나타내는데
TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 이 숫자들을 사용하여 데이터 패킷의 순서를 관리하고,
전송된 패킷의 올바른 수신을 확인 한다
말그대로 응답확인으로 1을 + 해주는것이다
3way hand shake 말 4 way 도 있다
클라이언트가 끊을래 하고 요청하면 (FIN)
서버가 그래라고 응답하고 (ACK)
또 서버가 나도 삐졌어 끊을래라고 답하고 (FIN)
클라이언트에서 그삐짐에 대한응답이 돌아오면 세션을 종료함 (ACK)
그럼 다시 TCP 로 가서 이번엔 SSL / TLS
가 합쳐진 걸 보자
3way handshake 가 된뒤에
6 단계 7 단계 handshake 가 되버리는데
최대 16 단계로 까지 가능하다
암호화할때 키는 어떤키로 될건지 세션아이디는 뭔지
이런저런걸 데이터를 인증하고 인증이되면 데이터를 전송한다
이젠 ARP 로 다시넘어와서
랜에서 그럼 어떻게 통신이 이루어질까?
192.168.10.2 가 ARP Frame을 만든다 (ARP Request 를하려고)
source MAC 이 01 인걸 볼수있고
Source IP 또한 10.2 인 192.168.10.2 인걸 볼수있다
그리고 FF 로 브루트 캐스트(FF-FF-FF-FF-FF-FF) 을해서 모두다 방송하고
10.4 인 192.168.10.4 의 IP를 찾는다
이러면 자기인것만 응답하기에
이친구가응답할것이고 나머지는 Drop 될것이다
이렇게 오늘도 조금 자세히 Header 구조와 Handshake , ARP 에대해서 알아보았다
그럼 20000