Try Attack/Penetration test

TCP/UDP/IP/ICMP 헤더구조

D4tai1 2020. 3. 3.

 

TCP/UDP/IP/ICMP

 

네트워크나 컴퓨터 쪽 공부했던 사람이라면

 

한 번쯤은 들어봤겠죠?

 

 

오늘은 들어만 보았던 헤더들과

 

멀어질 기분이 아니기 때문에

 

어떠한 내부구조와 항목으로 이루어져 있는지

 

보다 가까이 다가가서 들여다보겠습니다.

 


1. UDP 헤더

 

[그림1] UDP 헤더구조

1) UDP헤더의 길이는 8바이트(64비트)로 구성되어 있습니다.

 

 

2) 출발지포트(16비트), 목적지포트(16비트), 길이(16비트), 오류검사(16비트)

 

4가지 항목으로 구성되어 있습니다.

 

 

3) 길이는 응용계층에서 생성한 UDP페이로드

 

전송계층에서 생성한 UDP헤더가 더해진 데이터그램의 길이정보가 들어있습니다.

 

요약하면 아래 그림과 같이 구성이 됩니다.

 

[그림2] UDP페이로드(7계층정보) + UDP헤더(4계층정보)

 

4) 오류검사 항목은 일반적으로 비활성화상태이나 활성화상태인 경우도 있습니다.

 

위의 [그림2]의 경우는 오류검사항목이 비활성화상태이지만,

 

오류검사항목이 활성화상태라면 데이터그램을 생성할 때

 

12바이트(96비트)의 가상헤더(Pseudo Header)가 붙습니다.

 

[그림3] UDP페이로드(7계층정보) + UDP헤더(4계층정보) + 가상헤더

 

가상헤더의

 

출발지IP(32비트)와 목적지IP(32비트),

 

제로항목(8비트)은 0이고,

 

프로토콜 ID는 UDP(17번) 또는 TCP(6번)의 식별자 값이 들어있고,

 

길이에는 프로토콜 ID 항목에 따른

 

UDP데이터그램의 길이정보나 TCP 세그먼트의 길이정보

 

들어있습니다.

 

 


2. TCP 헤더

 

[그림4] TCP헤더구조

 

1) TCP헤더의 길이는 20바이트(160비트)로 구성되어 있습니다.

 

 

2) 출발지포트(16비트), 목적지포트(16비트),

 

Sequence Number(32비트)의 일련번호,

 

Acknowledgment Number(32비트)의 확인번호,

 

Offset(4비트), Reserved(4비트)의 예약항목, TCP Flags(8비트), Window(16비트),

 

Checksum(16비트)의 오류검사항목, Urgent Pointer(16비트)의 긴급포인터와

 

TCP Options(optional) 항목으로 구성되어 있습니다.

 

 

3) Offset은 TCP헤더의 길이정보(일반적으로 20바이트)가 있습니다.

 

 

4) Reserved(예약항목)는 공백으로 채워져 있습니다.

 

 

5) Sequence Number(32비트)의 일련번호

 

Acknowledgment Number(32비트)의 확인번호

 

TCP Flags항목은

 

TCP의 3-Way Handshaking과 3-Way Terminating

 

연결설정과 종료에 관련이 있습니다.

 

 

6) Window항목은 Flow Control(흐름제어)와 관련이 있습니다.

 

 

7) Checksum(오류검사)항목은 UDP와 동일하게 일반적으로 비활성화상태이나 활성화상태인 경우도 있습니다.

 

[그림5] TCP페이로드(7계층정보) + TCP헤더(4계층정보)

[그림5]의 경우 Checksum(오류검사)항목이 비활성화된 상태입니다.

 

[그림6] TCP페이로드(7계층정보) + TCP헤더(4계층정보) + 가상헤더

 

[그림6]의 경우 Checksum(오류검사)항목이 활성화되어 아래 가상헤더(다른색)가 추가로 붙었습니다.


3. 헤더 양식에 맞춰서 패킷제작

 

모의침투를 하기 위해서

 

간단한 UDP헤더구조와 복잡한 TCP헤더구조를 익혔으니 

 

공격을 하기위해 원하는 패킷을 제작해보겠습니다.

 

scapy라는 네트워크패킷 분석 도구를 이용하겠습니다.

 


 

 환경은 칼리를 사용해도 좋지만

 

저는 백박스를 한 번도 사용해보지않아 이번에 설치하였습니다.

 

백박스 다운로드 링크 : https://www.backbox.org/download/

 

[그림7] 백박스 설치

ISO를 선택 후 가난하기 때문에 0유로를 기부하고 다운로드를 진행하였습니다.

 

(1) UDP 헤더

[그림8] scapy를 이용한 UDP패킷의 헤더 생성

 

(2) TCP 헤더

[그림9] scapy를 이용한 TCP패킷의 헤더 생성

TCP헤더의 길이정보 20바이트(가로4바이트 * 세로 5행) 중

 

dataofs = 5는 세로 행을 의미합니다. 

 

 

flags는 기본 SYN으로 되어있지만 필요에 따라

 

[그림10] TCP플래그의 16진수 값

 위 표에 맞게 적어주시면 됩니다.

 

[그림11] TCP flags 설정

만약 flags가 [SYN + ACK]라면

 

0x2(SYN) + 0x10(ACK) = 0x12을 입력하시면 되겠죠?

 

[그림12] TCP flags 설정

추가로 시프트연산자를 이용해서 설정하는 것도 가능합니다.

 

 

※ X-mas 스캔은 URG&PSH&FIN 플래그를 동시에 설정하는데 

 

전부 더해주면 되겠죠?

 

포트스캔 방법 참고 : https://ccurity.tistory.com/180

 

Nmap 포트스캔

1. Nmap ▶ Network Map(네트워크 지도)의 약자이다. ▶ 네트워크에 연결되어있는 호스트OS의 종류를 알 수 있다. ▶ 서버의 열린포트를 확인할 수 있다. ▶ 서비스하는 프로그램의 버전을 확인할 수 있다. 1) 환..

ccurity.tistory.com

 

그 외에도 파이썬에서는 변수를 8비트의 배수단위로 처리를 합니다.

 

그래서 TCP헤더의 offset(4비트)과 reserved(4비트)의 경우 

 

한 개의 변수처럼 처리해야 하는 유의사항이 있죠..

 

 

 

 

 

 

 

댓글