[Nmap] TCP 옵션과 UDP 옵션
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 |
댓글 남기기