포트 스캐닝은 컴퓨터 네트워크 보안에서 사용되는 기술로, 네트워크 상에 있는 컴퓨터나 네트워크 장비에 대한 보안 취약점을 찾는 데 도움을 준다. 이는 보안 테스트나 침투 테스트 과정에서 주로 사용된다.
인터넷 프로토콜 스위트에서 포트(port)는 운영 체제 통신의 종단점이다. 컴퓨터와 컴퓨터 또는 컴퓨터와 다른 장치들(프린터, 마우스 등)을 연결하는 하드웨어 인터페이스를 의미하기도 한다. 이 용어는 하드웨어 장치에도 사용되지만, 소프트웨어에서는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위이다. 주로 포트를 사용하는 프로토콜은 전송 계층 프로토콜이라 하며, 예를 들어 전송 제어 프로토콜(TCP)와 사용자 데이터그램 프로토콜(UDP)가 있다. 각 포트는 번호로 구별되며 이 번호를 포트 번호라고 한다. 포트 번호는 IP 주소와 함께 쓰여 해당하는 프로토콜에 의해 사용된다. -wiki
가장 일반적인 방법 중 하나는 TCP 포트 스캔이다. 이 방법은 TCP 연결을 시도하여 응답이 있는지를 확인한다. 다른 방법으로는 UDP 포트 스캔이 있다. UDP는 TCP와 달리 연결을 설정하지 않고 데이터를 보내므로 스캔이 좀 더 어렵다.
스캔 방법에 따른 nmap 옵션 설명
Target 서버에 해당 포트가 열려 있는 경우
Attacker Target $ nmap -sT TARGET_IP [ -p 포트번호 ]
SYN
------------------------------------> 포트가 열려 있는 경우 SYN/ACK 패킷을 수신
SYN/ACK SYN/ACK에 ACK 패킷을 전송함으로써 연결을 완료
<------------------------------------ 스캔하고자 하는 포트에 접속을 시도해 완전한 TCP 연결을 맺어 신뢰성 있는 결과를 얻음
ACK
------------------------------------> 속도가 느리고 로그를 남기므로 탐지가 가능하다는 단점이 있음
Target 서버에 해당 포트가 닫혀 있는 경우
Attacker Target
SYN
------------------------------------>
RST/SYN
Target 서버에 차단정책으로 차단되어 있는 경우
Attacker Target
SYN
------------------------------------>
$ nmap -sT bee.box
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-26 02:57 EDT
Nmap scan report for bee.box (192.168.40.130)
Host is up (0.0025s latency).
Not shown: 983 closed tcp ports (conn-refused)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
666/tcp open doom
3306/tcp open mysql
5901/tcp open vnc-1
6001/tcp open X11:1
8080/tcp open http-proxy
8443/tcp open https-alt
9080/tcp open glrpc
Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds
bee@bee-box:~$ sudo iptables -A INPUT -p tcp --tcp-flags SYN SYN --dport 8080 -j DROP
bee@bee-box:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:webcache flags:SYN/SYN
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
$ nmap -sT bee.box
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-26 03:14 EDT
Nmap scan report for bee.box (192.168.40.130)
Host is up (0.00053s latency).
Not shown: 983 closed tcp ports (conn-refused)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
666/tcp open doom
3306/tcp open mysql
5901/tcp open vnc-1
6001/tcp open X11:1
8080/tcp filtered http-proxy
8443/tcp open https-alt
9080/tcp open glrpc
Nmap done: 1 IP address (1 host up) scanned in 1.31 seconds
Target 서버에 해당 포트가 열려 있는 경우
Attacker Target $ nmap -sS TARGET_IP [ -p 포트번호 ]
SYN
------------------------------------> 세션에 대한 로그가 남는 TCP Full Open Scan을 보완하기 위한 기법
SYN/ACK 연결을 끊음
<------------------------------------
RST 세션을 완전히 연결하지 않음
------------------------------------> 로그가 남지 않아 추적이 불가능하도록 하는 기법
Target 서버에 해당 포트가 닫혀 있는 경우
Attacker Target
SYN
------------------------------------>
RST/SYN
<------------------------------------
Target 서버에 차단정책으로 차단(필터링)되어 있는 경우
Attacker Target
SYN
------------------------------------>
Target 서버에 해당 포트가 열려 있는 경우
Attacker Target $ nmap -sF TARGET_IP [ -p 포트번호 ]
FIN
------------------------------------> TCP 헤더에 FIN 플래그를 설정해서 공격 대상에게 메시지를 전송
Target 서버에 해당 포트가 닫혀 있는 경우
Attacker Target
FIN
------------------------------------>
RST/ACK
<------------------------------------
Target 서버에 차단정책으로 차단(필터링)되어 있는 경우
Attacker Target
FIN
------------------------------------>
Target 서버에 해당 포트가 열려 있는 경우
Attacker Target $ nmap -sX TARGET_IP [ -p 포트번호 ]
UGR,PSH,FIN
------------------------------------> TCP 헤더에 UGR, PSH, FIN 플래그를 설정해서 전송
포트가 열려 있는 경우, 응답이 없음
Target 서버에 해당 포트가 닫혀 있는 경우
Attacker Target
UGR,PSH,FIN
------------------------------------>
RST/ACK
<------------------------------------
Target 서버에 차단정책으로 차단(필터링)되어 있는 경우
Attacker Target
UGR,PSH,FIN
------------------------------------>
Target 서버에 해당 포트가 열려 있는 경우
Attacker Target $ nmap -sN TARGET_IP [ -p 포트번호 ]
null
------------------------------------> TCP 헤더에 플래그를 설정하지 않고 전송
Target 서버에 해당 포트가 닫혀 있는 경우
Attacker Target
null
------------------------------------>
RST/ACK
<------------------------------------
Target 서버에 차단정책으로 차단(필터링)되어 있는 경우
Attacker Target
null
------------------------------------>
UDP는 3-Way Handshaking과 같은 절차가 없음
UDP 패킷을 전송 시 열려 있는 포트로부터 특정 UDP 응답값으로 수신
수신측의 포트가 닫혀 있는 경우 ICMP Port Unreachable 에러 메시지를 통해 포트 활성 유무를 확인
namp -sU [대상서버IP]
열린 포트인 경우
Attacker Target
UDP
------------------------------------>
UDP
<------------------------------------
닫힌 포트인 경우
Attacker Target
UDP
------------------------------------>
ICMP Unreachable
<------------------------------------
차단된 포트인 경우
Attacker Target
UDP
------------------------------------>