Nmap 설치 및 사용법 이전 포스팅
정보보안기사 관련 포스팅 목록
Nmap의 다양한 옵션
안녕하세요. 오늘은 이전 포스팅에서 설치한 Nmap에서 더 많은 옵션들에 대하여 알아보겠습니다. 만약 Nmap 설치를 진행하지 않은 경우 맨위의 목록에서 이전 포스팅을 확인한 뒤에 진행해주세요.
이전 포스팅에서 알아본 Nmap의 활용 예제는 아래와 같았습니다.
Ping, TCP 포트, UDP 포트, 운영체제 정보 등의 스캔 방법을 알아보았습니다. 이처럼 완벽한 보안이 적용되지 않은 PC라면 조금의 실수 때문에 큰 공격을 받을 수 있다는 것을 알았습니다.
자, 만약 Nmap의 이러한 공격을 방어하기 위해 PC의 특정 포트에 대한 방화벽 및 방어 대책을 적용하였다면 어떻게 해야할까요? 스텔스 모드라고 들어보셨나요?
위와 같은 스텔스 폭격기는 아닙니다. 본래 스텔스란 무언가 레이더에 잡히지 않고 조용히 조용히 침투하여 공격을 수행하는 말을 의미합니다. 희미하죠.
Nmap도 이러한 스텔스 스캔 모드를 지원합니다.
자 그러면 다양한 옵션들에 대하여 동작 모드를 이해할 필요가 있습니다.
-sT
TCP Connect() API를 사용하여 특정 PC의 열려있는 모든 TCP 포트를 스캔합니다.
A 컴퓨터와 B 컴퓨터간 TCP 연결을 위해선 3단계의 Handshak 과정이 필요합니다. 이 과정은 "연결 요청", "연결 확인", "확인" 과정이며 프로토콜명은 "SYN", "SYN/ACK", "ACK" 입니다. 더 자세히 그 과정을 풀어보면 아래와 같습니다.
A 컴퓨터가 --> B 컴퓨터에게 연결을 요청합니다(SYN)
B 컴퓨터가 --> A 컴퓨터에게 연결 요청을 잘 확인했다고 응답을 줍니다(SYN/ACK)
A 컴퓨터가 --> B 컴퓨터에게 응답을 잘 확인했다고 응답을 줍니다(ACK)
위와 같은 과정을 3-handshake 과정이라고 말하며, TCP 연결을 위한 기본 과정입니다. 만약 상대 컴퓨터의 TCP 포트가 닫혀있는 상태라면 SYN 이후 상대는 RST/ACK 를 응답합니다.
-ST의 옵션은 이 과정을 특정 PC의 특정 포트에 요청하여 정상적으로 응답이 오는지 확인합니다. 다만 (SYN, SYN/ACK, ACK)의 과정을 모두 수행하기 때문에 공격 대상의 PC가 비정상 요청을 수행중이란것을 알아챌 수 있는 단점이 존재합니다.
이러한 단점을 보완하기 위해 있는 옵션이 있습니다.
-sS
-sS 옵션은 TCP Half Scan 옵션입니다. 말 그대로 절반만 스캔하는 것을 말합니다. 이러한 옵션을 스텔스 스캔이라고 말합니다. 더 쉽게 이해하기 위해서는 아래 표를 참고해주세요. 기존의 -sT 옵션과의 차이점입니다.
-sT 를 통해 TCP 포트가 열려있는지 확인하는 과정(3-handshake)
A 컴퓨터가 --> B 컴퓨터에게 연결을 요청합니다(SYN) B 컴퓨터가 --> A 컴퓨터에게 연결 요청을 잘 확인했다고 응답을 줍니다(SYN/ACK) A 컴퓨터가 --> B 컴퓨터에게 응답을 잘 확인했다고 응답을 줍니다(ACK) |
-sS 를 통해 TCP 포트가 열려있는지 확인하는 과정
A 컴퓨터가 --> B 컴퓨터에게 연결을 요청합니다(SYN) B 컴퓨터가 --> A 컴퓨터에게 연결 요청을 잘 확인했다고 응답을 줍니다(SYN/ACK) |
위 처럼 -sS는 3-handshake 과정을 모두 진행하는게 아니라 상대방에게 SYN/ACK가 오면 해당 TCP 포트가 열려있다고 판단하고 종료합니다. 이렇게 비정상 연결을 시도하면 상대방은 일반적으로 연결 요청이 왔었다는 기록을 삭제합니다. 따라서 공격시도를 감출수있게 됩니다. Nmap은 SYN/ACK를 수신하면 곧 바로 RST를 전달하여 연결을 종료시킵니다.
또한 상대방의 TCP포트가 열려있지 않은경우는 아래와 같이 알 수있습니다.
RST 수신
-sF, -sX, -sN
순서대로 -sF는 FIN을 상대 TCP 포트에 전송하여 어떻게 응답을 주는지 확인하여 포트가 열려있는지 확인하는 스텔스 옵션입니다. 요청 패킷의 TCP 헤더에 FIN 플래그를 세팅하여 전송합니다.
각 옵션의 이름은 다음과 같습니다.
Stealth FIN, Xmas Tree, Null Scan
A 컴퓨터가 --> B 컴퓨터에게 연결 종료를 알립니다(FIN) B 컴퓨터가 --> A 컴퓨터에게 응답을 무시합니다 |
위와 같이 비정상 FIN을 전송했을 때 응답이 오지 않는다면 해당 TCP 포트가 열려있는 것을 알수있으며 RST 응답이 온다면 포트가 닫혀있다는 사실을 알 수 있습니다.
-sX와 -sN도 동일한 과정을 통해 TCP 포트가 열려있는지 확인합니다. 다만 -sX는 TCP 요청에 FIN, PSH, URG 플래그를 세팅하여 전송하고 -sN은 TCP 헤더의 플래그를 아무것도 세팅하지 않고 전송한다는 차이점이 있습니다.
-sP, -sU, -sA
이전 포스팅에서 다뤘던 -sP 옵션은 Ping Scanning을 의미합니다. ICMP 패킷을 전송하여 상대가 응답하는지 확인하는 방식으로 해당 PC와 네트워크 통신이 가능한지 알 수 있습니다.
-sU 옵션은 UDP 포트가 열려있는지 확인하기 위해 사용합니다.
-sA 옵션은 ACK scan 으로서 해당 TCP 포트에 ACK패킷을 전송하여 상태를 확인합니다.
A 컴퓨터가 --> B 컴퓨터에게 응답을 합니다(ACK) B 컴퓨터가 --> A 컴퓨터에게 응답을 무시합니다 ----이 경우 방화벽 정책으로 인해 응답을 하지 않는 것이므로 해당 포트는 열려있다는 것을 알 수있습니다 B 컴퓨터가 --> A 컴퓨터에게 RST을 응답합니다 ----이 경우 포트가 닫혀있어 응답하지 않는 것을 알 수 있습니다 |
-p
"-p [포트 범위]" 옵션을 사용하여 스캔 대상의 포트를 선택할 수있습니다.
"-p 80-200" 의 경우 80번에서 200번까지의 포트를 스캔하겠다는 의미입니다.
"-p 80" 의 경우 80번만 스캔하겠다는 의미입니다.
-oN
스캔 결과를 파일로 저장합니다. "-oN scanResult.txt" 의 경우 현재 경로에 scanResult.txt 의 이름으로 저장됩니다.
보안 취약점 검사를 위한 도구
따라서 Nmap의 다양한 옵션을 사용하여 공격 도구로 사용하거나 방어를 위한 대책 도구로 사용될 수 있습니다.
다음 포스팅에서는 실제 이러한 옵션들을 사용한 예제를 포스팅 하도록 하겠습니다.