NMAP – 오픈 스캔, 스텔스 스캔 자세히 들여다 보기

NMAP – 자세히 들여다 보기

Nmap은 흔히 해킹 도구로 알려져 있지만, 그건 사용하기 나름으로 쓰는 사람에 달려있다. 네트워크의 보안상의 문제점을 분석하는 Nmap은 시스템의 어떠한 포트가 열려 있나 보는 데 사용하는 네트워크 스캐너로, 사용하는 사람에 따라 결과가 상이하게 다르게 된다.

공격자가 사용하면 침입 준비이고 담당자가 사용한다면 훌륭한 사전 진단 도구가 될 수 있다. 네트워크에 있어서 중요한 서로의 연결 지점을 확인할 수 있는 Nmap은 다양한 기능으로 시스템에 오픈되어 있는 포트 리스트를 알아낼 수 있다.

Nmap의 서버의 특성을 이용하여 검색을 진행하는데, 바로 네트워크 요청에 따른 서버 반응, 즉 패턴을 알고 있어서 이를 이용하여 포트가 열려있는지, 혹은 IDS, IPS를 피해서 검색을 진행하게 된다. 그럼 Nmap에서 지원하는 스캔 모드는 어떻게 있는지 확인해 보자.

1. 오픈 포트 스캔

오픈 포트 확인은 일반적으로 제일 많이 사용하는 방법으로, 일반 연결 확인인 Open scan과 연결중 응답을 보내지 않는 Half-open scan 방식이 있다. 자주 사용되는 방식인 만큼 어떻게 스캔을 진행하는지 알아보자.

Open scan

Open scan 기술은 가장 일반적으로 진행하는 연결 가능한 포트를 검색하는 방법이다. 시스템은 전형적인 TCP/IP 3핸드 쉐이크를 사용해서 TCP 연결을 진행하는데, 3핸드 쉐이크는 다음과 같은 플래그를 설정하는 순서로 작동한다.

NMAP – 오픈 스캔, 스텔스 스캔 자세히 들여다 보기

[그림] 일반적인 TCP/IP 3핸드 쉐이크

위의 그림처럼 초기 연결 요청에 SYN+ACK로 응답이 오는 경우 Nmap에서는 LISTENING 즉 열려있다는 걸 의미한다. 반대로 닫힌 포트에선, 아래 그림과 같은 반응을 한다.

[그림] RST플래그를 ACK와 함께 보내서 포트가 닫혔음을 알린다

RST+ACK 플래그는 클라이언트의 연결 요청을 취소했다는 걸 의미한다. 즉 포트는 LISTENING 상태가 아니며, 닫혀있다는 얘기이다. 이와 같은 방식으로 검사를 진행하여 스캔 포트를 확인한다.

Nmap에서 이 방식을 이용하는 스캔 방식은 –sT 옵션이다.

Half open scan

이 연결은 IDS/IPS와 같은 탐지 장비를 우회하기 위해 생긴 기술이라 할 수 있다. 구 탐지 장비들은 네트워크 소켓이 생성되는 시점인 클라이언트에서 ACK 플래그를 보내어 연결이 완료되는 시점에 해당 포트로 네트워크로 접속하였다는 감시 로그를 생성하도록 구성되어 있었다. 이를 피하기 위해 서버로부터 SYN+ACK 신호를 받으면 클라이언트는 이를 연결하지 않고, 연결을 끊는 RST를 보내어 세션을 생성하지 않는다. 따라서 일부 IDS/IPS에서는 이러한 스캔을 감지하지 못하였다(최근 IDS/IPS는 이러한 네트워크 스캔도 탐지가 가능하다). 그리고, 이렇게 완전히 연결하지 않고 반절만 연결한다고 하여 Half open scan이라는 이름이 붙게 되었다. 그림으로는 다음과 같다.

[그림] 연결이 가능한 경우엔 RST 플래그를 보내서 연결을 끊는다

만약 서버에서 해당 포트가 닫혀있다는 의미인 RST+ACK가 아닌 SYN+RST 플래그로 응답이 오면, 하프 오픈 스캔에서는 더 이상 패킷을 보내지 않고, 오픈되어 있는 포트로 인식하고(스캔결과에 filtered로 표시) 다음 포트를 검색한다. SYN+RST 플래그는 포트 자체는 열려있지만, 방화벽등과 같은 보안설정을 통해 해당 포트로 연결 가능한 IP를 제한해 놓았을 때 나타나는 플래그로써 포트 자체는 열려있다고 볼 수 있다.

[그림] 닫힌 포트는 응답을 하지 않는다

이와 같이 스캔을 진행하는 방식은 –sS 옵션을 이용하는 것이다. 그럼 실습을 통해서 확인해 보자. 확인을 위해 Netmon을 함께 이용하도록 하자(프로세스별 네트워크 트래픽을 구분할 때는 와이어샤크보다 Netmon이 효과적이다).

172.16.100.0/24 전체 영역을 검사하는데, 앞서 배운 방법들을 이용하여 확인해 보자.

// 특별한 포트 옵션을 주지 않으면, 기본적으로 지정된 포트 리스트에 대해 검색한다(1000개).

nmap –sT 172.16.100.0/24

// 기본적으로 지정된 포트 리스트에 대해 검색한다(1000개). 단 SYN+RST에 응답하지 않아 스캔의도를 감춘다.

nmap –sS 172.16.100.0/24

2. 스탤스 스캔(차단 포트 스캔형)

앞서 확인한 2가지 스캔 모드는 일반적인 스캔모드라 할 수 있다. 지금부터는 스캔 작업을 진행하는데, 방화벽으로 차단한 영역을 검사하거나, IPS/IDS에서 탐지가 되지 않도록 진행할 때 유용하다. 즉 정상적인 연결이 아닌 그 외 플래그를 보냈을 때 발생하는 상대방의 응답신호를 이용하여 포트 활성화 유무를 판단한다. 하지만 그만큼 신뢰도도 떨어지게 된다. 이는 정확한 연결 정보가 아닌 상대방이 무응답 시 열려있는 포트로 인식하는 것이기 때문에, 동시에 여러 가지의 상황을 재현하여야 해당 포트의 오픈 여부를 신뢰할 수 있을 것이다. 그리고 이 명령들은 주로 유닉스 계열에서 동작하며, 윈도우 계열에서는 제대로 동작하지 않는다(유닉스계열 운영체제도 스캔 모드 별로 다르게 나타난다).

ACK, FIN, Null scan

네트워크 장비에서 단순히 특정 플래그 연결만 차단하는 경우(SYN 플래그 차단, 4부의 네트워크 보안에서 다룬다). 이 3가지 스캔모드를 이용하여 우회할 수 있다. ACK 혹은 FIN 아니면 플래그 없는 패킷을 보내면, 서버는 연결이 가능한 경우 응답을 하지 않게 된다.

[그림] 연결이 가능한 포트임을 확인할 수 있다

닫힌 포트의 경우 아래와 같이 RST 플래그를 보낸다.

[그림] RST를 수신 받으면 닫혀있는 포트임을 의미한다

각 스캔 모드별 사용 옵션은 다음과 같다.

-sA: ACK scan, RST 플래그를 받으면 unfiltered, 그 외는 filtered로 표시한다.

-sF: FIN scan, RST 플래그를 받으면

-sN: Null scan

하지만 여기서 얘기하는 open, filtered, unfiltered의 의미는 정확하지 않다. 그리니 RST 플래그를 받았다고 무조건 닫힌 포트로 생각해서는 안 된다.

앞서 얘기하였듯이 스텔스 스캔은 여러 포트를 각 모드 별로 시도해 보아야 해당 포트의 오픈 여부를 판단할 수 있다. 아래는 20개의 포트를 비교하여 22000 포트가 열려있는 포트임을 확인 할 수 있다.

nmap –sA –P0 –p 21990-22010 172.16.100.23

아래 그림과 같이 22000 포트가 필터링 되어 다른 포트와 다르다는 것은 열려 있는 포트일 가능성이 높다.

[그림] 다량의 포트 비교를 통해 22000이 열려있음을 추측할 수 있다

Xmas scan

Xmas 스캔 역시 방식은 ACK, FIN, Null scan과 비슷하다고 할 수 있다. 플래그를 전부 설정하여 보내고 응답이 없으면 오픈된 포트로 인식한다.

[그림] 모든 플래그를 설정하여 보낸다

이외에 사용 가능한 스캔 옵션에 대해 알아보자.

UDP로 오픈되어 있는 포트 확인은 –sU 옵션을 이용하여 가능하다. 리턴되는 메시지가 ICMP의 “Port unreachable”인 경우 사용되지 않는 포트로 인식하고, 그 외의 경우 연결 가능 포트로 인식한다. RPC(Remote procerdure call)이라는 원격 관리 명령으로 사용되는 포트에 대한 정보를 검색하는 –sR 옵션도 제공하지만, Nmap의 주 기능은 포트 오픈 여부 확인과는 거리가 있어, 실상 사용할 일은 많지 않다.

3. 스캔 부가 옵션

위와 같은 스캔 모드 이외 스캔을 진행시 사용할 조건을 아래 옵션을 통해 설정 할 수 있다.

-D: 미끼 기능으로 스캔을 실행한 호스트의 주소를 속인다.

-PT: ICMP가 아닌 지정한 포트를 이용해 TCP ping을 하여 호스트가 살아있는지 확인한다.

-P0: 스캔전 ICMP를 이용하여 호스트가 살아있는지 확인하는 작업을 생략한다(기본적으로는 ICMP로 확인한다).

-T: 스캔 진행시 다음 패킷을 보내는 시간을 조절 한다.

-p [n1]-[n2]: 지정한 포트 범위까지 스캔 한다. 단일 번호로 지정할 수 도 있다(포트옵션을 지정하지 않으면, 일반적으로 잘 알려진 1000개 포트들에 대해서만 검사한다).

-O: 운영체제에 대한 정보를 확인한다(추측되는 결과값이므로, 100%신뢰해서는 안 된다).

-f: 방화벽을 통과할 수 있도록 최초 패킷을 조각 낸다.

-n/-R: DNS 이름 풀기를 하지 않는다

-i <입력파일>: 파일에 저장된 리스트 정보를 기준으로 스캔 한다.

-v, -vv: 상세한 정보를 보여준다.

-h: 도움말

그리고 GUI를 이용하여 스캔 할 수 있는 도구인 Zenmap을 이용하면, 많은 양의 검색 결과와 프로파일 기능을 이용하여 자주 사용하는 옵션을 스크립트와 같이 구성할 수 있다.

아래 도구는 Nmap 인스톨러 버전 설치시 기본적으로 함께 설치 된다.

[그림] NMAP에 내장된 GUI도구 Zenmap

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.