본문 바로가기
보안과정/네트워크

전송계층(Transport Layer)

by Luuii 2017. 10. 19.

★ TCP / UDP의 특징

★ Header 분석

> TCP Header 분석

> UDP Header 분석

★ 포트 번호 체계

★ 대표적인 서비스 패킷 분석

> telnet packet 분석

> ftp packet 분석

> nslookup packet 분석

 

전송 계층 프로토콜의 특징

TCP(Transmission control Protocol)

UDP(User Datagram Protocol)

 

TCP(Transmission control Protocol)

> 인터넷 상의 컴퓨터들 사이에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용되는 프로토콜.

> IP가 실제로 데이터의 배달처리를 관장하는 동안, TCP는 데이터 패킷을 추적 관리.

>> 메시지는 인터넷 내에서 효율적인 라우팅을 하기위해 여러 개의 작은 조각으로 나뉘는데 이것을 패킷 이라 함.

 

HTML 파일이 웹 서버로부터 사용자에게 보내질 때, 서버 내에 있는 TCP 프로그램 계층은 파일을 여러 개의 패킷들로 나누고, 패킷 번호를 붙인 다음. IP 프로그램 계층으로 보냄.

각 패킷이 동일한 수신지 주소(IP주소)를 가지고 있더라도, 패킷들을 네트워크의 서로 다른 경로를 통해 전송 될 수 있음.

다른 한쪽의 ( 사용자 컴퓨터 내의 클라이언트 프로그램)에 있는 TCP는, 각 패킷들을 재 조립하고, 사용자에게 하나의 완전한 파일로 보낼 수 있을 때 까지 기다림.

 

> TCP는 연결지향 프로토콜.

>> 메시지들이 각 단의 응용 프로그램들에 의해 교환되는 시간동안 연결이 확립되고 유지 되는 것을 의미.

> TCP는 IP가 처리 할 수 있도록 메시지를 여러 개의 패킷들로 확실히 나누고, 반대편에서는 완전한 메시지로 패킷들을 재조립할 책임이 있음.

> OSI 7 Layer 에서 4계층 트랜스포트 계층에 속함.

 

TCP 프로토콜의 특징

> 연결형 기반 서비스(Connection Oriented Protocol)

> 상태 기반 서비스(Statefull Protocol)

> 신뢰 기반 서비스(Reliable Protocol)

 

EX) TCP 프로토콜을 사용하는 대표적인 서비스(CentOS 5.10)

> # cat /etc/services | grep -i tcp

> # nmap localhost

> # netstat -an | more

 

대표적인 TCP 기반 서비스

> telnet

> FTP(File Transfer Protocol)

> HTTP(Hypertext Transfer Protocol)

> SSH

> SMTP(Simple Mail Transfer Protocol)

> NFSv4(Network File system Version 4)

> 기타

 

 

UDP

> IP를 사용하는 네트워크 내에서 컴퓨터들 간에 메시지들이 교환 될 때 제한된 서비스만을 제공하는 통신 프로토콜.

> TCP의 대안이며, IP와 함께 쓰일 때에는 UDP/IP라고 표현하기도 함.

> TCP와 마친가지로 UDP도 한 컴퓨터에서 다른 컴퓨터로 데이터그램이라고 불리는 실제 데이터 단위를 받기 위해 IP를 사용.

But, UDP는 TCP와 달리, 메시지를 패킷(데이터그램)으로 나누고, 반대편에서 재조립하는 등의 서비스는 제공하지 않음.

특히 도착하는 데이터 패킷들의 순서를 제공하지 않음.

So, UDP를 사용하는 응용프로그램은, 전체 메시지가 올바른 순서로 도착했는지에 대해 확인 할 수 있어야한다는 것을 의미.

교환해야할 데이터가 매우 적은(그러므로 재조립해야 할 메시지도 매우 적은) 네트워크 응용프로그램들은 처리 시간 단축을 위해 UDP를 더 좋아할 수 있다.

TFTP는 TCP 대신 UDP를 사용

> UDP는 IP계층에서 제공되지 않는 두개의 서비스를 제공.

>> 다른 사용자 요청을 구분하기 위한 포트번호.

>> 도착한 데이터의 손상여부를 확인하기 위한 체크섬 기능.

 

> OSI 7 Layer 에서 4계층 트랜스포트 계층에 속함

 

UDP 프로토콜의 특징

> 비 연결형 서비스(Connectionless Protocol)

> 비 상태 서비스(Stateless Protocol)

> 비 신뢰 서비스(Unreliable Protocol)

 

대표적인 UDP 서비스

> DNS(Domain Name System) query(DNS Client -> DNS Server)

> SNMP(Simple Network Management Protocol) data

> NTP(Network Time protocol) data

> TFTP(Trivial FTP)

> DHCP(Dynamic Host Configuration Protocol)

> NFS(Network File System) - NFSv2, NFSv3

> RIP(Routing Information Protocol)

> 기타

 

[참고] 연결지향 프로토콜(Connection Oriented Protocol) & 비연결 프로토콜(Connectionless Protocol)

> 중요한 차이점은 비연결 프로토콜의 경우 각각의 패킷들이 독립적으로 이루어지는 반면 연결지향의 경우 연속적인 패킷으로 상태 정보유지.

 

(TCP) 연결지향 프로토콜

 

 

(UDP) 비연결지향 프로토콜

 

[참고] Statefull Protocol & Stateless Protocol

(TCP) Statefull Protocol

 

 

[참고] TCP Header 분석

 

> 기본헤더 : 20 byte

> 옵션 사용시 헤더의 최대 크기 : 60 byte ( 헤더의 길이 : 20 ~ 60 byte)

> IP주소 + 포트번호 + = 소캣번호 ( 양 쪽 호스트 내 종단 프로세스 식별 )

 

Source Port (발신지 포트, 16bit)

> 송신 호스트 응용프로세스가 사용하는 번호

 

Destination Port (목적지 포트 , 16bit)

> 수신 호스트 응용프로세스가 사용하는 번호

 

Sequence Number (순차번호, 16bit)

> TCP 각 세그먼트의 첫 번째 바이트에 부여되는 번호

> 신뢰성 있는 데이터 전송을 위해 모든 바이트 마다 일련 번호 부여.

> 32bit 필드로 실제 데이터 첫 번째 바이트에 부여된 번호, 32 bit이므로 최대 4기가 바이트 크기의 송신 데이터에 순서화된 일련 번호를 붙일 수 있음.

초기 순차번호(ISN, Initial Sequence Number)

>> TCP 연결설정 동안 난수 발생기를 이용하여 초기 순서번호 생성

>> TCP 양방향이므로 각 방향 마다 다른 ISN 번호가 사용됨.

 

Acknowledgement Number (응답 확인번호, 32bit)

> 수신한 세그먼트의 확인 응답을 위한 32bit 필드

> 다음 세그먼트를 수신할 준비가 되었다는 사실을 알림.

> 세그먼트에 실린 데이터의 마지막 바이트의 순차 번호에 1을 더한 값.

> 수신하기를 기대하는 다음 바이트 번호 = (마지막 수신 성공 순서번호 +1)

 

Header Length (헤더 길이, 4bit)

>TCP 헤더 길이를 나타내는 4bit 필드

> 4바이트 단위로 표시. So, TCP 헤더길이는 총 60 바이트 이하

> 헤더의 길이가 20~60 이므로 5~12 사이의 값.

 

TCP Control Flag (TCP 제어 플래그, 6bit)

> 각 필드 흐름제어, 종료, 데이터 전송 모드용 6bit 구성.

URN : 긴급 플래그(Urgent Pointer). 긴급한 처리를 요하는 것을 알림.

>> 송신 측 상위 계층이 긴급 데이터라고 하면, 긴급 비트를 1로 설정하고 순서에 상관없이 먼저 송신.

>> 긴급 데이터의 마지막 바이트 위치가 Urgent Pointer로 가리켜짐

ACK : 응답(Acknowledgement) 플래그, 응답패킷에 모두 1로 세팅 됨.

>> 0 : 확인번호 유효함 을 뜻함.

>> 1 : 확인번호 미포함 을 뜻함( 즉, 32비트 크기의 확인응답번호 필드 무시 됨)

>> SYN 세그먼트 전송 이후 세그먼트에는 항상 이 비트가 1로 세팅.

PSH : Push 플래그. 실제 데이터의 전송이 일어나고 있음을 표시

>> 가능한 한 빨리 응용프로그램에 버퍼링 된 데이터를 즉시 전달 할 것.

>> 수신 측은 버퍼가 찰 때까지 기다리지 않고 수신 즉시 응용프로그램에 전달.

RST : Reset 플래그. 비 정상적인 종료를 위한 플래그

>> 연결확립(ESTABLISHED)된 회선에 강제 리셋 요청.

SYN : 연결(SYNCRONIZE)요청 플래그. 정상적인 연결을 요청할 때 사용되는 플래그

>> TCP 연결 설정 초기화를 위한 순서번호의 동기화

>>> 연결 요청 : SYN=1, ACK=0 

>>> 연결 허락 : SYN=1, ACK=1

>>> 연결 설정 : ACK=1

FIN : Finish 플래그, 정상적인 연결의 종료에 사용되는 플래그

>> 송신기가 데이터 보내기를 끝마침

>>> 종결 요청 : FIN=1

>>> 종결 응답 : FIN=1, ACK=1

 

Window size (윈도우 크기, 16bit)

> 응답 확인을 받기 전에 보낼 수 있는 데이터의 양.

> 윈도우 크기가 16bit이므로 최대 65535 바이트 까지.

> 흐름제어를 위해 사용하는 16비트 필드.

> TCP 흐름제어를 위해 통신의 상대편에게 자신의 버퍼 여유용량 크기를 지속적으로 통보 해주는 기능을 함.

> 수신측에 의해 능동적으로 흐름제어를 수행하게 됨.

 

Checksum (검사합, 16bit)

> 각 TCP 세그먼트 변형 여부 확인

> IP와 달리 전체 세그먼트의 변형여부를 나타냄

> 실제 헤더 이외에도 발신, 수신, IP주소 및 프로토콜 ID등을 추가하여 체크섬을 계산함.

체크섬 계산 대상 : 가상 헤더 + 실제 헤더 + 데이터 + 패딩

>>> 가상헤더 : 발신 IP + 수신 IP + zero(8 bit) + 프로토콜 ID + UDP/TCP 길이

>>> 실제해더 : 실제 TCP/UDP 헤더

 

Urgent Pointer (긴급포인터 ,16bit)

> 세그먼트가 긴급 데이터를 포함하고 있을 때,

> 제어 플래그가 1로 설정 시 16비트 필드 값과 순차번호를 더하면 긴급 데이터 바이트 번호, 위치를 얻을 수 있음.

> TCP 세그먼트에 포함된 긴급 데이터 마지막 바이트에 대한 일련번호.

>> 현재 일련번호(sequence nuber)로부터 긴급 데이터까지의 바이트 오프셋(offset)

>> 해당 세그먼트의 일련번호에 Urgent Point ㄱ밧을 더해 긴급 데이터의 끝을 알 수 있음.

 

Options (옵션)

> 최대 40바이트 까지 옵션 데이트 포함 가능

> TCP MSS 옵션을 협상하거나, 타임스탬프 옵션 정의 등

 

포트 번호 체계

포트(Port) = 서비스(Service)

포트 번호가 필요한 이유 : 번호마다 다른 서비스를 제공 해야 하기 때문

> IP 주소 : 호스트 또는 물리적인 포트를 구분하기 위한 번호

> 포트 주소 : 서비스(Service) 구분하기 위한 번호

 

MAC 주소 : 6 바이트 ( 46 비트 )

IP 주소 : 4 바이트 ( 32 비트 )

Port 주소 : 2 바이트 ( 16 비트 )

 

> 포트 번호는 인터넷이나 기타 다른 네트워크 메시지가 서버에 도착했을 때, 전달되어야 할 특정 프로세스를 인식하기 위한 방법

> TCP와 UDP에서 포트번호는 단위 메시지에 추가되는 헤더 내에 넣어지는 16비트 정수의 형태를 갖음.

> 이 포트 번호는 논리적으로는 클라이언트와 서버의 전달 계층 사이를, 그리고 물리적으로는 전달계층과 인터넷 계층 사이를 통과하여, 계속 전달 됨.

 

클라이언트가 인터넷 서버에 하는 요청은, 호스트의 FTP서버에 의해 제공되는 파일을 요청하는 것 일 수 있음.

원격지의 서버 내에 있는 FTP프로세스에 사용자의 요청을 전달하기 위해, 사용자 컴퓨터에 있는 TCP 소프트웨어 계층은 요청에 부가되어지는 16비트 정수의 포트 번호 내의 21이라는 포트번호를 확인.

서버에서 TCP계층은 21이라는 포트번호를 읽고, 사용자의 요청을 서버에 있는 FTP 프로그램에 전달.

 

일부 서비스 들에 대해서는 인습적으로 영구적인 포트번호들이 할당.

이러한 것들을 well-known ports

그 외의 것들은 할당낸 포트번호들의 범위 내에서 요청의 시작과 종료 동안에만 일시적으로 부여.

 

Well-known Ports : 0 ~ 1023

Registered Ports : 1024 ~ 49151  //추가적인 서버를 위해서 서비스포트.

새로운 프로그램을 만들었는데 웰 노운에 하기는 뭐하다. 아 내가 이포트를 어떤 서비스 포트로 사용할 거다.

Dynamic and/or Priv ate Ports : 49152 ~ 65535    //순수하게 클라이언트를 위해 할당되는 포트

 

대표적인 서비스 포트

빨강 무조건 암기.★★★★★★★★★★★★

프로토콜

포트 

프로토콜 

포트 

 FTP data port(active mode)

 TCP 20 

 NetBIOS(TCP rarely used) 

 TCP/UDP 137 

 FTP control port

 TCP 21

 NETBIOS

 UDP 138 

 SSH

 TCP 22 

 NETBIOS

 TCP 139 

 SCP(uses SSH)

 TCP 22 

 IMAP4

 TCP 143 

 SFTP(uses SSH)

 TCP 22 

 LDAP

 TCP 389  

 Telnet

 TCP 23

 HTTPS

 TCP 443 

 SMTP

 TCP 25 

 SMTP SSL/TLS(SMTPs)

 TCP 465 

 TACACS+

 TCP 49 

 IPsec (for VPN with IKE)

 UDP 500 

 DNS name queris

 UDP 53 

 LDAP/SSL(LSAPs)

 TCP 636 

 DNS zone Transfers

 TCP 53 

 LDAP/TLS(LDAPs)

 TCP 636 

 TFTP

 UDP 69 

 IMAP SSL/TLS(IMAPs)

 TCP 993 

 HTTP

 TCP 80

 POP SSL/TLS(POPs)

 TCP 995

 Kerberos

 UDP 88 

 L2TP

 UDP 1701 

 POP3

 TCP 110 

 PPTP

 TCP 1723 

 SNMP

 UDP 161 

 Remote Desktop Protocol(RDP)

 TCP/UDP 3389

 SNMP trap

 UDP 162 

 Microsoft SQL Server

 TCP 1433 

 

대표적인 DB 리스너 포트(Listener Port) 종류(암기)★★★★★★★★★★★★★★

DB 종류 

프로토콜/포트 

 MySQL

 TCP 3306 

 MS-SQL

 TCP 1443

 Oracle

 TCP 1512

 PostgreSQL

 TCP 5432

 MariaDB

 TCP 3306

 DB2

 TCP 50090

 

포트번호의 확인

포트번호의 전체 목록

http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml

 

포트번호의 전체 목록

# cat /etc/services

 

서버에서 사용 중인 포트번호 목록

# nmap localhost

# netstat -an | more ( # netstat -antp, # netstat -anup)

 

hping3 명령어의 대표적인 용도 ( 사용법을 알아둬야 할듯 )

- Scanning(Port Scan && Host Sweep)

- Flooding Attack ( ex: Ping of Death)     //주로 이 용도로 쓸 것이다.

- IP Spoofing -> 보안장비 Rule Test(F/W, IPS, UTM, . . . )

 

# hping3 <MODE> <options> <source> <destination> <port> <count>

# hping3 -S 192.168.20.200 -p 80 -c 3

# hping3 -S -a 192.168.20.203 192.168.20.200 -p 80 -i u1000

# hping3 -S --rand-source 192.168.20.200 -p 80 -u u1000

 

(1) 첫번째 테스트
# hping3 -S 192.168.20.200 -p 80 -c 5 
                    -S : TCP SYN request
                    -p : port
                    -c : which times you send request

 

(2) 두번째 테스트
# hping3 -S 192.168.20.200 -p ++50 -c 5   /* DNS ip */ 이런식으로는 거의 안쓴다.
                    -S : TCP SYN request
                    -p : port(++50 : 50 ~ 54)

 

(3) 세번째 테스트
# hping3 -1 192.168.20.200 --icmp-ts -c 5 
                    -1 : use ICMP
                    --icmp-ts : request time stemp
                    -c : which times you send request

 

(4) 네번째 테스트(포트스캐닝)
# hping3 -8 50-56 -S 192.168.20.200 
                    -8 : scan mode
                    -S : tcp syn request

 

(5) 다섯번째 테스트
# hping3 -2 192.168.20.200 -p 53 -c 5 
                    -2 : UDP mode
                    -p : port
                    -c : which times you send request

 

(6) 여섯번째 테스트( 소스의 아이피를 속이는 방법 )

# wireshark &

-> 패킷 분석(소스 IP 부분을 확인)

# hping3 -1 192.168.20.200 -a 192.168.20.204 -c 3
# hping3 -1 192.168.20.200 -a 192.168.20.201 -c 3

 

반응형

'보안과정 > 네트워크' 카테고리의 다른 글

TCP SYN Flooding Attack  (0) 2017.10.22
Dos(Denial of Service) Attack Type  (0) 2017.10.22
IP주소  (0) 2017.10.18
ARP, ARP Spoofing  (0) 2017.10.17
네트워크 인터페이스 계층(Network Interface Layer)  (0) 2017.10.17