[네트워크][보안] nmap 의 활용

nmap 의 활용  

      

  작성자 : 홍석범  

최근 들어 인터넷 침입사고에 관한 이야기들이 언론에 많이 소개되고 있

다. 하지만 기사를 보면 간단한 컴퓨터 조작만으로 신기하게 시스템 접근

권한을 얻어내는, 영리한 도둑의 이야기 정도로 과장하고 있다. 그러나 실

제로 간단한 방법은 거의 없다. 한 컴퓨터 시스템을 크래킹하기 위해서는

우선 계획이 필요하다. 크래커는 목표로 하는 서버를 찾아야 하고, 그 다

음에 머신에 어떤 port가 열려있는지, 시스템이 문제를 해결하기 전에 찾

아야 한다.

이것은 일반적으로 스캐닝이라고 하는 것으로, 스캐닝을 통하여 네트워크

상에 있는 머신을 찾고, 무슨 port가 열려있는가를 보기 위해 그 머신들

을 테스트하는 작업(art)을 하게 된다. 크래커가 공격을 시작하기 전 첫번

째 전략은 바로 네트워크와 호스트들을 스캐닝하는 것이다. Nmap과 같은

툴을 이용한 스캐너들 즉, “나쁜 놈들(bad guys)”은 네트워크를 둘러보

고 취약한 목표를 찾는다. 한번 이런 목표들이 확인되면, 침입자는 열린

port를 스캔 할 수 있다. Nmap은 또한 TCP stack fingerprinting을 이용하

여 정확하게 스캔당한 머신의 타입을 결정할 수 있다.

이 문서는 각각의 네트워크에 대한 크래커의 시야를 파악하고, 보안 관리

자가 자신의 싸이트를 조사할 수 있도록 , Nmap의 사용법에 대해 다루고

있다. 침입자 또한 같은 툴을 이용하고 있으므로, 관리자는 그들처럼 자신

의 싸이트가 어떻게 보이는지 알 수 있을 것이다. 하나하나 설명해 나가면

서 여러분의 시스템보안에 이 문서가 도움이 될 수 있길 바란다.

Nmap은 GNU General Public License(GPL) 에 속하며,

http://www.insecure.org/nmap 에서 무료로 다운로드 받을 수

있다. tar

로 묶인 소스화일, 혹은 rpm으로 된 것도 있다. 필자가 이 문서를 쓰는 시

점에서 안정버젼은 2.12 이다. 약간의 그래픽이 첨가된 프로그램도 있지

만, 이 문서에서는 command-line에서의 Nmap 사용법에 대해서만 중점을 두

겠다.

Nmap의 사용법은 꽤 단순하다. command-line에서의 Nmap의 옵션(flag)은 –

s 를 붙이는데 스캔의 타입에 따라 다르다. 예를 들어 ping scan에서는

“-sP” 이다. 옵션 다음에는 목표 호스트 또는 네트워크를 명시해 준다.

Nmap의 성능은 루트로 실행했을 때 가장 최고가 된다. 왜냐하면 일반유저

는 Nmap이 활용하는 custom packet을 만들 수 있는 능력이 없기 때문이

다.

Nmap은 타겟을 설정함에 있어 매우 유연한 동작을 보인다. 네트워크 주소

값을 지정할 때 /mask를 덧붙여서 써주면 간단하게는 하나의 호스트, 혹

은 전체 네트워크를 스캔 할 수 있다. 만약 “victim/24” 라고 목표를 지

정한다면 네트워크 C class를 검색하고, 또한 “victim/16”이라고 한다

면 B class를 검색하게 된다.

덧붙여서 Nmap은 wild cards(*)를 이용하여 네트워크 검색이 가능하다. 예

를 들어 192.168.7.* 는 192.168.7.0/24 이라고 했을 때와 같은 결과 값

을 얻을 수 있게 된다. 혹은 192.168.7.1,4,8-12 와 같이 subnet에 있는

호스트를 선택적으로 스캔하는 것도 가능하다.

** Ping Sweeping **

침입자들은 Nmap을 가지고 전체네트워크의 타겟 들을 훑어볼 수 가 있다.

이는 보통 “-sP” 라고 써줌으로써 ping scan을 하는 것이다. 일반적으

로 Nmap은 ICMP echo와 TCP ACK를 각 호스트에 보내어 검색을 한다. 그러

면 Nmap이 보낸 패킷에 반응을 한 호스트들이 나타나게 된다.

# nmap -sP 192.168.7.0/24

Starting nmap V. 2.12 by Fyodor (fyodor at dhp.com,

www.insecure.org/nmap/)

Host (192.168.7.11) appears to be up.

Host (192.168.7.12) appears to be up.

Host (192.168.7.76) appears to be up.

Nmap run completed — 256 IP addresses (3 hosts up) scanned in 1

second

아마도 때때로 여러분은 단지 ICMP echo request를 보낼 필요없이 시스템

이 동작하는지 만을 파악하길 원할 것이다. 이런 경우 목표 네트워크를 스

캔하기 위해서 TCP “ping” 을 사용한다.

TCP “ping”은 목표 네트워크의 각각의 머신에게 ACK 를 보낸다. 각 머신

들은 TCP RST를 이용하여 응답하게 된다. TCP “ping”을 이용한 스캔을

위해서는 “-PT”라는 옵션을 첨가해주면 된다. 이번의 예제에서는 80번

tcp port(http)를 target port 로 이용해 보도록 하겠다. 이것은 목표의

라우터들 심지어 firewall 조차도 아마 통과할 수 있을 것이다. 주의할 것

은 머신이 살아있는지 죽어있는지를 결정하는데 호스트의 target port가

열려있을 필요가 없다는 것이다. 다음에 보이는 것이 실행의 예이다.

# nmap -sP -PT80 192.168.7.0/24

TCP probe port is 80

Starting nmap V. 2.12 by Fyodor (fyodor at dhp.com,

www.insecure.org/nmap/)

Host (192.168.7.11) appears to be up.

Host (192.168.7.12) appears to be up.

Host (192.168.7.76) appears to be up.

Nmap run completed — 256 IP addresses (3 hosts up) scanned in 1

second

침입자들은 목표 네트워크의 머신이 살아있는지 알 때, 으레 다음 단계로

port scanning을 한다.

port scanning의 여러가지 타입들이 Nmap을 통해 제공된다.( Tcp

connect, Tcp SYN, Stealth FIN, Xmas Tree, Null, UDP scan등 )

** Port Scanning **

Nmap은 connect() system call을 이용해 목표 호스트의 지정한 port에 접

속을 하고, TCP 의 3-way handshake를 완결 짓기 때문에 TCP 접속을 이용

한 침입자는 쉽게 탐지된다. 호스트 머신의 Log기록들에 침입자에 의해 열

려진 port들이 나타날 것이다. TCP connect scan은 “-sT” flag를 이용하

여 사용한다.

# nmap -sT 192.168.7.12

Starting nmap V. 2.12 by Fyodor

(fyodor at dhp.com, www.insecure.org/nmap/)

Interesting ports on (192.168.7.12):

Port State Protocol Service

7 open tcp echo

9 open tcp discard

13 open tcp daytime

19 open tcp chargen

21 open tcp ftp



Nmap run completed — 1 IP address (1 host up) scanned in 3 seconds

** Stealth Scanning **

만약 공격자가 목표 머신의 시스템 로그 기록에 그가 요청한 것들을 남기

지 않고 스캔하길 원한다면 무엇을 해야 할까? TCP SYN scans는 목표 머신

에 log기록을 거의 남기지 않는다. SYN scan은 TCP 연결경로의 첫번째 패

킷으로 SYN packet 을 보냄으로써 시작한다. 열린 port들은 SYN|ACK 로 응

답을 할 것이다. 그러나 이때 공격자가 ACK대신 RST를 전송하면 연결은 종

료되게 된다. 장점은 3-way handshake가 절대 완성되지 않는다는 것과 이

런 타입의 로그 기록을 남기는 싸이트는 거의 없다는 것이다. 한편 닫혀있

는 port들은 RST와 함께 처음의 SYN에 응답할 것이고 Nmap은 그 호스트의

port가 닫혀 있다는 것을 결정할 수 있게 된다. SYN scan은 “-sS” flag

를 이용하여 실행한다.

# nmap -sS 192.168.7.7

Starting nmap V. 2.12 by Fyodor

(fyodor at dhp.com, www.insecure.org/nmap/)

Interesting ports on saturnlink.nac.net

(192.168.7.7):

Port State Protocol Service

21 open tcp ftp

25 open tcp smtp

53 open tcp domain

80 open tcp http



Nmap run completed — 1 IP address (1 host up) scanned in 1 second

비록 SYN scan이 더 알아챌 수 없을지라도, 몇 가지 침임 탐지 대책들을

이용하여 탐지해 낼 수 있다. Stealth FIN, Xmas Tree, 그리고 Null scan

들은 packet filter나 firewall들을 피하는데 사용되어진다. 이런 3가지

스캔들은 닫힌 port들을 위해 RST를 리턴하고, 열린 포트들은 packet를 버

린다. FIN “-sF” 스캔은 FIN packet을 각각의 port로 보낼 것이고, 한

편 Xmas Tree scan “-sX”는 FIN, URG, PUSH flag를 모두 켠다. 그리고

Null scan “-sN”은 모든 flag를 끈다.

TCP 표준들에 Miscrosoft는 순종하고 있지 않기 때문에 FIN, Xmas Tree,

그리고 Null scan은 오직 Miscrosoft 운영체제가 아닌 경우에서만 영향을

발휘한다.

** UDP Scanning **

만약 침입자가 exploit(역자 주: 크래커들이 시스템을 침입하기 위해 사용

하는 특정한 프로그램들을 지칭함 )를 위해 특정 rpcbind hole이나 cDc

Back Orifice 같은 UDP hole을 찾는다면, 그/그녀는 어떤 UDP port가 열려

있는지 알기를 원할 것이다.

침입자는 UDP scan “-sU” 를 사용하여 호스트에 어떤 UDP port가 열려있

는지 알 수 있다. 만약 호스트에서 “port unreachable” 메세지를 리턴하

면 그 포트는 닫혀있는 것으로 간주된다. 대부분의 UNIX 호스트들은 ICMP

에러의 비율을 제한하고 있기 때문에 이런 방법은 시간을 많이 소비하게

된다. 다행히도 Nmap은 이런 비율을 탐지하고 그 자신의 속도를 낮추어 거

부했을 때의 메시지로 인해 목표가 오버플로어 되지 않도록 한다. 다음은

UDP scan의 실행결과이다.

# nmap -sU 192.168.7.7

WARNING: -sU is now UDP scan — for TCP FIN scan use -sF

Starting nmap V. 2.12 by Fyodor (fyodor at dhp.com,

www.insecure.org/nmap/)

Interesting ports on saturnlink.nac.net (192.168.7.7):

Port State Protocol Service

53 open udp domain

111 open udp sunrpc

123 open udp ntp

137 open udp netbios-ns

138 open udp netbios-dgm

177 open udp xdmcp

1024 open udp unknown

Nmap run completed — 1 IP address (1 host up) scanned in 2 seconds

** OS Fingerprinting

종종 침입자는 특정한 플랫폼에서만 실행되는 exploit를 실행하기 위해 그

와 유사한 운영체제를 찾을 것이다. 일반적으로 TCP/IP fingerprinting은

“-O” 옵션을 포함하여 원격으로 운영체제를 탐지해낸다. 이것은 ping

scan을 제외한 port scan과 결합하여 사용해야만 한다. Nmap은 호스트에

다른 타입의 조사를 행하여 OS를 찾아낸다. 원격으로 OS를 탐지해내기 위

한 다른 방법과 마찬가지로 ICP initial Sequence Number(ISN)의 패턴을

찾기 위해 SYN packet과 함께 선언하지 않은 flag를 리모트 호스트로 보내

고, BOGUS flag는 원격 호스트의 그 반응이 어떤 종류인가를 입증하기 위

해 FIN 조사같은 기능을 사용한다. 그것은 TCP stack에서 포함하고 있고

이를 Fingerprinting 하게 된다. 본 문서에서 stack fingerprinting 까지

논의하는 것은 한계가 있으므로 관심이 있는 사람은 Nmap의 저자인 Fyodor

에 의해 쓰여진 문서를 찾아보기 바란다.

(http://www.insecure.org/nmap/nmap-fingerprinting-article.html )

Nmap의 OS 탐지기능의 특징은 매우 정확하며, SYN scan을 포함하여 솔라리

스 2.7 머신의 stack을 fingerprin-ting 해서 증명하는 것과 같은 일에 효

과적인 도구이다.

# nmap -sS -O 192.168.7.12

Starting nmap V. 2.12 by Fyodor (fyodor at dhp.com,

www.insecure.org/nmap/)

Interesting ports on comet (192.168.7.12):

Port State Protocol Service

7 open tcp echo

9 open tcp discard

13 open tcp daytime

19 open tcp chargen

21 open tcp ftp



TCP Sequence Prediction: Class=random positive increments

Difficulty=17818 (Worthy challenge)

Remote operating system guess: Solaris 2.6 – 2.7

Nmap run completed — 1 IP address (1 host up) scanned in 5 seconds

TCP Sequence Prediction 부분을 주의해서 보기 바란다. -O 옵션을 주어

Nmap을 실행시키게 되면 TCP Sequence Prediction이 얼마나 어려운지도 알

려준다. 이것은 침입자가 호스트의 공격할 수 있는 위험성에 대한 정도로

써 얼마나 침입할 가치가 있는가를 포함하고 있기도 하다.

** Ident Scanning **

침입자는 종종 root로 돌아가는 web server와 같은 프로세스를 공격 대상

으로 삼을 때가 있다. 만약 타켓이 identd를 돌리고 있다면 침입자는 Nmap

을 사용하여 httpd 데몬이 어떤 소유자로 실행되고 있는지 찾아낼 수 있

다. 이는 TCP connect scan에 “-I” 옵션을 포함하여 실행한다. 아래에

한 리눅스 웹서버를 스캔 한 예가 있다.

# nmap -sT -p 80 -I -O www.yourserver.com

Starting nmap V. 2.12 by Fyodor (fyodor at dhp.com,

www.insecure.org/nmap/)

Interesting ports on www.yourserver.com (xxx.xxx.xxx.xxx):

Port State Protocol Service Owner

80 open tcp http root

TCP Sequence Prediction: Class=random positive increments

Difficulty=1140492 (Good luck!)

Remote operating system guess: Linux 2.1.122 – 2.1.132; 2.2.0-pre1 –

2.2.2

Nmap run completed — 1 IP address (1 host up) scanned in 1 second

만약 당신의 웹서버가 실수로 root로 실행되도록 설정되었다면, 당신에게

회사에서 밤샐 일이 생길지도 모른다.

루트로 아파치를 실행시키는 것은 나쁜 보안 습관이다. /etc/inetd.conf

에서 auth 부분을 주석 처리해서 ident 요청을 막아두어야 한다. 그리고

inetd를 재 실행 시킨다. ident 요청을 막는 다른 방법은 ipchains나 다

른 firewall을 이용하여 당신의 네트워크에 장벽을 설치하는 것이다. 이것

은 어떤 데몬이 누구의 소유로 동작하는지 당신의 싸이트를 조사해보려는

호기심 많은 무뢰한들을 막을 수 있을 것이다.

** Options **

이런 scan들에 덧붙여서 Nmap이 제공하는 무수한 옵션들을 소개하겠다.

그 중 하나가 “-PT” 이다. 우리는 이미 위에서 다루었다. 이 옵션은 타

겟 머신이나 네트워크의 일반적으로 filter되지않은 port들을 TCP ping으

로 직접 ping scan할 때 사용된다. 유용한 옵션으로 “-P0”가 있다. Nmap

은 port scan을 하기전에 TCP “ping”과 5 ICMP echo 모두를 이용하여 타

겟을 ping 할것이다. 만약 싸이트에서 ICMP와 TCP 검색을 막아 놓았을 경

우 보통 스캔되지 않을 것이다. 그래서 “-P0” 옵션을 이용하면 처음에

ping을 하지 않고 호스트를 스캔 하도록 Nmap에서 지원하고 있다.

한가지, 독자가 한번 사용하면 습관처럼 사용하게 될 옵션이 있다. 바로

“-v” 자세한 옵션이다. 이 옵션은 모든 스캔타입들과 함께 사용할 수 있

다. 이 옵션을 한번 혹은 두 번 사용해서 타켓 머신에 관한 보다 더 자세

한 정보를 얻을 수 있다.

특정한 port를 타겟으로 삼는 기능은 “-p” 옵션을 이용하여 실행된다.

예를 들어 침입자가 당신의 웹서버를 ftp(port 21), telnet(port 23),

name service(port 53),그리고 http(port 80) 에 관해 조사하고, 어떤 OS

를 쓰는지 까지 알길 원한다면 다음과 같은 SYN scan을 이용할 것이다.

# nmap -sS -p 21,23,53,80 -O -v www.yourserver.com

인기있는 exploit들이 모아져 있는 데이타베이스들에 의해, 풋내기 크래커

일지라도 당신의 머신에서 루트권한을 얻을 수 있는 방법을 곧 잘 찾아낼

수 있을 것이다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.