network

2 분 읽기

1. TCP와 UDP

네트워크 통신에서 IP“어느 컴퓨터로 보낼지”를 담당한다면, TCP/UDP는 그 컴퓨터 안에서 어떤 프로그램과 어떤 방식으로 통신할지를 담당한다고 보면 된다.

구분 TCP UDP
연결 방식 연결형 비연결형
연결 확인 안 함
데이터 전달 보장 있음 없음
순서 보장 있음 없음
재전송 있음 없음
속도 상대적으로 느림 상대적으로 빠름
대표 서비스 HTTP/HTTPS, SSH, DB DNS, DHCP, NTP, 일부 스트리밍
Nmap 관점 응답이 비교적 명확 응답이 없을 수 있어 판단이 어려움

비유하자면 TCP는 상호간의 인터랙션이 존재하는 전화통화

1
2
3
4
5
6
TCP
A: 연결할까요?
B: 네, 연결 가능합니다.
A: 그럼 연결하겠습니다.
       ↓
통신 시작

UDP는 일방향적인 편지와 같다고 할 수 있다.

1
2
3
4
UDP
A: 데이터 보냄
       ↓
B가 받았는지 여부를 체크하지 않으며, 응답이 오는지 보장하지 않음


2. TCP

(1) TCP가 더 스캔하기 쉽다.

TCP는 명확한 연결 절차가 있기 때문에 더 스캔하기 용이하다. 대표적으로 TCP 3-way handshake 절차를 살펴보면 아래와 같다.

1
2
3
4
5
6
7
8
Client                    Server

   SYN  -------------------->
        "연결할래?"
        <---------------- SYN/ACK
              "그래"
   ACK  -------------------->
        "좋아"

때문에 nmap 입장에서는 다음과 같이 판단할 수 있다.

1
2
3
4
5
SYN 보냄
   ↓
SYN/ACK 받음
   ↓
"아, 이 포트 열려 있구나"

반면, 포트가 닫혀있는 경우에는 보통 아래와 같은 응답을 받는다.

1
2
3
SYN
 ↓
RST

따라서 TCP 방식은 상대적으로 open, closed, filtered 상태를 구분하기 쉽다.

(2) -sS: TCP SYN Scan (Half-open Scan)

가장 대표적인 Nmap TCP 스캔 방법.

1
sudo nmap -sS 192.168.0.10

이 방법을 도식화해본다면 위에서 살펴본 TCP 3-way handshake와 비슷하다.

1
2
3
4
Nmap                    Server
 SYN -------------------->
     <---------------- SYN/ACK
 RST -------------------->

하지만 위 도식의 가장 마지막 통신이 ACK가 아닌 RST인 점을 보면 알 수 있듯, 이 옵션은 TCP의 정상 연결까지는 하지 않는다.

이러한 방식을 Half-open Scan이라고 부르는데, 이렇게 하는 이유는 nmap의 본래 목적이 실제 서비스를 이용하는 게 아니포트가 열려 있는지만 확인하는 것이기 때문이다.

(3) -sT: TCP Connect Scan

1
nmap -sT 192.168.0.10

이 옵션은 sS 와는 다르게 TCP 연결을 끝까지 맺는다.

1
2
3
4
5
Nmap                    Server
 SYN -------------------->
     <---------------- SYN/ACK
 ACK -------------------->
        연결 성립

즉, 흔히 프로그램에서 사용하는 socket.connect() 과 비슷한 OS의 TCP 연결 기능을 활용한다.

(4) -sS 옵션과 -sT 옵션 비교

항목 -sS -sT
이름 SYN Scan Connect Scan
연결 완료 X O
동작 패킷을 직접 다룸 OS의 TCP 연결 사용
속도 상대적으로 빠름 상대적으로 느림
권한 높은 권한 필요할 수 있음 일반 사용자 가능
서버 로그 상대적으로 덜 남을 수 있음 연결 자체가 발생
일반적인 선택 많이 사용 권한 제약 있을 때 유용


3. UDP

(1) UDP는 스캔하기 어렵다.

UDP에는 TCP와 같은 handshake가 없다. nmap이 UDP 패킷을 보냈다고 해보자.

1
2
Nmap             Server
 UDP ------------->

하지만 UDP 특성상, 아무런 응답도 받지 못한다. 그런데 응답이 없는 이 상황을 어떻게 해석해야 할까?

1
2
3
4
1. 포트는 열려 있는데 원래 응답하지 않는 서비스
2. 방화벽이 차단
3. 패킷 유실
4. 서버가 응답하지 않음

따라서 UDP 스캔 방식은 open|filtered 결과를 자주 보여준다. 열려 있는지, 방화벽에 막힌 건지 구분할 수 없기 때문이다.

-sU : UDP Scan

1
sudo nmap -sU 192.168.0.10
  • UDP를 사용하는 대표 서비스와 자주 사용되는 기본 포트
포트 서비스
53 DNS
67/68 DHCP
123 NTP
161 SNMP
500 IKE/IPsec

Reference

https://nmap.org/book/man.html

댓글 남기기