Port scanning에 가장 대표적인 유틸리티는 www.insecure.org에서 무료로 배포하는 nmap이란 tool을 말할 수 있다. 이 nmap은 positive scan(pos_scan)과 negative scan(super_scan)으로 나뉩니다.다.
pos_scan이란 Host에 특정 패킷을 보내면 특정 Timeout 내에 시스템의 열린 포트에서만 패킷에 반응하는 원리를 이용하고, super_scan은 System에 특정 패킷을 보내면 닫힌 포트에서만 패킷에 반응하는 원리를 이용합니다.
nmap은 다양한 Scan type과 options을 제공하는대 이를 사용해 원활한 정보 수집을 할 수 있습니다. DOS나 UNIX 시스템에서 목적지 Host(서버)나 Client에 네트워크 기능이 정상적인지 확인하는 툴은 유명하고도 유명한 "ping"툴이다. DOS나 UNIX나 같은 방식으로 사용 됩니다.
DOS : C:\> ping www.tistory.com
UNIX : [root:/] ping www.tistory.com
DOS에서 ping을 하면 다음과 같은 메시지가 나오게 됩니다.
C:\> ping 192.168.1.2
Pinging 192.168.1.2 with 32 bytes of data:
Reply from 192.168.1.2: bytes=32 time<1ms TTL=255
Reply from 192.168.1.2: bytes=32 time<1ms TTL=255
Reply from 192.168.1.2: bytes=32 time<1ms TTL=255
Reply from 192.168.1.2: bytes=32 time<1ms TTL=255
Ping statistics for 192.168.1.2:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
C:\>
그렇다면 nmap에서 단순히 서버가 살아있는지를 알아보기 위해서 옵션 -sP(Ping Scanning Method)를 사용할 수 있습니다. 이는 nmap이 스캐닝을 실시할 때 기본적으로 수생되는 것으로 서버가 ICMP 패킷에 대해서 제한을 하고 있다면 오탐될 수도 있습니다. 위와 같은 IP로 nmap을 하면 다음과 같은 결과물이 나옵니다다. 1
C:\> nmap -v -sP 192.168.1.2
Starting Nmap 4.76 ( http://nmap.org ) at 2008-11-09 20:00 대한민국 표준시
Initiating ARP Ping Scan at 20:00
Scanning 192.168.1.2 [1 port]
Completed ARP Ping Scan at 20:00, 0.45s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 20:00
Completed Parallel DNS resolution of 1 host. at 20:00, 0.00s elapsed
Host 192.168.1.2 appears to be up.
MAC Address: 00:30:6E:FF:FF:FF (Hewlett Packard)
Read data files from: C:\Program Files\Nmap
Nmap done: 1 IP address (1 host up) scanned in 4.53 seconds
Raw packets sent: 1 (42B) | Rcvd: 1 (42B)
C:\>
192.168.1.2는 실제로 사용중인 서버임으로 IP와 MAC Address부분을 수정했습니다. 처음 nmap을 쓸때 놀라웠던것은 MAC Address부분에 "00:30:6E:FF:FF:FF (Hewlett Packard)"라고 벤더 이름이 나올때 였습니다. 혹시나 해서 검색을 해보았는대 일치 하였습니다. 2
MAC Address search : http://www.coffer.com/mac_find/?string=00306E
참고로 이 기능은 대역으로도 스캐닝이 가능 합니다. 방법은 IP Class를 입력하는 방식입니다.
C:\> nmap -v -sP 192.168.1.0/24
일반적인 TCP Protocol에 대해서 스캐닝을 하고자 한다면 "-sT" 옵션을 사용할 수 있습니다.
C:\> nmap -v -sT 192.168.1.2
Starting Nmap 4.76 ( http://nmap.org ) at 2008-11-09 20:24 대한민국 표준시
Initiating ARP Ping Scan at 20:24
Scanning 192.168.1.2 [1 port]
Completed ARP Ping Scan at 20:24, 0.13s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 20:24
Completed Parallel DNS resolution of 1 host. at 20:24, 0.01s elapsed
Initiating Connect Scan at 20:24
Scanning 192.168.1.2 [1000 ports]
Discovered open port 9000/tcp on 192.168.1.2
Discovered open port 9900/tcp on 192.168.1.2
Increasing send delay for 192.168.1.2 from 0 to 5 due to 11 out of 22 dropped
robes since last increase.
Connect Scan Timing: About 32.00% done; ETC: 20:25 (0:01:03 remaining)
Increasing send delay for 192.168.1.2 from 5 to 10 due to 11 out of 16 dropped
probes since last increase.
Increasing send delay for 192.168.1.2 from 10 to 20 due to 11 out of 13 droppe
probes since last increase.
Discovered open port 4045/tcp on 192.168.1.2
Discovered open port 6001/tcp on 192.168.1.2
Discovered open port 5001/tcp on 192.168.1.2
Completed Connect Scan at 20:25, 92.16s elapsed (1000 total ports)
Host 192.168.1.2 appears to be up ... good.
Interesting ports on 192.168.1.2:
Not shown: 983 filtered ports
PORT STATE SERVICE
4045/tcp open lockd
5001/tcp open commplex-link
6001/tcp open X11:1
9000/tcp open unknown
9900/tcp open unknown
MAC Address: 00:30:6E:FF:FF:FF (Hewlett Packard)
Read data files from: C:\Program Files\Nmap
Nmap done: 1 IP address (1 host up) scanned in 92.80 seconds
Raw packets sent: 1 (42B) | Rcvd: 1 (42B)
C:\>
초록색으로 표시된 "-v" 옵션을 주지 않을 경우 결과값에 초록색 부분이 나오지 않습니다. 마찬가지로 실제로 사용중인 서버임으로 IP, MAC Address 및 특정 포트들은 삭제하여 실제 결과값과 틀립니다.
이런 단순한 TCP 스캐닝은 침입탐지 시스템에 의해서 탐지될 수 있는데, nmap은 이에 탐지되지 않고 우회하는 다양한 방법들을 제공합니다. 이에 대한 여러 옵션들이 존제 하는대 이 옵션은 아래를 참고하시기 바랍니다.
:: nmap 옵션들
-sS : 완전한 TCP 연결을 하지 않고 실제로 연결을 요청하는 것처럼 SYN 패킷을 보내고 나서 상대 호스트로부터 SYN/ACK 패킷이 오면 즉시 RST를 보내 연결을 끊는다. TCP SYN 스캐닝을 하기 위해선 루트 권한을 가지고 있어야 합니다.
-sT : 가장 기본적인 TCP 스캐닝으로 열려 있는 TCP 포트를 스캐닝 하지만 방화벽이나 라우터에 의해 쉽게 체크되어 필터링 될 수 있습니다.
-sU : UDP를 쓴다는 점에서 TCP 스캔 방법과는 대조됩니다. 앞서 스캐닝 기법에서 알아본 바와 같이 closed UDP port로 패킷을 보내면 ICMP_PORT_UNREACH error로 응답하는 것으로 닫힌 포트를 추측합니다. 그러나 UDP packet이나, ICMP error 메시지가 반드시 도착한다고 보장을 하지 못하므로 UDP scanner들은 패킷 전달 과정에서 누락된 패킷의 재전송 부분을 구현해야 합니다. 또한 문제가 되는 것은 스캔 속도입니다. 많은 OS들이 RFC 31812 section 4.3.2.8을 참조하여, ICMP error message rate들을 제거하기 때문에 느린 스캔 결과를 가져오게 됩니다. 4
-sP 일반적인 Ping을 이용한 스캔입니다.
-sF, -sX, -sN : Stealth FIN, Xmas Tree, Null scan modes
-sN : 패킷을 받은 호스트는 닫힌 포트에 대해서는 RST로 응답하고, 열린 포트이면 패킷을 버립니다. 단점으로는 패킷이 네트워크상의 문제로 유실되었을 때 NMAP은 패킷을 받을 수 없으므로 열린 포트로 오인할 수 있습니다.
-b<ftp relay host> : FTP 명령을 이용하는 방법으로 매개체가 될 호스트의 FTP로 접속해서 PORT 명령을 이용해 포트가 열려 있는지 확인합니다. 이 기법은 표적 호스트에서 추적하기가 어렵고 방화벽이나 packet filter 등을 통과할 수도 있지만, 스캔이 느리고 어떤 FTP에서는 아예 포트 기능을 무능력하게 할 수도 있습니다.
-PO : 호스트가 살아 있는지 Ping을 하지 않음으로써 log 파일에 기록될 가능성을 줄여 필터링을 피할 수도 있습니다.
-PT : 일반적인 ICMP Ping은 방화벽이나 packet filter에 의해 걸러지므로 Ping을 할 때 TCP port 80에 ACK 패킷을 보내 RST 응답이 오면 대상 호스트가 살아 있는 것으로 간주합니다.
-PT 00. : 사용자가 정한 포트에 ACK 패킷을 보내 확인합니다. 일반적인 높은 숫자(예: 32123)의 포트는 필터링을 하지 않기 때문에 이를 이용할 수 있지만, 어떤 호스트는 서비스되고 있는 포트 외에는 막아놓기도 합니다.
-PI(아이) : 일반적인 ICMP Ping입니다. 이 방법은 방화벽이나 packet filter에 의해 쉽게 걸러질 수 있지만, 대부분 시스템 관리자는 ICMP Ping에 대한 로그를 신경 쓰지 않음으로 ICMP로 Ping을 할 수 있는 호스트는 이 방법을 쓰는 것이 좋습니다.
-PB : Ping을 할 때 ICMP Ping과 TCP Ping을 동시에 사용합니다.
-PS : Ping을 할 때 ACK 패킷 대신 SYN 패킷을 보낸다. 어떤 방화벽은 스캔을 위해 보낸 ACK 패킷이 현재 진행 중인 TCP connection 과정의 일부가 아님을 판한하고 이 패킷을 차단할 수 있습니다. 이런 방화벽을 통과하기 위해서는 SYN 패킷을 이용하므로 높은 포트 번호는 사용할 수 없습니다.
-O : OS를 판별하기 위해서는 열린 포트와 닫힌 포트가 필요합니다. 닫힌 포트는 높은 포트 번호 중 랜덤하게 선택됩니다. 그러나 높은 포트를 필터링하는 호스트는 OS를 판별할 수 없고 유실된 패킷이 생기면 잘못된 판별이 생길 수 있습니다.
-p : 특정 포트를 스캔하거나 스캔할 포트의 범위를 지정해 줄 수 있다. "-p 23"은 호스트의 23번 포트만 스캔하고, "-p 20-30, 63000-"은 20 ~ 30번 포트와 63000 포트를 검색합니다.
-D : 스캔을 수행한 컴퓨터의 IP를 속이기 위해 임의의 다른 IP 속에 자신의 IP를 숨겨 놓습니다. 스캔의 대상이 된 호스트의 관리자는 decoy 호스트에 나열된 모든 IP 주소에서 스캔이 온 것으로 오인합니다. 따라서 관리자는 모든 decoy 호스트를 검색할 수 없으므로 추적을 포기하게 됩니다.
-F : 잘 알려진 포트인 /etc/service에 있는 포트만을 검색하기 때문에 속도가 빠릅니다. -I Get identd (rfc 1413) info on listening tcp processes. TCP 프로세스의 identd 정보를 가지고 옵니다.
-n : 숫자로 된 IP 주소를 DNS 서버에 있는 호스트명으로 바꾸지 않기 때문에 속도가 빨라집니다.
-R : 모든 숫자 IP 주소를 호스트명으로 바꿉니다. 속도가 느려집니다.
-o : 스캔한 결과를 텍스트 형식의 파일 이름으로 저장합니다.
-m : 스캔한 결과를 다른 프로그램이나 스크립트에서 읽기 쉬운 형식의 파일로 저장한다.
-i : 스캔의 대상이 되는 IP 주소나 호스트 네임을 파일에서 읽어 온다. 파일 이름대신 "-"를 적으면 표준 입력이 stdin에서 읽어 온다.
-g : 스캔할 포트 번호를 적는다.
-S : 스캔할 때 사용하는 패킷의 출발지 IP 주소를 바꾸고 싶을 때 사용한다.
-v : 스캔할 때 옵션을 하나씩 물어보는 질문형 모드로 전환한다.
-h : 도움말
-V : 실행 중인 nmap의 버전을 표시한다.
-e : 원하는 장치로 패킷을 보낸다. <devicename>에 원하는 장치명을 가입한다.
-q : 결과 값을 원하는 프로그램으로 보낸다. 기본은 "pine"이지만 현재 사용이 안된다.
참고서적 : 웹 해킹 패턴과 대응 / 사이텍 미디어
각주 ▽
- ICMP (Internet Control Message Protocol) ICMP는 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 에러를 알려주는 프로토콜로서 RFC 792에 정의되어있다. ICMP는 IP 데이터그램을 사용하지만, 메시지는 TCP/IP 소프트웨어에 의해 처리되며, 응용프로그램 사용자에게 직접 분명하게 보이지는 않는다. 일례로서, ping 명령어는 인터넷 접속을 테스트하기 위해 ICMP를 사용한다. [본문으로]
- MAC Address(Media Access Control Address) 통신을 하기 위해 필요한 각 장비에 부여된 48Bit로 이루어진 물리적인 주소다. 이 주소는 알아볼 수 있도록 16진수로 전환해서 표시되며 8Bit마다 하이픈(-) 이나 콜론(:), 점(.)으로 구분지어 쓰게 된다. 이때 MAC Address에 앞 24Bit는 Vendor 즉 생산자에 부여된 고유번호 이고, 뒤에 24Bit는 벤더에서 각 장비에 부여하는 인련번호이다. 예) 12:34:56:AB:CD:EF 12:34:56 : 벤더 고유번호 AB:CD:EF : 장비 인련번호 [본문으로]
- UDP(User Datagram Protocol) UDP는 IP를 사용하는 네트웍 내에서 컴퓨터들 간에 메시지들이 교환될 때 제한된 서비스만을 제공하는 통신 프로토콜이다. UDP는 TCP의 대안(代案)이며, IP와 함께 쓰일 때에는 UDP/IP라고 표현하기도 한다. TCP와 마찬가지로 UDP도 한 컴퓨터에서 다른 컴퓨터로 데이터그램이라고 불리는 실제 데이터 단위를 받기 위해 IP를 사용한다. 그러나 UDP는 TCP와는 달리, 메시지를 패킷(데이터그램)으로 나누고, 반대편에서 재조립하는 등의 서비스는 제공하지 않으며, 특히 도착하는 데이터 패킷들의 순서를 제공하지 않는다. 이 말은 UDP를 사용하는 응용프로그램은, 전체 메시지가 올바른 순서로 도착했는지에 대해 확인할 수 있어야한다는 것을 의미한다. 교환해야할 데이터가 매우 적은(그러므로 재조립해야할 메시지도 매우 적은) 네트웍 응용 프로그램들은 처리시간 단축을 위해 TCP 보다 UDP를 더 좋아할 수 있다. 일례로 TFTP는 TCP 대신에 UDP를 사용한다. UDP는 IP 계층에서 제공되지 않는 두 개의 서비스를 제공하는데, 하나는 다른 사용자 요청을 구분하기 위한 포트 번호와, 도착한 데이터의 손상여부를 확인하기 위한 체크섬 기능이다. OSI 통신 모델에서, UDP는 TCP와 마찬가지로 4계층인 트랜스포트 계층에 속한다. [본문으로]
- RFC(Request For Comments) IETF(Internet Engineering Task Force)에서, 인터넷에서 기술을 구현하는데에 필요한 절차 등을 제공하는 공문서 간행물이다. 참조 : http://100.naver.com/100.nhn?docid=718255 [본문으로]