본문 바로가기

Learning/└◆Security Section

[네트워크 이론] 전송계층(Transport Layer)

 

 

10

전송계층(Transport Layer)

 

 

TCP / UDP의 특징

Header 분석

- TCP Header 분석

- UDP Header 분석

포트 번호 체계

대표적인 서비스 패킷 분석

- telnet packet 분석

- ftp packet 분석

- nslookup packet 분석

 

 

 

 

(1). 전송계층 프로토콜의 특징(Protocol Characteristic)

 

 

TCP(Transmission Control Protocal)

UDP(User Datagram Protocol)

 

 

(1-1). TCP(Transmission Control Protocal)

 

TCP[티씨피]는 인터넷상의 컴퓨터들 사이에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용되는 프로토콜이다. IP가 실제로 데이터의 배달처리를 관장하는 동안, TCP는 데이터 패킷을 추적 관리한다 (메시지는 인터넷 내에서 효율적인 라우팅을 하기 위해 여러개의 작은 조각으로 나뉘어지는데, 이것을 패킷이라고 부른다).

 

예를 들면, HTML 파일이 웹 서버로부터 사용자에게 보내질 때, 서버 내에 있는 TCP 프로그램 계층은 파일을 여러 개의 패킷들로 나누고, 패킷 번호를 붙인 다음, IP 프로그램 계층으로 보낸다. 각 패킷이 동일한 수신지 주소(IP주소)를 가지고 있더라도, 패킷들은 네트웍의 서로 다른 경로를 통해 전송될 수 있다. 다른 한쪽 편(사용자 컴퓨터 내의 클라이언트프로그램)에 있는 TCP, 각 패킷들을 재조립하고, 사용자에게 하나의 완전한 파일로 보낼수 있을 때까지 기다린다.

 

TCP는 연결지향 프로토콜이라고 알려져 있는데, 이것은 메시지들이 각단의 응용 프로그램들에 의해 교환되는 시간동안 연결이 확립되고 유지되는 것을 의미한다. TCPIP가 처리할 수 있도록 메시지를 여러 개의 패킷들로 확실히 나누고, 반대편에서는 완전한 메시지로패킷들을 재조립할 책임이 있다. OSI 통신모델에서, TCP4계층인 트랜스포트 계층에 속한다.

 

TCP 프로토콜의 특징

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

상태 기반 서비스(Statefull Protocol)

신뢰 기반 서비스(Reliable Protocol)

 

() TCP 프로토콜을 사용하는 대표적인 서비스(EX: 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)

- 기타

 

(1-2). UDP(User Datagram Protocol)

 

UDP[유디피]IP를 사용하는 네트웍 내에서 컴퓨터들 간에 메시지들이 교환될 때 제한된 서비스만을 제공하는 통신 프로토콜이다. UDPTCP의 대안이며, IP와 함께 쓰일 때에는 UDP/IP라고 표현하기도 한다. TCP와 마찬가지로 UDP도 한 컴퓨터에서 다른 컴퓨터로 데이터그램이라고 불리는 실제 데이터 단위를 받기 위해 IP를 사용한다. 그러나 UDPTCP와는 달리, 메시지를 패킷(데이터그램)으로 나누고, 반대편에서 재조립하는 등의 서비스는 제공하지 않으며, 특히 도착하는 데이터 패킷들의 순서를 제공하지 않는다. 이 말은 UDP를 사용하는 응용프로그램은, 전체 메시지가 올바른 순서로 도착했는지에 대해 확인할 수 있어야한다는 것을 의미한다. 교환해야할 데이터가 매우 적은(그러므로 재조립해야할 메시지도 매우 적은) 네트웍 응용프로그램들은 처리시간 단축을 위해 TCP 보다 UDP를 더 좋아할 수 있다. 일례로 TFTPTCP 대신에 UDP를 사용한다.

 

UDPIP 계층에서 제공되지 않는 두 개의 서비스를 제공하는데, 하나는 다른 사용자 요청을 구분하기 위한 포트 번호와, 도착한 데이터의 손상여부를 확인하기 위한 체크섬 기능이다.

 

OSI 통신 모델에서, UDPTCP와 마찬가지로 4계층인 트랜스포트 계층에 속한다.

 

UDP 프로토콜의 특징

비연결형 서비스(Connectionless Protocol)

비상태 서비스(Stateless Protocol)

비신뢰 서비스(Unreliable Protocol)

 

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

# cat /etc/services | grep i udp

# nmap localhost

# netstat -an | more

대표적인 UDP 서비스:

- DNS(Domain Name System) query

- SNMP(Sime Netowrk 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)Connection Oriented Protocol

        syn - ack - ack (연결형 신호 방식)

(UDP)Connectionless Protocol

        ack가 없음(비연결형 방식)

 

[참고] Statfull Protocol & Stateless Protocol

 

(TCP)Statefull Protocol

       ack

(UDP)Stateless Protocol

 

 

[참고] Reliable Protocol & Unreliable Protocol

 

(TCP)Reliable Protocol

       ack신호가 없으면 받지 못한걸로 간주 TIMEOUT 발생 재전송 한다.

(UDP)Unreliable Protocol

 

 

 

 

 

 

 

(2). TCP 헤더 분석(TCP Header Analysis)

 

wireshark를 이용하여 telnet등 패킷 분석

 

 

[실습] TCP 패킷을 캡쳐하고 TCP 헤더를 분석

- telnet 과정 중 첫번째 패킷을 가지고 TCP 헤더를 분석한다.

- win2008(telnet CMD) --> linux200(telnetd(23))

 

Display Filter : ip.addr == 192.168.20.200

 

 

 

[참고] TCP 헤더 분석

- 기본 헤더 : 20bytes

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

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

 

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

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

 

목적지 포트(Destnation Port, 16 bits)

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

 

순차 번호(Sequence Number)

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

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

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

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

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

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

 

응답 확인 번호(Acknowledgement number, 32 bits)

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

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

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

 

헤더 길이(Header Length, 4 bits)

TCP 헤더 길이를 나타내는 4bits 필드.

4바이트(32 비트) 단위로 표시. 따라서, TCP 헤더 길이는 총 60 바이트 이하

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

 

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

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

 

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

- 송신측 상위계층이 긴급 데이터라고 하면, 긴급비트를 1로 설정하고 순서에 상관없이 먼저 송신됨, 긴급 데이터의 마지막 바이트 위치가 Urgent pointer로 가리켜짐

 

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

- 1로 세팅되면, 확인번호 유효함을 뜻함- 0로 세팅되면, 확인번호 미포함(, 32비트 크기의 확인응답번호 필드 무시됨)- SYN 세그먼트 전송 이후 세그먼트에는 항상 이 비트가 1로 세팅이 됨.

 

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

- 가능한한 빨리 응용프로그램에 버퍼링된 데이터를 즉시 전달할것. 수신측은 버퍼가 찰 때까지 기다리지 않고 수신 즉시 어플리케이션에 전달.- 서버측에서는 더이상 전송할 데이터가 없음을 나타내기도 함.

 

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

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

 

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

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

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

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

연결설정: ACK=1

 

FIN : Finish 플래그, 정상적인 연결의 종료에 사용되는 플래그- 송신기가 데이터 보내기를 끝마침 종결요청: FIN=1 종결응답: FIN=1, ACK=1

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

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

윈도우 크기가 16bit이므로 최대 65535 Bytes(2^16)까지임.

흐름제어를 위해 사용하는 16비트 필드이며 TCP 흐름제어를 위해 통신의 상대편에게 자신의 버퍼 여유용량 크기를 지속적으로 통보하여 주는 기능을 함.

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

 

검사합(Checksum, 16 bits)

TCP 세그먼트 변형 여부 확인

IP와 달리 전체 세그먼트의 변형 여부를 나타낸다.

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

 

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

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

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

 

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

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

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

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

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

- 해당 세그먼트의 일련번호에 urgent point 값을 더해 긴급 데이터의 끝을 알수 있음.

 

옵션(Options)

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

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

 

 

 

 

 

 

(3) UDP 헤더 분석(UDP Header Analysis)

 

 

[실습] UDP 패킷을 캡쳐하고 UDP 헤더를 분석

RFC 768, RFC 1122

nslookup 명령어의 패킷을 캡쳐하고 UDP 헤더 부분을 분석한다.

linux200(nslookup CMD) --> kns.kornet.net(named(53))

 

Display Filter : ip.addr == 192.168.20.200

 

 

 

[참고] UDP 헤더 분석

- 기본 헤더 : 20bytes

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

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

 

발신 포트(Source Port, 16 bits)

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

 

수신 포트(Destnation Port, 16 bits)

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

 

패킷 전체 길이(Packet Total Length, 16bits)

바이트 단위의 길이. 최소값 8(헤더만 포함될 때)

 

검사합(Checksum, 16 bits)

선택 항목. 체크섬 값이 0이면 수신측은 체크섬 계산 안함

 

 

 

 

 

 

(4) 포트(Port) 번호 체계

 

 

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

 

(4-1) 포트 번호가 필요한 이유? 하나의 서버에 많은 서비스를 제공하기 위함(포트번호 : 서비스)

 

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

포트 주소(Port Address, Port Number) : 서비스(Service) 구분하기 위한 번호

 

(4-2) 포트 번호(Po-rt Number)에 대한 설명

 

MAC 주소(MAC Addr) : 6 bytes (48 bits)

IP 주소(IP Addr) : 4 bytes (32 bits)

Port 주소(Port Num): 2 bytes (16 bits)

 

포트번호는 인터넷이나 기타 다른 네트웍 메시지가 서버에 도착하였을 때, 전달되어야할 특정 프로세스를 인식하기 위한 방법이다. TCPUDP에서, 포트번호는 단위 메시지에 추가되는 헤더 내에 넣어지는 16 비트 정수의 형태를 갖는다. 이 포트번호는 논리적으로는 클라이언트와 서버의 전달계층 사이를, 그리고 물리적으로는 전달계층과 인터넷계층 사이를 통과하여, 계속 전달 된다.

 

예를 들면, 클라이언트가 인터넷 서버에 하는 요청은, 호스트의 FTP 서버에 의해 제공되는 파일을 요청하는 것일 수 있다. 원격지의 서버 내에 있는 FTP 프로세스에 사용자의 요청을 전달하기 위해, 사용자 컴퓨터에 있는 TCP 소프트웨어 계층은 요청에 부가되어지는 16 비트 정수의 포트 번호 내에 21 (FTP 요청과 관련하여 통상 사용되는 번호이다) 이라는 포트번호를 확인한다. 서버에서, TCP 계층은 21이라는 포트번호를 읽고, 사용자의 요청을 서버에 있는 FTP 프로그램에 전달할 것이다.

 

일부 서비스들에 대해서는 인습적으로 영구적인 포트번호들이 할당되어 있다. 이러한 것들을 well-known ports라고 부른다. 그 외의 경우에는, 포트번호는 할당된 포트번호들의 범위 내에서 요청의 시작과 종료 동안에만 일시적으로 부여된다.

 

(4-3) 포트 번호 체계

 

----------------------------------------------------------

포트 종류                               포트 번호

----------------------------------------------------------

The Well-Known Ports                     0 - 1023    (잘알려진 서비스 포트내역)

The Registered Ports                     1024 - 49151 (서버용 포트는 고정되어 있어야 한다.)

The Dynamic and/or Priv ate Ports.       49152 - 65535

----------------------------------------------------------

 

 

 

(4-4) 네트워크 서비스 포트

# cat /etc/services | more

 

 

 

 

 

(4-5) 대표적인 서비스 포트 :

http://hyess.tistory.com/admin/entry/post/?id=146

 

 

 

(4-6) 포트번호 확인

 

포트번호의 전체 목록:

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)

 

 

 

 

(5-7) 실무적인 예

 

(특정 ip의 서비스 포트 요청)

 

--------- (Firewall/Router) -------+--------+--------+------

                                   |        |        |

                                ServerA  ServerB  ServerC

                                 (FTP)    (WEB)    (MAIL)

 

 

(전제조건) 서버에서만 서비스 하는 경우라고 가정한다면

 

(서버에서)

요청: FTP 서비스 포트를 열어 달라!!!!

-> FTP 서비스 enable

 

(네트워크 장비:라우터/스위치/방화벽)

요청: FTP 서비스 포트를 열어 달라!!!!

-> FTP 서비스 접근 제어(ACL) Open

 

사용방법

# netstat -ant (TCP)

# netstat -anu (UDP)

# netstat -anp (Program)( antp, anup )

 

(linux200)

# nmap localhost     (# nmap -p 21 localhost)

# netstat -an | grep :21

 

  LISTEN 포트가 열려있는 상태

 

 

# service vsftpd stop

# nmap localhost

# netstat -an | grep :21

 

 

# service vsftpd start

# nmap localhost

# netstat -an | grep :21

 

 

 

 

 

 

 

 

 

 

 

[실습] 자신의 서버에 열린 포트를 점검

 

자신의 서버에 서비스가 되고 있는 열린 포트를 점검하기.hwp

 

 

 

 

 

 

(5). TCP/UDP 대표적인 서비스 패킷 분석

 

telnet 패킷 분석

ftp 패킷 분석

ssh 패킷을 캡쳐하여 분석

web 패킷을 분석

nslookup 패킷 분석

 

 

[실습] telnet 패킷을 분석하기

Tree-way handshake 부분을 중점적으로 분석한다.-> "SYN - ACK/SYN - ACK" 부분에 대한 숫자를 적어 놓는다.

win2008(telnet CMD) --> linux200(telnetd(23))

 

 

[실습] ftp 패킷을 분석하기

Tree-way handshake 부분을 중점적으로 분석한다.-> "SYN - ACK/SYN - ACK" 부분에 대한 숫자를 적어 놓는다.

win2008(ftp CMD) --> linux200(vsftpd(21,20))- ftp 접속시 active(not passive)로 접속한다

 

 

[실습] ssh 패킷을 캡쳐하여 분석한다.

평문형태와 암호화된 형태의 패킷의 차이점에 대해 분석한다.

win2008(putty) --> linux200(sshd(22))

 

 

[실습] WEB 패킷을 캡쳐하여 분석한다.

Tree-way handshake 부분을 중점적으로 분석한다.-> "SYN - ACK/SYN - ACK" 부분에 대한 숫자를 적어 놓는다.

win2008(Web Browser) --> linux200(httpd(80))

 

 

[실습] nslookup 패킷 분석하기

DNS 헤더(DNS Data) 부분을 중점적으로 분석한다.

linux200(nslookup CMD) --> kns.kornet.net(named(53))

display filter : ! arp && ! dhcpv6 && ip.addr == 192.168.20.200

 

 

[실습] ping 안되는 사이트에 대한 hping3 명령어 사용하기

 

 

 

 

 

 

DoS(Denial of Service) Attack Type

 

 

 

 

[참고] ICMP LAND(Local Area Network Denial) Attack

툴을 제작해 보자.

 

(윈도우) c:\> ping 10.0.0.1 -t -1 50000 (c:\> ping /?)

Win -> Linux

Windows Server(공격자) 모니터링

부하량 점검 : 작업관리자 -> 네트워킹

 

Linux server(피해자) 모니터링

gnome-system-monitor &

 

ping -t 192.168.20.200 결과

 

 

 

 

부하량 없다

 

 

ping -t 192.168.20.200 -l 60000 결과

 

 

1%정도 차지한다.

 

ping -t 192.168.20.200 -l 60000 를 100개

 

(리눅스) # ping -s 50000 10.0.0.1 (# man ping)

 

# ping.sh 192.168.20.200 (KaliLinux내에 프로그램을 만든다.)

<CTRL + C> # pkill <program>

* 기능(ping -s 60000 <Target's IP>)

* 테스트(KaliLinux -> linux200/window2008)

 

 

네트워크 이용률 확인

#ping 192.168.20.201 -s 10000 결과

보내는측 초당 10 Kib 받는측 0.01%

 

 

#ping 192.168.20.201 -s 60000 결과

보내는측 초당 60 Kib 받는측 0.09%

빠른 타임 인터벌 사용 부하량을 줄 수 있다.

 

 

 

hping3 명령어의 수행결과와 비교한다.

[참고] hping3을이용한ICMP_Land_Attack.hwp

 

 

 

[참고] TCP Syn Flooding 공격.hwp

 

 

 

   

 

[참고] UDP Flooding 공격

 

 

[참고] OS내에서DoS.hwp

 

 

[참고] ShoWin툴을사용하여보안코딩이해하기.hwp

 

 

 

 

[참고] Brutus Attack.hwp

 

 

 

[참고] Ettercap 사용한 Kari Linux에서 Packet Sniffing 하기.hwp

 

 

 

[참고] DNS Spoofing.hwp

 

 

 

[참고] SNMP 취약점에 대해서 배워 보자.hwp

snmp의 취약점을 이용한 공격기법과 대응방안 [gusxodnjs].pdf

 

 

 

[정리]

[정리]
TCP/IP 모듈
■ TCP/IP Model
---------------------------
Application Layer(DNS, HTTP, SNMP, SMTP, ...)
   -> DNS spoofing, DHCP spoofing, ... + dictionary attack
---------------------------
Transport Layer(TCP/UDP)  -> TCP Syn Flooding, UDP Flooding
---------------------------
Internet Layer(ICMP/IGMP, IP(IPv4/IPv6), ARP/RARP) -> ARP Spoofing, IP Spoofing, hping3 CMD
---------------------------
Network Interface Layer(Ethernet)
---------------------------
Network Interface Layer
eth스위치,허브 등을 사용/ 전송하는 단위는 eth프레임/eth방식: CSMA/CD 제어/UTP케이블100base-T
L3 스위치 -> L2 스위치 기능 포함
Internet Layer
IP4 헤더/subnetmask/VLSM
IP Spoofing (A,B ->trusted host)
ICMP 헤더/hping3 CMD
TCP/UDP특성정보,헤더,포트번호