nmap을 이용한 포트 스캐닝

Simcurity·2023년 4월 12일
0
post-thumbnail

1. 포트 스캐닝 (Port Scanning)이란?

은행 강도들은 한 은행을 털기 위해 강도 전 몇일 간 사전 작업을 거칩니다.
예를 들어, 은행의 구조를 파악하고 어느 곳이 열려있고 어느 곳으로 침입할지 등
마찬가지로, 포트 스캐닝은 IT 환경에서 공격자가 자신이 공격할 곳을 사전 조사를 하는 것이라 생각하면 됩니다.

TCP의 플래그는 URG, ACK, PSH, RST, SYN, FIN로 총 6개가 있는데, 포트 스캐닝 공격은 TCP 규약을 이용한 방법으로 변조한 플래그를 보내 서버 측의 반응으로 해당 포트의 open 여부를 판단하는 공격입니다.
예를 들어, 포트가 open시 FIN플래그만 설정된 패킷을 받은 경우 아무런 응답도 하지 않습니다.
이처럼 반응으로 포트의 open, close 여부를 판단합니다.

오픈 소스 도구인 nmap을 이용할 수 있고 다양한 방법으로 포트를 스캔할 수 있습니다.

스캔 종류
TCP Connect Scan (TCP open scan) : 포트 스캔
TCP Ack Scan : 방화벽 체크
UDP Scan : 포트 스캔
여기서부턴 Stealth scan
TCP Syn Scan (TCP Half-open scan) : 포트 스캔
TCP Fin Scan : 포트 스캔
TCP X-mas Scan : 포트 스캔
TCP Null Scan : 포트스캔

1-1) stealth scan이란?

stealth란 비밀, 조용 등의 뜻을 가지고 있습니다.
stealth scan이란 공격자가 스캔을 한 흔적을 남기지 않고 스캔을 하는 방식입니다.

원리를 보자면
TCP Syn Scan의 경우 3-Way handshake 과정에서 완전한 연결을 맺지 않고 강제로 연결을 종료시켜 연결이 맺어지지 않아 흔적이 남지 않습니다.

2. 실습

kali (공격자) : 192.168.6.129
ubuntu (스캔 대상 서버) : 192.168.6.135
실습할 포트는 23/tcp (open) 포트와 22/tcp (close) 포트

2-1) TCP Connect Scan (TCP open scan)

이 스캔 방식은 정상적으로 3-Way handshake 과정을 마치고 연결을 성립한 후에 공격자가 RST+ACK 패킷을 보내어 연결을 종료시킴으로써 포트를 스캔합니다.

kali에서

nmap -T4 -sT -p 23 192.168.6.135 입력

wireshark 패킷 확인

해석해보면 ubuntu서버와 3-Way handshake 과정을 환전히 이루고 RST+ACK 패킷을 보내 연결을 끊어냈습니다.
즉, 포트가 open 상태임을 알고 연결을 끊은 것입니다.

포트 open : SYN+ACK
포트 close : RST+ACK

 

2-2) TCP Ack Scan

이 스캔 방식은 해당 포트의 방화벽 정책을 확인하는 스캔으로 포트의 open과 close를 알아내는 것이 아니라 방화벽에 의해 차단되는지 파악하기 위한 스캔 방법입니다.
만약, 방화벽에 의해 차단된다면 응답이 없거나 ICMP Unreachable 메세지가 오고 차단되지 않는다면 RST 응답이 옵니다.

nmap -T4 -sA -p 23 192.168.6.135 입력

RST 패킷이 왔으므로 해당 포트는 방화벽에 의해 필터링 되지 않고 있습니다.
그래서 결과에 unfiltered 이라고 나옵니다.

그러면, 방화벽에 필터링이 되고 있는 22/tcp 포트를 스캔해보겠습니다.

ubuntu에서

iptables -A INPUT -p tcp --dport 22 -j DROP 입력

kali로 22번 포트를 스캔해보니


방화벽에 의해 필터링 되었다고 알려줍니다.
내가 DROP 정책을 사용하니 ICMP Unreachable 메세지도 오지 않고 응답이 없었습니다.

방화벽 필터링 시 : 응답 없음 또는 ICMP Unreachable
방화벽 필터링 안할 시 : RST 패킷



2-3) UDP Scan

이 스캔 방식은 UDP를 이용한 스캔으로 UDP 패킷을 보내어 UDP 응답이 오거나 응답이 없다면 포트가 open 상태이고 ICMP Unreachable 메세지가 온다면 포트가 close 상태임을 알 수 있습니다.

nmap -T4 -sU -p 123 192.168.6.135 입력 (UDP 서버인 NTP 서버를 이용헸다)

해석해 보면 현재 응답이 없으므로 포트가 open 상태임을 나타냅니다.

포트 open : 응답 없음 또는 UDP 응답
포트 close : ICMP Unreachable 메세지



2-4) TCP Syn Scan (TCP Half-open Scan)

이 스캔 방식은 stealth scan 방식 중 하나로 스캔 흔적을 남기지 않습니다.

nmap -T4 -sS -p 23 192.168.6.135 입력

해석해 보면 TCP Connect Scan과는 다르게 3-Way handshake 과정을 마치기 전에 ACK 패킷이 아닌 RST 패킷을 전송하여 포트가 열렸음을 알고 연결을 종료시킵니다.
만약 포트가 닫혀있다면 서버는 SYN 패킷을 받으면 SYN+ACK 패킷이 아닌 RST+ACK 패킷을 보냅니다.

포트 open : SYN+ACK 패킷 응답
포트 close : RST+ACK 응답



2-5) TCP Fin Scan, TCP X-mas Scan, TCP Null Scan

이 스캔 방식들도 stealth scan 방식입니다.
전송 후 아무런 응답이 없으면 포트가 open 상태이고, RST+ACK 응답이 온다면 포트가 close 상태라는 의미입니다.

TCP Fin Scan은 TCP 플래그를 FIN만 설정하여 전송합니다.

TCP X-mas Scan은 TCP 플래그를 URG, PSH, FIN을 설정하여 전송합니다.

TCP Null Scan은 TCP 플래그를 아무것도 설정하지 않고 전송합니다.

그런데, 이상한점이 분명 23/tcp 포트는 열려있는데 왜 open/filtered라고 나올까요?
방화벽에 의해 필터링 될 때를 생각해보면

방화벽에 의해 필터링 되면 응답이 없거나 DROP 정책
ICMP Unreachable 메세지가 옵니다.REJECT 정책

그렇기에 open 상태여서 패킷이 오지 않았지만 방화벽에 의해 응답이 없는 것일 수도 있기에 open|filtered라는 상태가 나온것입니다.
이 세가지 스캔을 쓰기 전엔 TCP ACK Scan을 먼저 사용해야 할 것입니다.

0개의 댓글