IT 이야기2009. 11. 6. 10:15
외부에서 Nmap을 접속하게 되면 25/tcp, 80/tcp, 53/udp가 열려 있음을 알 수 있다. 2,200개의 잘 알려진 포트를 통해 nmap은 mail server(SMTP), webserver(HTTP) 그리고 name server(DNS)등에 대한 응답을 받고 대부분이 정확한 응답값을 보여준다. 하지만 타켁호스트가 포트를 바꿨을 수 있으므로 당신은 전적으로 이것에 의존하면 안된다.

설사 Nmap이 맞다고 해도 SMTP, HTTP, 그리고 DNS에 대한 많은 정보를 얻을 수 있는 것은 아니다. 당신이 당신의 클라이언트나 친구의 호스트를 검색할때 어떠한 메일서버를 쓰는지 혹은 DNS서버가 어떤 것인지가 궁금할 것이다. 어떤 버전의 서버인가를 통해 그 취약점을 알 수 있기 때문이다. 버전의 탐색을 통해 당신은 원하는 정보를 얻을 수 있게 될 것이다.

스캔을 통해 TCP나 UDP의 오픈상태임을 확인후에 버전 탐색을 통해 정확히 해당포트로 어떠한 서비스가 이루어 지는지 알 수 있다. nmap-service-probes 데이타베이스를 통해 다양한 포트의 다양한 서비스 매칭해봄으로 어떠한 서비스가 이루어지고 있는지 짐작할 수 있다. Nmap 은 서비스 프로토콜(예: ftp, ssh, telnet, http)에 대해 정의하고 프로그램 이름(예: ISC BIND, Apache httpd, Solaris telnetd)에 대해 정의하고, 버전넘버, 호스트이름, 장비타입 (예: printer, router)에 대해 정의하고, OS형태에 대해 정의하고, 그 외 자질구레한 것들(X 서버가 열려있는지, SSH의 프로토콜 버전, 또는 KaZaA의 사용자이름)에 대해 정의하게 된다. 물론 Nmap이 모든 정보를 제공하지는 않는다. 만약 Nmap이 OpenSSL과 컴파일되어 있다면, 암호화되어 있는 층 뒤의 서비스에 대해 탐색하게 될 것이다. RPC 서비스가 탐지된다면, 자동으로 RPC grinder(-sR)이 RPC프로그램과 버전을 알기 위하여 탐색되어진다. 몇몇 UDP포트는 탐지가 불가능할때는 open|filtered상태로 남게 된다. 버전탐지가 이루어진다면 open으로 표현될 것이고 그렇지 않다면 open|filtered로 표현될 것이다. TCP에서의 open|filtered도 같은 형태로 진행된다. 주목할 점은 Nmap -A는 다른 어떠한 스캔보다 우선해서 스캔하게 된다. 버전 스캔은 다음에 좀더 자세히 다루게 된다.

Nmap이 응답은 받았지만 데이타베이스에서 매칭되는 자료를 찾지 못할때는 특별한 자료와 주소를 남기게 되므로 차후에 개인적으로 탐지가 가능하다. Nmap은 3,000개의 패턴에 350개의 포르토콜을 매치시킨다.

버전탐지는 다음과 같은 옵션으로 실행된다.

-sV (version detection) : 위에서 나열했던것 같이 버전 탐지 옵션이다.

--allports(모든 포트의 스캔) : 기본으로 Nmap은 TCP 9100포트를 생략하는데 이는 프린터가 사용하므로 HTTP GET 요청이나 SSL session 요청을 많이 이루기 때문이다. 이런 형태는 Exclude를 사용하던가 아니면 --allports를 사용해서 모든 포트를 스캔할 수 도 있다.

--version-intensity (버전스캔의 감도 조절) : 버전스캔 사용시 Nmap은 여러번의 탐색을 보내는데 낮은 수의(낮은감도의) 탐색은 일반적으로 사용되는 포트의 스캔에 적합하고 높은 수일수록 희귀한 서비스의 사용을 찾아내는데 적합하다. 높은 번호일수록 정확하게 찾아낼 확률이 높다. 감도는 0과 9사이의 값을 지정해야 하고 기본값은 7이다. nmap-service-probe ports를 통한 스캔은 위의 감도가 무시된다.

--version-lignt (light모드) : 이 옵션은 --version-intensity 2와 같은 목적으로 사용한다. 이는 light모드를 좀더 빠르게 스캔하지만 정확히 인지하는 면에서는 떨어지는 성능을 보인다.

--version-all (모든 서비스의 스캔) : --version-intensity 9와 같은 걸로 하나하나의 서비스에 대해 스캔하게 된다.

--version-trace(버전스캔 활동의 추적) : 이 옵션을 통해 어떠한 일을 하는지 디버깅 할 수 있다. --packet-trace와 함께 사용할 수 있다.

-sR (RPC 스캔) : 이 옵션은 다른 옵션과 함께 사용 가능하다. open으로 판명된 모든 포트에 대해 SunRPC프로그램 NULL명령어를 보내고 이를 통해 이들이 RPC인지 혹은 RPC이면 어떠한 서비스와 버전을 사용하는지 스캔하게 된다. 그러므로 해당 호스트가 방화벽 뒤에 있다고 해도 rpcinfo -p와 같은 정보를 얻게 된다. RPC스캔에서는 패킷의 변형이 불가능하고 -sV를 통해 자동적으로 실행되게 된다.

원본링크:http://nmap.org/book/man-version-detection.html
Posted by 구텐모르겐
IT 이야기2009. 11. 4. 03:30


Nmap은 옵션을 통해 어떤 포트가 스캔되었는지에 대한 설명과 순서대로 혹은 무작위로 나타낼 수 있다. 기본적으로 Nmap은 100개의 대표적인 포트를 스캔한다.

-p (해당범위의 포트를 스캔) : 해당 옵션을 통해 사용자는 어떤 포트를 스캔할지를 정할 수 있고 이 옵션을 통해 기본값은 무시된다. 1-1023과 같이 범위값이 -으로 연결되어 있으면 된다. 처음값과 마지막값이 생략되는데 1-65535의 값을 사용하기 때문이다. 만약 0번포트를 스캔하고 싶다면 명확히 언급해 줘야 한다. IP프로트콜 스캐닝(-s0)은 0-255의 값을 스캔하게 된다.

TCP나 UDP를 스캔할때는 T:나 U:뒤에 특정 포트값을 입력함으로 스캔할 수 있다. 그러므로 -p U:53, 111, 137, T:21-25, 80, 139, 8080이라고 하면 UDP 53, 111,137포트를 스캔후에 TCP포트들을 순서대로 스캔하게 된다. 만약 TCP와 UDP 모두를 스캔한다고 할때 -sU를 명시해줘야 하고 TCP스캔 타입(-sS, -sF, -sT)을 명시해 줘야 한다. 프로토콜에 대한 명시가 없으면 모든 포르토콜에 대해 스캔하게 된다.

nmap-service를 통해서 포트들은 이름으로 표현되기도 하고 *나 ?같은 특수문자도 사용가능하다.만약 FTP와 http로 시작하는 모든 포트를 스캔하고 싶다면 -p ftp,http*과 같이 하면 된다.

포트범위는 사각브라켓으로 표현되고 -p [0-1024]라고 표현하면 1024이내의 모든 포트를 스캔하게 된다.

-F(제한적이지만 빠른 스캔) : 적은 양의 포트를 스캔할때 사용한다. 기본적으로 nmap은 1,000개의 포트를 스캔하지만 -F는 100개만 스캔한다.

Nmap은 nmap-service파일을 필요로 하는데 이를 통해 어떤 포트들이 가장 많이 쓰이는지 알 수 있다. -F는 가장 범용적인 포트들과 0-1024의 포트들을 스캔한다.

-r (무작위 해제) : Nmap은 포트를 무작위로 스캔하게 된다. 무작위적인 포트스캔이 추천되긴 하지만 본인의 필요에 의해 -r의 사용이 가능하다.

--port-ratio (0과 1사이의 소숫점) : nmap-service파일에 나와있는 포트들을 명시된 포트보다 많은 비율로 스캔하게 된다.

--top-ports (1보다 큰 정수) : nmap-service에 있는 N개의 높은 비율의 포트를 스캔한다.

원본링크: http://nmap.org/book/man-port-specification.html
Posted by 구텐모르겐
IT 이야기2009. 10. 23. 15:41


초보자의 입장에서 차를 고친다면, 기본적인 툴로만 작업하기에 그 수리는 수시간이 걸릴것이다. 또한 수리하기를 포기하고 정비사에게 그 차를 가져갔을때 정비사는 힘들이지 않고 손쉽게 차를 고치는 것을 우리는 종종 겪는다. 포트스캐닝의 기술 또한 이와 같다. 전문가는 다양한 포트스캔의 기술을 알고 있고 적절한 작업에 적절한 조합을 이용할 것이다. 하지만 비전문적인 사용자들은 기본적인 SYN 스캔만을 해댈것이다. Nmap이 무료인 관계로 포트스캔을 마스터하기 위한 것은 지식만이 필요할 뿐이다. 당신이 풀수 없는 문제라면 그것은 수천달라에 해당하는 자동차 부품을 교체하는 비용과 맞먹을 것이다.

대부분의 스캔형태는 privileged사용자에게 제한되어 있다. 이유는 Unix시스템에서는 raw패킷은 루트사용자만이 접근가능하기 때문이다. winpcap이 깔려있는 윈도우에서는 일반사용자도 접근이 가능하긴 하지만 가급적 윈도우를 사용한다면 관리자모드이기를 권한다. 1997년에 root 권한을 가지고 있는 사람들만이 접근할 수 있다는 제한은 많은 일반 사용자들에게는 제한이 되었다. 하지만 이제 세상은 변하고 컴퓨터는 싸졌고 일반 사람들도 가정용 Unix시스템(리눅스)을 사용할 수 있다. 윈도우 버전의 nmap이 사용가능하고 데스크탑에서 실행 가능하다. 이러한 이유로 privileged 사용자로 사용하지 않을 이유가 없고 nmap도 이런 관리자 모드일때 더욱 강력하고 유연하게 사용가능하다.

기억해야 할 것은 nmap은 항상 타겟호스트(혹은 방화벽)에게서 받은 정보를 기초로 해서 우리에게 보여준다는 것이다. 타겟호스트가 믿을만한 사이트가 아닐수 있고 거짓 정보를 흘릴수 있지만 일반적으로 non-RFC-compliant 호스트들이 응답하지 않는 경우가 대부분이다. FIN, NULL, Xmas스캔등은 이 문제에 대해 해결을 제시해준다. 이 같은 문제는 앞으로 나열될 특정 스캔타입의 설명에서 다루게 된다.

이 장은 Nmap에서 다뤄지는 기술에 대해 나열하였다. UDP스캔(-sU)와 SCTP스캔(-sY, -sZ)들은 TCP스캔 타입과 혼용될 수 있지만 일반적으로는 한가지의 스캔방법은 한번씩밖에 이루어지지 않는다. 권한이 없어서 연결스캔을 보내지 않는이상 nmap은 SYN스캔을 기본으로 보내게 된다. 다음의 나열된 스캔방법중 FTP bounce 스캔만이 관리자 권한이 없어도 사용가능한 것이다.

-sS (TCP SYN 스캔) : SYN스캔은 기본스캔으로써 수천개의 포트를 몇초안에 처리할 정도로 빠르고 방화벽의 네트워크에 영향을 미치지 않는정도로 스캔한다. SYN스캔은 TCP연결을 완전히 맺지 않음으로 타겟호스트가 눈치채지 않게 스캔한다. 또한 FIN/NULL/Xmas와는 다르게 다른 명령어와 혼용해서 사용가능하다. 이것은 upen, closed 그리고 filtered의 상태로 표현된다.

-sT (TCP Connection 스캔) : 이 명령어 또한 기본스캔으로 SYN스캔이 이루어지지 않았을 경우 실행된다. 이것은 사용자가 관리자모드가 아니거나 IPv6네트워크를 스캔할때 사용된다. 다른 스캔처럼 원본패킷을 보내는것이 아니라 connection을 맺음으로써 타겟호스트의 OS등을 알아낼 수 있다. 이는 웹브라우저, p2p 클라이언트, 그리고 다른 많은 네트워크 어플리케이션을 구동할 수 있는 정도의 높은 권한을 요구한다. Berkeley sockets API라 불리는 이 명령어는 원본패킷을 보내기 보다는 API를 보냄으로써 각각의 연결시도를 통해 상태정보를 얻을 수 있다.
만약 SYN스캔이 가능할 경우는 이것이 가장 적절한 방법이 될 수 있다. nmap은 권한이 적을수록 덜 효과적인 스캔이 이루어진다. SYN과 같이 연결중간에 정지하는 것이 아니라 타겟호스트와의 완벽한 연결을 맺는다. 이는 스캔시간이 더 걸릴뿐만 아니라 타겟호스트에 로그를 남기게 된다. 최근의 IDS시스템은 이러한 스캔을 탐지하겠지만 보통의 시스템들은 이러한 침입에 대한 시스템이 되어 있지 않다. 연결을 맺은후에 데이터를 전송하지 않으므로 Unix시스템은 syslog에 기록을 남길 것이고 때로는 암호화된 에러메세지를 남기기도 한다. 혹 매우 취약한 시스템에서는 드믈지만 충돌이 생기기도 한다. 관리자는 그의 로그에 많은 연결상태 (connection status)가 남아있다면 이것이 connect스캔인지 알아야 한다.

원본링크:http://nmap.org/book/man-port-scanning-techniques.html
Posted by 구텐모르겐
IT 이야기2009. 10. 21. 03:16


Nmap은 계속적으로 기능이 업그레이드 되었고 포트스캔에 대한 기능도 효율적으로 바뀌었지만 중요한 것들은 변함이 없다. 기본적인 nmap 명령어는 1660개의 TCP포트를 스캔한다. 다른 포트스캔 프로그램들은 open이나 closed로 표현되는 것에 반해 nmap은 open, closed, filtered, unfiltered, open|filtered, closed|filtered로 나뉘게 된다.

이러한 상태들은 그 자체로는 의미가 없지만 nmap에서는 타겟호스트에 대한 설명이 포함되어 있다. 예를들어 같은 네트워크에서 nmap으로 135/tcp를 스캔할 경우 open으로 나올수 있지만 인터넷에서 스캔할 경우에는 filtered로 나올 수 있다.

다음의 6가지로 nmap은 타겟호스트의 상태를 구분한다.

open : TCP나 UDP 혹은 SCTP와 같은 포트를 사용하는 프로그램을 서치하게 된다. 이러한 포트를 찾는 것이 포트스캔의 가장 주요한 목적이다. 보안에 신경을 쓰고 있는 사람이라면 이러한 포트들이 공격루트가 되는 것은 인지하고 있다. 공격의 의도를 가지고 있거나 단순한 호기심으로 접근하는 사람들은 이런 open포트에 관심을 가지게 되고 관리자들은 이러한 포트들을 적법한 사용자들에게 서비스를 제공하는 한도내에서 제한한다. 포트를 open상태로 놓는것은 네트워크 상에서 통신이 가능한 상태이므로 해당 포트를 이용하는 서비스를 제공할 수도 있다.

closed: closed는 접근가능하다라는 의미이다. (즉, 호스트가 탐색패킷을 받았고 응답했다는 뜻이기 때문이다) 하지만 어떠한 프로그램이 해당포트를 사용하는지는 알 수 없다. 이러한 포트는 해당 IP주소의 컴퓨터가 살아있음을 보여주고 OS 버전을 알려주기도 한다. closed상태에서는 외부의 접근이 가능하므로 관리자는 방화벽을 통해 이를 차단할 필요가 있고 공격자는 filtered라는 메세지를 받을 것이다.

filtered : nmap은 filtered라는 리포트를 통해서 호스트가 어떠한 상태인지 알 수 없다. 이는 패킷이 필터링되었기 때문인데 이는 방화벽에 막혔을 수도 있고 라우터의 룰에 의해 차단되었을 수 있고 혹은 호스트의 방화벽소프트워어때문일 수도 있다. 이러한 최소한의 정보도 얻지 못하는 포트들은 공격자들을 무기력하게 만든다. 때로는 ICMP에러메세지를 보내기도 하지만 대부분의 패킷들은 drop되고 무시된다. 이러한 상태에서는 nmap은 재차 탐색을 시도하는데 네트워크가 혼잡해서 일수도 있기 때문이다. 이 상태에서는 스캔의 속도가 급격히 떨어지게 된다.

unfiltered : unfiltered는 해당포트가 접근 가능하다는 뜻이다. 하지만 nmap은 이것이 open인지 closed인지 구분할 수는 없다. 다만 방화벽에서 맵핑시에 룰셋으로 사용되는 ACK스캔일때 이 상태를 알려준다. Window Scan, SYN scan, FIN scan을 통해서 해당포트가 open인지 closed인지 알아 볼 수 있다.

open|filtered : 포트가 open인지 filtered인지 알 수 없을 때 다음과 같은 상태로 표시된다. 이러한 상태는 해당포트가 응답이 없거나 중간에서 드랍되었기 때문이다. 그러므로 nmap으로는 open인지 filtered인지 알수 없다. UDP, IP protocol, FIN, NULL 그리고 Xmas스캔을 통해 자세히 알아볼수 있다.

closed|filtered : 포트가 closed인지 filtered인지 알수 없을때 다음과 같은 상태로 표시된다.

원문링크: http://nmap.org/book/man-port-scanning-basics.html
Posted by 구텐모르겐
IT 이야기2009. 9. 16. 08:48
-PN (No Ping) 이 옵션은 Nmap의 탐색기능을 실행시키지 않는다. 일반적으로 Nmap은 액티브한 호스트를 찾기 위해 과중한 탐색명령을 수행하곤 한다. 기본적으로 port scans, version detection, 또는 OS 탐색과 같은 부하가 많이 걸리는 작업이 실행되고 -PN옵션을 이용해서 이러한 과부하를 줄여주면 지정된 타겟 호스트만을 검색하게 된다. 그래서 만약 클래스B의 네트웍(/16)을 스캔할시에 65,536개의 호스트가 액티브하다는 가정하에 스캔해야 하지만 위 옵션으로 리스트 스캔에서와 같은 결과물은 생략되어질 것이다. 이더넷 네트웍에서는 --send-ip가 설정되어있지 않다면 ARP스캔이 사용되어질 것이다.왜냐하면 Nmap은 Mac어드레스를 통해 좀더 자세히 호스트를 탐색하기 때문이다. 원래 이 옵션은 P0(숫자)로 사용되어졌지만 PO(문자)와 혼동되어서 PN으로 변경되었다.



-PS (TCP SYN Ping) 이 옵션은 Syn flag set의 빈 TCP패킷을 보낸다. 타겟 포트는 80이고 (nmap.h에서 DEFAULT_TCP_PROBE_PORT_SPEC에서 수정가능하다). 명령문은 -P와 같긴 하지만 T와 같은 포트타입의 규정과 같은 명령어는 사용되지 않는다. 예를 들어 -PS22, _ps25,80,113,1050,35000과 같이 사용될 수 있다. -PS와 포트번호사이에는 여백이 있지 않다는 것을 알아야 한다. 만약 다른 여러개의 탐색이 이루어 진다면 이는 병렬로 탐색되어진다.

SYN flag는 당신이 목표 호스트에 연결을 시도하는 것으로 보이게 되고 대부분의 목표 포트는 닫혀있고 RST(리셋) 패킷이 돌아온다. 만약 포트가 열려 있다면 SYN/ACK의 응답으로 두번째 단계인 TCP three-way-handshake가 이루어진다. Nmap을 실행하고 있는 컴퓨터에서는 ACK를 보내는 것이 아니라 RST를 보내고 이 RST패킷은 Nmap자체에서가 아닌 Nmap이 돌고 있는 시스템에서 SYN/ACK로 응답하게 한다.

Nmap은 포트가 열려 있건 그렇지 않건 상관하지 않고 RST이건 SYN/AcK이건 호스트가 응답한다는 것을 보는게 더 중요하다.

Unix에서는 오직 제한적인 관리자만이 raw TCP 패킷을 보낼 수 있다. 만약 연결이 성공적으로 이루어 졌거나 Econnrefused실패가 될 경우에는 TCP스택은 SYN/ACK나 RST를 받았음에 분명하고 호스트는 액티브하다고 검색되어진다. 만일 연결이 이루어지지 않고 타임아웃까지 시간이 지연될 경우에는 호스트는 다운으로 검색되어진다. 이것은 IPv6에서도 사용되어지지만 raw IPv6는 적용가능하지 않다.

-PA (TCP ACK Ping) TCP ACK ping은 SYN ping과 상당히 유사하지만 차이점은 SYN flag대신에 TCP ACK flag를 보낸다는 것이다. ACK 패킷은 TCP 연결이 이루어진 상태에서 정보를 알아보기 위한 것이어서 상대 호스트는 RST패킷으로 반응하고 프로새스에 대한 정보를 노출하게 된다.

-PA옵션은 SYN 탐색(80)과 같게 사용되어 지고 목표 포트에 대한 리스트도 같은 형태로 나타난다. 만약 권한이 없는 사용자일 경우나 IPv6일 경우는 위와 같은 차선책으로 탐색된다. 이 방법은 ACK를 보내는것이 아니라 SYN을 보내므로 완벽한 방법은 아니다.

SYN과 ACK를 동시에 보내는 이유는 방화벽을 통과할수 있는 방법을 최대한 알아보기 위해서이다. 많은 관리자들은 라우터와 방화벽에 기본적은 사용을 제외하고는 SYN 패킷을 막아놓는다. 이것은 외부에서의 연결시도를 저지하고 내부사용자들의 외부연결은 자유롭게 해놓았을 것이다. 이러한 상황에서 SYN ping 탐사(-PS)는 막히겠지만 ACK 탐사는 이러한 룰을 뚫을수 있을 것이다.

또 다른 형태로 호스트가 알지 못하는 패킷은 막는 시스템으로 예전에는 최신기술이었지만 지금은 대부분의 장비에 적용되는 기술이다. 리눅스의 Netfilter/iptables은 --state옵션으로 이 기능을 지원한다. 이러한 시스템에서는 SYN패킷은 차단되고 예기치못한 ACK패킷도 차단되므로 -PS와 -PA를 동시에 사용하는 것이 좋다.

원문링크:http://nmap.org/book/man-host-discovery.html
Posted by 구텐모르겐
IT 이야기2009. 9. 15. 08:22
네트웍을 감독하는데 있어서 가장 먼저 실행되어야 할 것은 외부에 관심대상이 될만한 호스트를 두지 않는 것이다. 모든 아이피에 대한 모든 포트를 검색한다는 것은 무의미하다. 물론 목적에 따라서 그 관심 대상이 달라지기는 하지만, 관리자의 입장에서는 제공하는 서비스에 관심이 있을것이고 네트웍 감독자는 아이피에 해당되는 장비들에 관심이 있을 것이다. 일반적으로 관리자는 ICMP Ping을 통한 로컬 네트웍에 관심이 있겠지만 외부검시관들(external penetration tester)은 방화벽을 피할수 있는 다양한 방법에 관심이 있을 것이다.



호스트 컴퓨터 탐색의 방법은 너무 다양해서 Nmap은 사용자가 커스터마이즈 사용을 제공하고 있다. 호스트 탐색은 ping이라고도 불리기도 하지만 이것은 ICMP echo request 보다는 훨씬 높은단계의 기술을 요구한다. 사용자들은 -sL 옵션을 통해 ping을 생략할수도 있고 -PN 옵션을 통해 작동을 제한 할수도 있고, 또는 임의적인 다양한 multi-port TCP SYN/ACK, UDP, SCTP,INIT, ICMP probe등을 사용할 수도 있다. 이러한 무작위적인 서치는 해당 아이피의 호스트에 active된 장비들에 대한 응답을 받기 위해서이다. 일반적으로 IP의 일부만 사용되어지는게 대부분이고, 특히나 10.0.0.0/8과 같은 서치에서 보면 알 수 있다. 필자의 회사에서도 10.0.0.0/8은 16백만개의 아이피를 사용할 수 있지만 검색결과 천여개의 IP만 사용되어짐을 알 수 있었다. 호스트 컴퓨터 탐색은 이렇게 간혈적으로 사용되어지는 IP들 중에서 사용되어지는 호스트를 검색해준다.

만약 호스트 검색 옵션이 사용되지 않으면 Nmap은 ICMP echo request를 보내고, TCP SYN패킷을 443포트로 보내고, 포트 80번에는 TCP ACK패킷을 보내고 ICMP timestamp request를 보낸다. 이러한 명령어는 -PE, -PS443 -PA80 -pp 옵션이다. 예외적으로 ARP스캔은 로컬 이더넷 네트웍에 사용된다. 범용적 Unix shell사용자들은 기본적으로 80포트와 443포트로 SYN패킷을 보낸다. 이러한 호스트 검색은 로컬네트웍에서는 충분할지 몰라도 보안감사를 위해서라면 좀 더 포괄적인 검색이 필요하다.

-P* 옵션으로 ping 타입을 정할수 있고 다양한 TCP ports/flags와 ICMP 코드를 통해서 방화벽을 뚫을 수 있다. 또한 ARP discovery (-PR)은 기본으로 설정되어 있는데 이는 -p*옵션보다 훨씬 빠르고 효과적이다.

기본적으로 Nmap은 호스트 검색이 시행되고 그 후에 온라인으로 되어 있는 컴퓨터들에 대해 포트검색이 실행된다. -sP옵션을 통해 호스트 검색을 어떻게 하는지 알 수 있고, -PN을 통해 호스트 검색을 생략하고 바로 포트검색을 할 수 있다. 다음과 같은 옵션들은 호스트 검색에 사용되어지는 대표적인 값이다.

-sL (리스트 스캔) 해당네트웍에서 간단한 호스트 정보만을 제공하고 타켓 호스트에는 패킷을 보내지 않는다. 기본적으로 Nmap은 호스트의 이름을 알기 위해 reverse-DNS를 내보낸다. 때로는 간단하게 정리된 정보가 더 유용하게 사용되어 지기도 한다. 예를 들어 fw.chi라는 시카고에 있는 파이어월에 모든 IP의 포트에 대해 스캔할수도 있지만 해당 리스트 스캔을 통해 목표 호스트의 액티브 여부를 알 수 있다. 만약 당신이 알지 못하는 호스트 이름이 나온다면 당신은 해당 호스트에 대해 좀더 조사해볼 가치를 느낄 것이다.

리스트 스캔이 목표 호스트에 대한 간략한 정보를 나타내지만 포트스캔, OS검색과 같은 높은 레벨의 스캔은 할 수 없고 ping스캔도 함께 사용될 수 없다. 만약 ping스캔은 적용시키고 싶지 않다면 -PN 옵션에 대해 자세히 읽어보라

-sP (핑스캔) 이 옵션은 Nmap을 통해 호스트를 탐색하고 액티브한 호스트의 리스트를 출력하는 값이다. traceroute나 NSE host script와 같은 옵션들도 함께 상용 가능하지만 그 이상은 아니다. 이것은 리스트 스캔과 같이 사용되기도 하지만 리스트 스캔보다는 좀더 직관적으로 출력된다. 이것은 타겟 호스트에게 의심을 줄만한 검색은 되도록 하지 않으면서 스캔을 한다. 공격자에게는 어떠한 호스트가 살아 있는가가 중요하지 모든 호스트의 이름과 IP가 중요한 것은 아니다.

시스템 관리자들도 이 옵션을 가치있게 사용될 수 있는데 살아있는 호스트의 검색이나 서버나 네트웍의 가용성에 대해 알아볼 수도 있다. 이것은 종종 ping sweep이라 불리기도 하고 pinging the broadcast보다는 좀더 유용하게 사용될수 있는데 보통의 호스트들은 broadcast에 대해서는 응답을 하지 않기 때문이다.

-sP옵션은 ICMP echo request, 443포트를 통해 TCP SYN을 보내고 80포트를 통해 TCP ACK를 보내고, ICMP timestam request를 기본으로 보낸다. 권한이 없는 사용자가 해당 옵션을 사용할때는 SYN패킷만 타겟 포트 80과 443에 보내지게 된다. 권한이 있는 사용자가 핑스캔으로 로컬 네트웍을 스캔할때는 --send-ip를 설정하지 않는 이상 ARP request를 보내게 된다. 활용적인면에서 핑스캔은 다른 탐색옵션과 함께 사용될수 있다. 어떠한 탐색타입과 옵션이 사용된다면 기본으로 적용된 옵션에 덧붙여 출력된다. 강력한 방화벽을 사용하는 네트웍을 탐색할때는 이 옵션이 효과적이다. 그렇지 않다면 방화벽이 응답하지 않음으로 호스트들은 스캔에서 많이 누락되어질 것이다.

-PN부터는 내일 다시 ...

원본링크:http://nmap.org/book/man-host-discovery.html
Posted by 구텐모르겐
IT 이야기2009. 8. 29. 04:51
Nmap에 나온 모든 명령어들은 목표 호스트에 대해 알아보기 위한 것이다. 이에 대한 가장 간단한 방법은 해당 호스트의 IP 어드레스나 호스트이름을 넣는 것이다.


NMAP 'Gridsweep' Scan with Decoys


때로 우리는 인접한 모든 네트웍을 스캔해 보고 싶기도 한데 nmap은 CIDR형태의 주소형태를 이용한다. Nmap 이용시에 IP뒤에 /넘버 혹은 호스트 이름을 입력하면 자동으로 해당 주소를 검색하게 된다. 예를 들어 192.168.10.0/24는 192.168.10.0(바이너리:11000000 10101000 00001010 00000000) 192.168.10.255(바이너리:1100000000 10101000 00001010 11111111)부터 256개의 호스트를 검색하게 된다. 192.168.10.40/24도 정확히 같은 네트웍 대역을 스캔하게 된다. 또한 호스트 이름 scanme.nmap.org은 64.13.134.52라는 IP르르 가지고 있는데 scanme.nmap.org/16이라고 스캔하게 되면 64.13.0.0에서 64.13.255.255까지 총 65,536개의 IP를 스캔하게 된다. 가장 작은 값은 /0으로 표현되고 이는 전세계의 모든 네트웍을 스캔하게 될 것이고 가장 큰 값은 /32이고 이는 해당 호스트만을 스캔하게 될 것이다.

CIDR의 적용은 간단하지만 유용하지는 못하다. 예로써, 만약 당신이 192.168.0.0/16을 스캔하고 싶지만 .0과 .255가 broadcast나 서브넷으로 사용하고 있어 생략하고 싶을 때가 있다. Nmap은 octet range 어드레싱으로 이를 해결하고 있다. 일반적인 IP를 사용하기 보다는 콤마로 구분시켜 각 IP를 192.168.3.1, 192.168.4.1, 192.168.5.1, 192.168.6.1와 같이 적어주는 것이고 0과 255의 호스트는 생략된다. 또한 192.168.3-5,7.1이라고 하면 192.168.3.1, 192.168.4.1, 192.168.5.1 그리고 192.168.7.1이 스캔되게 된다. IP영역의 설정의 마지막 옥텟으로만 결정되는 것이 아니다. 0-255255.01-255.13.37이라고 하면 전세계에 있는 13.37으로 끝나는 모든 네트웍을 스캔하게 된다. 이러한 광범위한 스캔을 통해 nmap은 서베이나 리서치에 사용될 수 있다.

IPv6는 전체 주소를 써 주어야만 하고 CIDR은 사용될수 없으므로 nmap으로는 그다지 효용도가 높지 않다.

Nmap은 또한 여러개의 호스트를 옵션을 통해 서치할 수 있고 똑같은 포맷일 필요는 없다. 예를 들어 nmap scanme.nmap.org 192.168.0.0/8 10.0.0.1,3-7 과 같이 표현하면 된다.

대게 목표 호스트는 명령어에 입력해야 하지만 다음과 같이 목표 호스트를 정의해 줄수도 있다.

-iL (Input from list)
을 통해 자세한 내용을 알 수 있다. 거대한 네트웍을 스캔하는 것이 부담스러운 일이기도 하지만 또한 필요한 일이기도 하다. 예를 들어 DHCP서버가 분배한 10,000개의 호스트를 스캔하고 싶을 것이다. 혹은 인가받지 않은(unauthorized) 호스트들은 제외하고 스캔하고 싶을 것이다. 이럴땐 -iL옵션을 이용해서 스캔할 수 있고 IP 어드레스, 호스트 이름, CIDR, Ipv6, 옥텟 범위의 내용이 파일을 통해 저장되게 되고 각각의 값은 스페이스, 탭 혹은 새로운 줄로 분류된다. 하이픈(-)을 이용해서 입력하게 되면 일반적인 파일의 형태가 아닌 nmap의 표준 형태로 입력할 수 있기도 하다.

-iR (무작위 탐색)
인터넷 관련 서베이나 리서치를 한다면 아마도 임의로 목표 호스트를 설정하고 싶을 것이다. 은 생성할 IP어드레스의 갯수를 나타내고 사설IP, 멀티케스트 그리고 할당되지 않은 IP에 대해서는 생략될 것이다. 0을 입력하면 영원히 스캔을 멈추지 않을 것이다. 만약 이것을 사용하면 다른 네트웍 관리자가 불평할지도 모르니 조심히 사용해야 한다. 만약 당신이 정말로 지루한 하루를 보내고 있다면nmap -sS -PS80 -iR 0 -p 80과 같은 스캔을 통해 무작위적으로 웹서버를 탐험하게 될 것이다.

--exclude [,[,...]] (열외)
콤마로 구분되는 IP나 호스트 이름들은 스캔에서 제외된다. 이것은 일반적인 스캔 방식이므로 CIDR이나 옥텟방식으로의 나열이 가능하다. 이 옵션을 통해 우리는 중요한 임무를 하고 있는 서버를 건들지 않도록 하게 할 수 있다.

--excludefile (파일을 통해 열외 나열)
--exclude 와 같은 옵션이지만 이는 해당 파일을 통해 읽어들이게 되고 호스트들은 콤마, 스페이스, 탭 등으로 나뉘어져 있다.

원문링크:http://nmap.org/book/man-target-specification.html
Posted by 구텐모르겐
IT 이야기2009. 8. 28. 09:11
nmap의 옵션에 대한 화면은 옵션값없이 nmap만 치면 나온다. 또한 최신의 옵션에 대한 자료는 http://nmap.org/data/nmap.usage.txt에서 확인 가능하다. 이 옵션들을 통해서 깊이 있는 nmap의 활용에 대하여 배울 수 있을 것이다. 몇몇 명확하지 않은 옵션기능들은 여기서 생략되었다.

본 번역과 전혀 상관없음, 그림이 없으면 너무 썰렁해서 집어넣어봄


목표 호스트에 대한 정보
호스트이름, IP 어드레스, 네트웍단 으로 표현할 수 있다. 예: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254 -iL : 호스트이름을 통한 입력 -iR : 무작위적 서치 --exclude : 해당 호스트는 예외로 함 --excludefile : 파일상에 있는 호스트는 예외로 함

목표 호스트의 발견
-sL: 목표호스트에 대한 간단한 리스트 작성 -sP: Ping Scan - 호스트가 온라인인지 확인 -PN: 모든 호스트가 온라인인지 확인 - 새로운 호스트를 발견하지 않는다 -PS/PA/PU/PY[portlist]: 해당 포트에서 다음과 같은 포트를 서치한다. TCP SYN/ACK, UDP or SCTP -PE/PP/PM: ICMP echo, timestamp, 그리고 netmask 에 대한 탐사 -PO[protocol list]: IP Protocol Ping -n/-R: DNS resolution을 절대로 하지 않는다 --dns-servers : DNS서버를 확인한다 --system-dns: OS의 DNS resolver를 사용한다 --traceroute: 추적

스캔기술
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon 스캔 -sU: UDP 스캔 -sN/sF/sX: TCP Null, FIN, and Xmas 스캔 --scanflags : Customize TCP 스캔 flags -sI : Idle 스캔 -sY/sZ: SCTP INIT/COOKIE-ECHO 스캔 -sO: IP protocol 스캔 -b : FTP bounce 스캔

포트의 상세설명과 스캔순서
-p : 명시한 포트만 스캔 예: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080 -F: Fast mode - 기본스캔보다 덜 스캔하게 된다 -r: 순서대로 스캔한다 --top-ports : 보편적인 의 포트만 스캔한다 --port-ratio : 보다 높은 포트들을 스캔한다

서비스/버전 확인
-sV: 서비스나 해당 버전을 확인하기 위해 탐사한다 --version-intensity : 0(간단)부터 9(모든)까지 레벨을 정할수 있다 --version-light: 정밀도 2정도의 스캔을 한다 --version-all: 모든 가능한 포트(9)를 스캔한다 --version-trace: 모든 스캔정보를 보여준다(디버그용)

스크립트 스캔
-sC: --script=default와 같다 --script=: 는 콤마로 구분되는 디렉토리, 스크립트 화일, 스크립트 카테고리의 리스트를 보여준다 --script-args=: 스크립트에 인수를 지정한다 --script-trace: 보내고 받은 모든 데이터를 보여준다 --script-updatedb: 스크립트 데이타베이스를 업데이트한다

OS 탐색
-O: OS를 탐색한다 --osscan-limit: 약속된 OS를 탐색한다 --osscan-guess: 공격적으로 OS 탐색

시간 및 성능관련 옵션
일반적으로 단위의 표현 s(초), m(분), h(시)에 대한 설명이 없으면 밀리세컨이다 -T<0-5>: 시간관련 옵션, 5일때 가장 빠르다 --min-hostgroup/max-hostgroup : Parallel host scan group sizes --min-parallelism/max-parallelism
Posted by 구텐모르겐
IT 이야기2009. 8. 28. 07:07
nmap웹사이트에 한글로 된 매뉴얼이 없다는 것에 상당히 놀랐다. 기업의 정보는 웹에서 현금화가 가능한 작금의 현실에서, nmap에 대한 인식 부재로 인한 웹파산이라는 기업 신조어 양성을 피하고자 컴을 들었다. 아래부터는 nmap.org에서의 doc을 며칠에 걸쳐 직역하여 보겠다.

nmap은 공개 프로그램으로 네트웍을 탐색하고 감독할수 있는 툴이다. 초기에는 큰 네트웍에서의 스캔을 목적으로 개발되었지만 작은 네트웍에서도 사용가능하다. nmap은 원본 IP패킷을 이용해 어떤 네트웍이 접근 가능한지, 어떤 서비스가 이루어지고 있는지(어플리케이션 이름과 버젼), 어떤 os가 사용되고 있는지, 어떤 형태의 패킷필터나 방화벽이 사용되고 있는지 그리고 다른 모든 특성들에 대한 스캔이 가능하다. nmap은 보통 네트웍 감사를 위해 사용되기도 하지만 보통은 관리자들에게 그들의 인벤토리 작업용, 서비스 업그레이드에 관한 관리, 사용자나 서비스의 모니터 등에 사용된다.

nmap을 통해 스캔된 결과물은 어떤 옵션을 주었느냐에 따라 다른 결과물을 리스트로 출력된다. "Interesting ports table"을 통해 포트넘버, 프로토콜, 서비스 이름, 그리고 상태를 보여주게 된다. 상태는 open, filtered, closed 또는 unfiltered가 있다. open은 해당 컴퓨터의 해당포트가 연결대기중이라는 뜻이다. filtered는 방화벽이 차단했다는 뜻이거나 네트웍상의 방해로 open이나 closed를 알수 없는 상태를 말한다. 포트는 대부분 unfiltered로 구분되지만 nmap이 open인지 closed인지 알수는 없다. nmap은 open|filtered 그리고 closed|filtered라는 복합적인 상태를 보여주기도 하는데 어떤 상태인지 nmap이 구분할수 없을때 보여지는 상태이다. port table은 또한 소프트웨어에 대한 버젼도 보여준다(-so). nmap은 응답되는 포트의 정보를 보여주기 보다는 지원되는 IP프로토콜을 보여준다.

추가적으로 interesting ports table에서는 nmap을 통해 reverse DNS이름, OS추정, 장치 타입, 그리고 MAC어드레스를 구할 수 있다.

전형적인 nmap 스캔 모습은 테이블 15.1과 같다. -A라는 인수만을 사용하여 스캔된 결과이고 이는 OS와 그 버전, script scanning, 빠른 실행을 위한 traceroute -T4, 그리고 두개의 호스트이름을 보여주고 있다.



원본링크: http://nmap.org/book/man.html#man-description
Posted by 구텐모르겐