[네트워크][보안] 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들이 모아져 있는 데이타베이스들에 의해, 풋내기 크래커
일지라도 당신의 머신에서 루트권한을 얻을 수 있는 방법을 곧 잘 찾아낼
수 있을 것이다.