NMAP은 port Scanning 툴로서 호스트나 네트워크를 스캐닝 할 때, 아주 유용한 시스템 보안툴인 동시에, 해커에게는 강력한 해킹툴로 사용될 수 있습니다.
서버를 운영하다 보면 관리자 스스로도 어떤 포트가 열려있고, 또 어떤 서비스가 제공중인지 잘 모를때가 있습니다. 기억력이 나빠서나, 게을러서가 아니라 필요에 의해 자주 변경되므로 수시로 파악해서 기록해두지 않으면 잊어버리게 됩니다. 또 크래킹에 의해 생성된 백도어는 파악하기가 어렵습니다.
수 많은 포트와 서비스를 효과적으로 체크해서 관리하기 위해서 NMAP과 같은 포트 스캔 툴이 필요합니다. NMAP은 기존의 포트스캔툴에 비해 다양한 옵션과 방화벽 안쪽의 네트웍도 스캔할 수 있는 강력한 기능이 있습니다.
1. 설치
http://www.insecure.org/nmap nmap 의 홈페이지에서 소스파일을 내려 받습니다. 그 후에 설치할 디렉토리로 옮긴후에 압축을 풉니다. 그 후에 해당 디렉토리에서 ./configure 를 실행한 후에make, make install 을 실행한다.
[root@gyn nmap-2.54BETA30]# ./configure [root@gyn nmap-2.54BETA30]# make; make install
|
설치가 끝났으면 몇 가지 스캔 타입을 알아본다.
| | -sT | 일반적인 TCP 포트스캐닝. | -sS | 이른바 'half-open' 스캔으로 추적이 어렵다. | -sP | ping 을 이용한 일반적인 스캔. | -sU | UDP 포트 스캐닝. | -PO | 대상 호스트에 대한 ping 응답을 요청하지 않음 . log 기록과 filtering 을 피할 수 있다. | -PT | 일반적이 ICMP ping이 아닌 ACK 패킷으로 ping 을 보내고 RST 패킷으로 응답을 받는다. | -PI | 일반적인 ICMP ping 으로 방화벽이나 필터링에 의해 걸러진다. | -PB | ping 을 할 때 ICMP ping 과 TCP ping을 동시에 이용한다. | -PS | ping 을 할 때 ACK 패킷대신 SYN 패킷을 보내 스캔. | -O | 대상 호스트의 OS 판별. | -p | 대상 호스트의 특정 포트를 스캔하거나, 스캔할 포트의 범위를 지정. ex) -p 1-1024 | -D | Decoy 기능으로 대상 호스트에게 스캔을 실행한 호스트의 주소를 속인다. | -F | /etc/services 파일 내에 기술된 포트만 스캔. | -I | TCP 프로세서의 identd 정보를 가져온다. | -n | IP 주소를 DNS 호스트명으로 바꾸지 않는다. 속도가 빠르다. | -R | IP 주소를 DNS 호스트명으로 바꿔서 스캔. 속도가 느리다. | -o | 스캔 결과를 택스트 파일로 저장. | -i | 스캔 대상 호스트의 정보를 지정한 파일에서 읽어서 스캔. | -h | 도움말 보기 |
|
위의 스캔타입은 자주 쓰이는 내용이고 -h 옵션을 쓰거나 man page를 이용하면 아주 상세한 사용방법을 보실 수 있다.
[gyn@gyn gyn]$ man nmap NMAP(1) NMAP(1)NAME nmap - Network exploration tool and security scanner SYNOPSIS nmap [Scan Type(s)] [Options] <host or net #1 ... [#N]> ..중략..
[gyn@gyn gyn]$ nmap -h Nmap V. 2.54BETA30 Usage: nmap [Scan Type(s)] [Options] <host or net list> Some Common Scan Types ('*' options require root privileges) -sT TCP connect() port scan (default) * -sS TCP SYN stealth port scan (best all-around TCP scan) * -sU UDP port scan ..중략..
|
2. 사용.
몇가지 사용 예를 통해 nmap을 활용해 보시죠.
[root@gyn root]# nmap -sP xxx.xxx.xxx.xxxStarting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Host gyn (xxx.xxx.xxx.xxx) appears to be up. Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds
|
-sP 옵션으로 대상호스트가 살아 있음을 알아냈습니다. 이젠 특정 포트(80)를 검색해 보겠습니다.
[root@ home]# nmap -sP -PT80 xxx.xxx.xxx.xxx TCP probe port is 80Starting nmap V. 2.54BETA7 ( www.insecure.org/nmap/ ) Host (xxx.xxx.xxx.xxx) appears to be up. Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
|
지정된 포트가 아니라 대상호스트의 열린 포트를 모두 검색해 봅니다. [root@ home]# nmap -sT xxx.xxx.xxx.xxxStarting nmap V. 2.54BETA7 ( www.insecure.org/nmap/ ) Interesting ports on (xxx.xxx.xxx.xxx): (The 1526 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 53/tcp open domain 80/tcp open http Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds
|
대상 호스트의 열린 포트를 알수는 있지만 로그가 남으므로 위험합니다. 스텔스 스캔으로 감시를 피해야 겠지요.
[root@webserver log]# nmap -sS xxx.xxx.xxx.xxx Starting nmap V. 2.54BETA7 ( www.insecure.org/nmap/ ) Interesting ports on (xxx.xxx.xxx.xxx): (The 1526 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 53/tcp open domain 80/tcp open http Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds |
UDP port 스캔입니다. 시간이 많이 걸릴 수도 있습니다.
[root@gyn root]# nmap -sU localhostStarting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on gyn (127.0.0.1): (The 1450 ports scanned but not shown below are in state: closed) Port State Service 53/udp open domain 699/udp open unknown Nmap run completed -- 1 IP address (1 host up) scanned in 3 seconds
|
이번에는 -O 옵션으로 운영체제를 알아보겠습니다.
[root@webserver /root]# nmap -sS -O xxx.xxx.xxx.xxxStarting nmap V. 2.54BETA7 ( www.insecure.org/nmap/ ) Interesting ports on db (xxx.xxx.xxx.xxx): (The 1530 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 113/tcp open auth 3306/tcp open mysql TCP Sequence Prediction: Class=random positive increments Difficulty=2158992 (Good luck!) Remote operating system guess: Linux 2.1.122 - 2.2.16 Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds
|
몇가지 예를 통해 사용법을 알아 보았습니다.
|