-
nmap - ネットワーク調査ツール & セキュリティスキャナ
-
nmap [Scan Type(s)] [Options] <host or net #1 ... [#N]>
- UDP, TCP connect()
- TCP SYN (half open)
- ftp proxy (bounce attack)
- Reverse-ident
- ICMP (ping sweep)
- FIN, ACK sweep
- Xmas Tree
- SYN sweep
- IP Protocol
- Null scan
- remote OS detection via TCP/IP fingerprinting
- stealth scanning
- dynamic delay
- retransmission calculations
- parallel scanning
- detection of down hosts via parallel pings
- decoy scanning
- port filtering detection
- direct (non-portmapper) RPC scanning
- fragmentation scanning
- flexible target
- port specification
- 使用 OS
- TCP sequentiability
- それぞれのポートを使用しているプログラムを実行したユーザ名
- ドメイン名
- そのホストが IP なりすまし (smurf address) かどうか
- その他
nmap は、システム管理者や好奇心旺盛な人が、
どのホストが起動していてどのようなサービスが提供されているかを特定する目的で、
大規模なネットワークをスキャンできるように設計されています。
nmap は以下のようなたくさんのスキャンテクニックを提供しています。
より詳細については、SCAN TYPES セクションを参照してください。
nmap には、次のような更に多くの機能があります。
root でないユーザで、nmap がまともな動作をするように多くの努力を注いで来ましたが、
残念ながら、多くの重要なカーネルインターフェース (raw socket 等) には、root 権限が必要です。
nmap はできる限りいつでも root で、実行するのが良いでしょう。(もちろん、setuid root ではありません。)
nmap は通常スキャンされたマシン (達) の興味深いポートのリストを出力します。
nmap は、そのポートの良く知られたサービス名 (もしあれば)、番号、状態、プロトコルを表示します。
状態とは、'open', 'filtered', 'unfiltered' です。
'open' は、ターゲットのマシンがそのポートで接続できることを意味します。
'filtered' は、ファイヤーウォール、フィルタ、またはその他のネットワーク障壁がそのポートをふさいでいて、
開いているのか判別できないことを意味します。
'unfiltered' は、ポートが閉じていて、かつファイヤーウォールやフィルタが検出されないことを意味します。
'unfiltered' ポートが一般的な状態であり、スキャンしたポートのほとんどが 'filtered' の場合のみ表示されます。
使用されるオプションによっては nmap がリモートホストの次のような特徴を報告できるようにもできます。
- AIX
- Amiga
- BeOS
- BSDI
- Cray
- Tru64 UNIX
- DG/UX
- OpenVMS
- Digital UNIX
- FreeBSD
- HP-UX
- OS/2
- IRIX
- MacOS
- NetBSD
- OpenBSD
- OpenStep
- QNX
- Rhapsody
- SunOS 4.X
- Ultrix
- VAX
- VxWorks
- base.nmap
- base.gnmap
- base.xml
- Paranoid (訳注: 怯えた)
IDS に見つからないように非常にゆっくりとスキャンします。
これは順番にスキャンする (並列でスキャンしない) ので、 普通パケットを送信する間隔を 5分以上あけます。 - Sneaky (訳注: びくびくした)
似ていますが、パケットの間隔を 15秒しか待ちません。 - Polite (訳注: 上品に)
マシンを壊さない程度にという意味です。
順番に 0.4秒以上あけて実行します。 - Normal (訳注: 通常の)
nmap のデフォルトです。
ネットワークに負荷をかけてホストやポートを失わない程度になるべく速く実行します。 - Aggressive (訳注: 攻撃的な)
一つのホストあたり 5分でタイムアウトします。
さらに、スキャンのレスポンスを 1.25秒超過したら待ちません。 - Insane (訳注: 狂気の)
非常に高速なネットワークもしくは情報を取りこぼしても気にしないときに最適です。
一つのホストあたり 75秒でタイムアウトします。
さらに、スキャンのレスポンスを 0.3秒しか待ちません。
これは非常に速くネットワークを調査します (笑)
ともに意味をなすオプションは、普通組み合わせることができます。
いくつかのオプションは特定のスキャンモードです。
サポートされていないオプションの組み合わせは警告します。
もしあなたが短気なら、最後の方の EXAMPLES
セクションにスキップしてください。
一般的な引数のデモが載っています。
また、nmap -h で、
全てのオプションのクイックリファレンスを参照できます。
SCAN TYPES
-sT
-
TCP connect() scan:
これはもっとも基本的な TCP スキャンの形式です。
OS から提供されている connect() システムコールは、 マシン上の全ての任意のポートに接続します。
もしそのポートが LISTEN の状態であるなら、 connect() は成功し、そうでないならポートに到達しません。
一つ強くアドバイスするとしたら、 このテクニックは特別な権限を必要としないということです。
ほとんどの UNIX マシンのユーザはこのシステムコールを自由に使用できます。
この種のスキャンは、 対象のホストのログに接続と直後の切断エラーメッセージが記録されるので簡単に検出できます。
-sS
-
TCP SYN scan:
このテクニックは完全な TCP 接続ではないため
"half-open" スキャニングと呼ばれています。
あなたが本当の接続を確立するかのように SYN パケットを送信し、レスポンスを待ちます。
SYN|ACK の場合は、ポートが LISTEN の状態です。
RST の場合は、LISTEN しているアプリケーションが無いことを指しています。
SYN|ACK を受信すると、コネクションを直ちに切断する為に RST を送信します。 (実際は OS のカーネルが実行します)
このスキャンテクニックの一番の利点は、ほとんどのサイトがログに残せないことです。
残念ながら、このようなカスタム SYN パケットを使用するには、root 権限が必要です。
-sF -sX -sN
-
Stealth FIN, Xmas Tree, or Null scan modes:
時には SYN スキャンでさえ秘匿性を保つのに十分でない場合があります。
ファイヤーウォールやパケットフィルターの中には、 制限された SYN パケットを監視しているものもあるし、 Synlogger や Courtney のようなプログラムはこのようなスキャンを検出できます。
その代わり、これら 3 つの上級のスキャンは妨害されること無く通過できます。
この考え方は、閉じられたポートは RST を応答し、 一方、開いたポートは問合せを無視しなければならないという仕様に基づいています。
(RFC 793 pp 64 参照 訳注: 日本語訳版はこちら)
FIN スキャンは単なる (奇襲) FIN パケットを使用し、 Xmas tree スキャンは FIN, URG, PUSH フラグをonにします。
また、Null スキャンはすべてのフラグをoffにします。
残念ながら、Microsoft (系列) は標準で完全に無視するよう独自の方式をとっています。
従って、このスキャン方式は Windows95/NT 上では動作しません。
良い意味でとると、この方法は二つのプラットフォーム (Windows か それ以外) を見分けるのに使えます。
このスキャンで開いているポートが見つかるとということで、 対象のマシンが Windows ではないことがわかります。
逆に、-sF, -sX, -sN ですべてのポートが閉じていると表示され、 SYN (-sS) スキャンでポートが開いているならば、 おそらく対象のマシンは Windows でしょう。
nmap には正しい OS 検知 のビルトインがあるので、今ではあまり役に立ちません。
Windows と同様な動作をして接続を破壊するシステムがいくつかあります。
Cisco, BSDI, HP/UX, MVS, IRIX がそうです。
これらは、ただ捨てるべきパケットが来た場合でもすべて RST を送ります。
-sP
-
Ping scanning:
時には、ネットワーク中にどのホストが上がっているか知りたいときもあるでしょう。
nmap は ICMPエコーリクエストパケットを任意のネットワーク上すべての IP アドレスに対して送信することによって知ることが出来ます。
応答したホストは上がっています。
残念ながら、microsoft.com のようないくつかのサイトは ICMP エコーリクエストをブロックします。
だから、nmap は TCP の問合せパケットを (デフォルトで) 80番ポートに送信することも出来ます。
RST の応答を受け取れば、そのマシンは上がっています。
SYN パケットを送信して RST または SYN/ACK の応答を待つことで、 第 3 のテクニックになります。
root でないユーザには、connect() が使われます。
デフォルト (root ユーザの場合) では、nmap は ICMP と ACK 双方のテクニックをパラレルで使用します。
後に記述する -P オプションで変更できます。
デフォルトではどの道 ping が使用され、 応答したホストのみスキャンされます。
ポートスキャンをしないで ping sweep をしたい場合は、 このオプションだけ指定してください。
-sU
-
UDP scans:
この方法は、どの UDP (User Datagram Protocol,
RFC 768,
訳注: 日本語訳版はこちら)
ポートが開いているか調べる為に使用されます。
このテクニックは 0 バイトの UDP パケットを対象マシンのそれぞれのポートに送信します。
port unreachable の ICMP メッセージが届いたら、 そのポートは閉じられています。
そうでなければ、開いていると予想されます。
人によっては、UDP スキャンは無意味だと思うでしょう。 最近の Solaris rpcbind のセキュリティホール (訳注: June 4, 1997 に見つかったセキュリティホールです。) を思い出してください。
rpcbind には、ドキュメントには記載されていませんが、32770 を超えるどこかに UDP ポートが見つかります。
だから、ファイヤーウォールで 111 番をブロックしても意味がありません。
ていうか、30,000 を超える高ポートが LISTEN の状態にあるのを見つけることが出来ますか?
UDP スキャナを使えば見つけることが出来ますよ!
Windows マシン上の cDc Back Orifice のバックドアでさえも UDP ポートを使用しています。
snmp, tftp, NFS 等のような UDP を使用する脆弱的なサービスについては、言うまでもありません。
残念なことに、UDP スキャニングは時々苦痛なほど遅くなります。
ほとんどのホストが RFC 1812 (セクション 4.3.2.8) (訳注: 日本語訳版はこちら) の ICMP エラーメッセージのレートを設定しているからです。
たとえば、Linux カーネル (net/ipv4/icmp.h 内) destination unreachable メッセージは 4秒間に80回と制限されており、 それを超えると 1/4 秒間のペナルティが課せられます。
Solaris はもっと厳しい制限 (約1秒間に2回) があり、 そのためスキャンがもっと長くなります。
nmap は応答レートの制限を検出してそれに応じてスピードを落として、 対象のマシンに無視されて役に立たなくなったパケットでネットワークがあふれないにします。
特殊ですが、Microsoft は RFC の勧告を無視しており、 Win95 や NT マシンは応答レートの制限が見当たりません。
だから、Windows マシンは 65k 全部のポートを非常に早くスキャンできます。
なんてこった!
-sO
-
IP protocol scans:
この方法はホストがどの IP プロトコルをサポートしているか調べる為に使います。
このテクニックはそれ以上何のプロトコルのヘッダーもついていない raw IP パケットを対象マシンのそれぞれのプロトコルに送信することです。
unreachable の ICMP メッセージを受信したら、 そのプロトコルは使用されていません。
そうでなければ、使用されていると予想されます。
注意すべきなのは、いくつかのホスト (AIX, HP-UX, Digital UNIX) それからファイヤーウォールは、unreachable のメッセージを送信しないかもしれません。
これによって、すぺてのプロトコルが使用できると表示される現象が起こります。
ここで使用されるテクニックは UDP ポートスキャンにとてもよく似ているので、 同じように ICMP 応答レート制限が適用されるかもしれません。
しかし、IP プロトコルフィールドはたった 8ビット なので、どちらにしろそれなりの時間で高々 256 個のプロトコルはスキャンを完了できます。
-sI <zombie host[:probeport]>
-
Idlescan:
この高度なスキャン方法で本当に隠れた TCP ポートスキャンが可能になります。
(あなたの本当の IP アドレスから送信されないという意味です。)
その代わり、単一方向チャネル攻撃 (a unique side-channel attack) には、 標的の開いているポートに関する情報を収集する為にゾンビホスト上の "IP fragmentation ID" シーケンスを予想可能にしなければなりません。
IDS はあなたの指定したゾンビマシン (起動していて、しかも特徴があっていなければいけません。) から来ているスキャンを表示します。
さらに詳細な説明を http://www.insecure.org/nmap/nmap_documentation.html に近いうちアップします。
非常に秘匿性の高い (その隠れる性質によって) ことに加えて、 このスキャンタイプはマシンの IP に基づいた信頼関係を緻密に調査できます。
ゾンビホストから見て開かれたポートを表示します。
だから、あなたが信頼されていると思ういろいろなゾンビを使って標的をスキャンできます。
(ルーターのパケットフィルタルール経由でも)
明らかに、攻撃目標の優先順位をつけるのに重要な情報です。
そうでなければ、あなたのような侵入試験者は "所有している" 踏み台に相当な資源を消費しなければならないでしょうし、 最終的にはこの IP はまだ標的のホスト / ネットワークに信頼されていないということに気づくだけです。
あなたが IPID 変更のためのゾンビホストの特別のポートを調査したければ、 コロンの後にポート番号を続けて加えることができます。
そうでなければ、nmap は "tcp pings" のデフォルトのポートを使用するでしょう。
-sA
-
ACK scan:
この高度な方法は、ファイアウォールのルールを緻密に調査するのによく使用されます。
特に、やってくる SYN パケットブロックすることでファイアウォールが stateful かただのシンプルなパケットフィルタかを判別する助けになります。
このスキャンタイプは、ACK パケットを (ランダムな確認応答 / シーケンス番号に見えるものを付けて) 指定したポートに送信します。
RST が帰ってきたら、 そのポートは "unfiltered" に分類されます。
何も帰ってこなかったら (もしくは ICMP unreachable の応答だったら)、 そのポートは "filtered" に分類されます。
注意してほしいことは、nmap は普通 "unfiltered" のポートを表示しません。
だから、出力で表示されるポートが得られない場合は、 通常調査がすべて終了した (RST を返された) サインです。
このスキャンは、"open" の状態にあるポートを明らかに見せないでしょう。
-sW
-
Window scan:
この高度なスキャンは、
いくつかの OS が報告する TCP window size 中の不規則性を利用して、
フィルタされているかされていないかという情報から、
開かれたポートを検出できるという点を除いて、ACK スキャンに非常に似ています。
このスキャン方法に脆弱なシステムには、 少なくとも以下の OS が含まれています。
詳しくは nmap-hackers メーリングリストに集約されている全リストを参照してください。
-sR
-
RPC scan:
この方法は nmap の様々なポートスキャン方法と組合わせて動作します。
TCP/UDP すべての開いているポートに対して、 SunRPC プログラムの NULL コマンドであふれさせることで、 RPC ポートかどうか調査を試みます。
そしてもしそうなら、 標的のホストがどのプログラムのどのバージョンを起動しているかわかります。
従って、ファイアウォール (または TCP wrapper に保護されたもの) から似た情報を効率的に獲得できます。
おとり (Decoy: -D) は現在 RPC スキャンと一緒に動作できませんが、 UDP RPC スキャンのデコイのサポートを追加させる予定です。
-sL
-
List scan:
この方法は、単純に IP と 名前のリストを実際の ping
やポートスキャンをせずに表示します。
DNS 名前解決は -n を使わない限り表示されます。
-b <ftp relay host>
-
FTP bounce attack:
FTP
(RFC 959 訳注:
日本語訳版はこちら)
の興味深い特徴は "proxy" FTP 接続をサポートしていることです。
言い換えると、evil.com から、target.com の FTP サーバに接続して、 接続先のサーバからインターネット上のどこにでもファイルを送信できるようになるのだ!
1985 年に RFC が書かれた時点では、問題なく動いていたようです。
しかし、今日のインターネットでは、 FTP サーバをハイジャックして、 インターネット上の任意と場所にデータを吐き出させるわけにはいきません。
1995 年の *Hobbit* の記事によると、 このプロトコルのフローは
「仮想のトレースできないメールやニュースがポストできるし、 多様なサイトを攻撃し、ディスクを溢れさせたり、 ファイアウォールを飛び越えて被害を与え、しかも追跡が困難です。」
私たちにとっては、"proxy" FTP サーバから TCP スキャンをできる (驚くべき、奇襲攻撃) という利点になります。
だから、ファイアウォールの後ろから FTP サーバに接続でき、 そこからブロックされていそうなポート (139 とか) をスキャンできます。
FTP サーバが読み取りと書き込み (/incoming のようなディレクトリに) を許可していたら、 任意のデータをあなたが見つけたポートに送信できます。
(nmap はやらないのだけれども)
-b オプションは、使いたい proxy を URL で記述します。
そのフォーマットは username:password@server:port です。
サーバ名以外はすべてオプションです。
どのサーバがこの攻撃に対して弱いのか判断する為には、 Phrack 51 の記事を参照してください。
そして、最新版の nmap の URL は http://www.insecure.org/nmap/ です。
GENERAL OPTIONS
これらの機能は不要ですが、非常に役に立ちます。
-P0
-
スキャンする前にこのオプションを使用しないでください。
このオプションはファイアウォールを通して ICMP エコーリクエスト (またはレスポンス) が許可されないネットワークにスキャンが可能になります。
このようなネットワークの例として microsoft.com がそうで、 microsoft.com をポートスキャンするときはいつも -P0 や -PT80 をいつも使用することになります。
-PT
-
TCP "ping" を使ってどのホストが上がっているか調査します。
ICMP エコーリクエストを送ってレスポンスを待つ代わりに、 標的のネットワーク全体 (または単独のマシン) に TCP ACK パケットを送って時々返ってくる応答を待ちます。
上がっているホストは RST を返信してくるはずです。
このオプションは ping をブロックするネットワーク全体または単独ホストの、 起動中かどうかの探査に有効です。
root ユーザでない場合は connect() を使用します。
調査先のポート番号を設定するには -PT<port number> とします。
デフォルトは 80番です。
なぜなら、そのポートはよくフィルタの対象になっていないからです。
-PS
-
このオプションでは root は ACK パケットの代わりに SYN (connection request)
パケットを使用します。
ホストは RST (たまに SYN|ACK) を返信してくるはずです。 ポートの指定方法は上の -PT と同じ方法で出来ます。
-PI
-
このオプションは本物の ping (ICMP echo request)
を使います。
サブネットのダイレクトのブロードキャストアドレスで稼動しているホストを探し出します。
これらは外部から到達可能で、 入力された IP パケットのブロードキャストをサブネットに転送します。
いろんな DoS (Dinial of Service) 攻撃 (Smurf が一般的) を許してしまうので、 もし見つかったら、排除しましょう。
-PP
-
ICMP タイムスタンプリクエスト (code 13)
をつかって起動しているホストを探し出します。
-PM
-
-PI や -PP
と同じく、ネットマスクリクエスト (ICMP code 17) を使用しません。
(訳注: 意味不明)
-PB
-
これはデフォルトの ping タイプです。
ACK (-PT) と ICMP echo request (-PI) を同時に流します。
この方法ならファイアウォールにどちらかが空いていたら成功します。 (両方とも空いていなかったら駄目ですが。)
調査するポートの設定方法は上にある -PT と同じです。
-O
-
このオプションでは、TCP/IP のフィンガープリントを利用してリモートホストを識別します。
言い換えると、標的コンピュータの OS を検知する一連のテクニックです。
標的の 'fingerprint' の情報を作成し、 既知の OS のフィンガープリントのデータベース (nmap-os-fingerprints) と比較して、OS を特定します。
もし、コンディションが良い状態 (少なくとも一つはポートが開いている) にもかかわらず、nmap が OS を判別できない場合は、 URL を提供しますので、 マシン上で動いているあなたが (間違いなく) 知っている OS のフィンガープリントを投稿してください。
nmap が検知する OS の情報収集にあなたが貢献することで、 みんながより正確な情報を得られるようになります。
IP アドレスを投稿したら、 我々がそのマシンのフィンガープリントを追加する時に (動作確認の為に) スキャンするかもしれませんので気をつけてください。
この -O オプションはほかにもいくつかのテストが出来ます。 一つは、"Uptime" 起動時間計測で、 TCP のタイムオプション
(RFC 1323 訳注: 日本語訳版が見つかりません。RFC 793 の機能拡張版です。誰か訳して)
を使用し、マシンが前回再起動した時刻を予測します。
これはターゲットのマシンから提供された情報を報告しているだけです。
その他には TCP Sequence Predictability Classification (TCP シーケンス分岐予測可能性?) のテストができます。
リモートホストからの偽造されたTCPコネクションにどの程度対抗できるか評価する機能です。
ソース IP による信頼関係を利用したり (rlogin, firewall filters, など)、 攻撃元を隠すのに役立ちます。
実際の (攻略の困難さを表す) 数字基準は統計のサンプリングが元になっており、 しかも変動するかもしれません。
この機能は英語で分類すると "価値ある挑戦" か "つまらない冗談" 程度にしか分けられません。
これは、-v を使用することで報告されます。
冗長モード (-v) を -O と一緒に使うと、 IPID Sequence Generation (IPID シーケンス生成?) も報告されるようになります。
ほとんどのマシンは "incremental" クラスです。
"incremental" とは、送信された各パケットの IP ヘッダの"ID" フィールドを増加するという意味です。
これによって、いくつかの高度な情報収集や偽装攻撃が可能になります。
-I
-
TCP reverse ident スキャンをします。
Dave Goldsmith が 1996年の Bugtraq で報告したように、 認証プロトコル (Identification Protocol RFC 1413 訳注: 日本語訳版が見つかりません。誰か訳して) は、TCP で接続したすべてのプロセスの実行したユーザ名を暴露してしまいます。 接続を開始していなくても。
たとえば、http ポートに接続して identd を利用して サーバが root で動作しているか確認できます。
-sT 等のオプションでは、標的のホストに完全な TCP 接続を行います。
-I を使った場合、リモートホストの開いているポートの情報を identd に問合せを行います。
あたりまえですが、標的のホストが identd を動かしていなかったら、動作しません。
-f
-
このオプションは任意の SYN, FIN, XMAS, NULL
を小さくフラグメント化した IP パケットを作り出します。
これは TCP ヘッダをいくつかのパケットに分割送信することで、 パケットフィルタや侵入検知システム、 その他の障害物があなたの行動を検出困難にする目論見があります。
次のことに気をつけてください!
いくつかのプログラムは小さく分割されたパケットでトラブルを起こします。
私の大好きな sniffer は、最初の 36バイトのフラグメントを受信すると、 すぐにセグメンテーションフォルトを起こしました。
今度は 24バイトで起こりました!
一方でこの方法は (CONFIG_IP_ALWAYS_DEFRAG オプションのある Linux カーネルのような) パケットフィルタやファイアウォールでは無効になります。
ネットワークのパフォーマンスに余裕がない場合はダメージを受けるので、 使用しないでください。
私はまだ実稼動しているシステムにこのオプションを使用したことがありません。
このオプションは Linux, FreeBSD, OpenBSD で正常に動作するほか、 *NIX 系での成功が報告されています。
-v
-
冗長モード:
これは高く推奨されているオプションで、
プログラムが何をやっているかについてより多くの情報を得られます。
このオプションは 2回使用できて、さらに多くの情報を得られます。 (訳注: うまく動かないっぽい)
-d (訳注: マニュアルに正式に記述されていません)
-
さらに冗長モード:
本当の情報を知りたい場合は -d を使えば得られますが、
すさまじい画面のスクロールが!
-h
-
このオプションでクイックリファレンスが表示されます。
気づいているかもしれませんが、このマニュアルは 'クイックリファレンス' ではありません。 (笑)
-oN <logfilename>
-
スキャン結果を指定した場所に普通の人が読めるような形式で保存します。
-oX <logfilename>
-
スキャン結果を指定した場所に XML 形式で保存します。
この形式は他のプログラムで容易に読み込み・解釈することが出来ます。
'-' (引数なし) を指定すると stdout (シェルのパイプなど) に出力されます。
(訳注: 実際は nmap -oX - <target host> でコンソールに出力します)
通常の出力が隠蔽された場合は、 この '-' を使って (いまだに stderr に行っている) エラーメッセージを見つけ出してください。
'-v' を使うと、 さらにいくつかの情報が出力されることを憶えておいてください。 XML の出力構造が記述されている Document Type Definition (DTD) は http://www.insecure.org/nmap/nmap.dtd にあります。
-oG <logfilename>
-
このオプションでログを記録すると grep が簡単になります。
この単純なフォーマットは 1IP につき 1行で表示される為、 grep で簡単にポートの情報や OS 情報、全 IP の情報を閲覧することが出来ます。
このオプションは nmap と連動するプログラムにとって使いやすいメカニズムでしたが、 これからは、XML の出力 (-oX) を推奨します。
このオプションで得られた単純なフォーマットはこれ以上情報を含むことが出来ません。
'-' (引数なし) を logfilename に指定すると stdout (またはシェルのパイプなど) に出力されます。
通常の出力が隠蔽された場合は、 この '-' を使って (いまだに stderr に行っている) エラーメッセージを見つけ出してください。
'-v' を使うと、 さらにいくつかの情報が出力されることを憶えておいてください。
-oA <basefilename>
-
このオプションは (通常, grep可能, XML) すべての形式で保存します。
ファイル名を指定すると
というファイル名で記録されます。
-oS <logfilename> (訳注: 役に立ちません)
-
このオプションでは厨房形式でスキャン結果が保存されます。
'-' (引数なし) を指定すると stdout に出力されます。
--resume <logfilename>
-
^c やネットワークの停電などによりスキャンが中止された場合は、
このオプションを使って続けて実行できます。
使用できるログファイルは通常スキャン (-oN) か自動スキャン (-oM 訳注: -oG と同じ出力結果でした) のいずれかのみです。
ほかのオプションは使用しないでください。
(ログファイルで使用したスキャンのオプションが適用されます)
nmap は一番最後に成功したと思われるスキャンの直後から開始されます。
--append_output
-
指定されたどのようなファイルにも追加書き込みできます。
-iL <inputfilename>
-
指定されたファイルから標的をコマンドラインよりも優先して読み出します。
このファイルにはホストのリストやネットワーク表現のリストを書き込み、 一つ一つはスペースかタブまたは改行で区切ってください。
inputfilename に - を指定すると stdin から読み込まれます。
(パイプの最後とかに使います)
ネットワーク表現に関する詳しい説明は TARGET SPECIFICATION を参照してください。
-iR
-
このオプションはランダムの IP に対してスキャンします。 (笑)
永遠に終了しません。
いろんなものを評価してインターネットの統計取るのに役立ちます。
退屈なら、
nmap -sS -iR -p 80
と打ってターゲットになる web サーバを探してみてください。
-p <port ranges>
-
このオプションでスキャンするポートを指定することが出来ます。
たとえば、'-p 23' と指定すると 標的のホストの 23番ポートのみスキャンを行います。
'-p 20-30,139,60000-' でスキャンすると、 20 〜 30 番、139番、60000番以上のポートをスキャンします。
デフォルトでは、sevices ファイル (訳注: /etc/services) に記載されているポートと 1 〜 1024番の全ポートをスキャンします。
IP プロトコルスキャン (-sO) の場合は、 0 〜 255 のプロトコル番号を指定します。
TCP と UDP ポートを一緒にチェックしたいときは、 "T:" と "U:" で指定します。
あなたが別の修飾語を指定するまで修飾語は続きます。
たとえば、"-p U:53,111,137,T:21-25,80,139,8080" と引数を指定すると、UDP 53, 111, 137 ポート、 同様に TCP ポートの指定されているポートをスキャンします。
UDP と TCP を同時にスキャンしたいときは、-sU と、それに加えて TCP スキャンタイプ (-sS, -sF, -sT) を少なくとも一つ指定してください。
プロトコルを指定されていない (訳注: T:, U: が無い) と、 指定したポート番号はすべてのプロトコルリストでスキャンされます。
-F
-
Fast scan mode:
services (訳注: /etc/services)
に載っているポートだけ
(または -sO の場合は protocols (訳注: /etc/protocols) に載っているものだけ)
スキャンしたい場合にこのオプションを指定します。
このオプションは 65535個すべてのポートをスキャンするより明らかに速いです。
-D <decoy1 [,decoy2][,ME],...>
-
リモートホストにおとりのスキャンを見せて、
本物のスキャンもおとりの一つのように見せかけるようにします。
したがって、IDS は 5 〜 10 個の IP アドレスからのスキャンを報告するはずです。
しかし、どれが本物でどれが本物でないかは調べられないでしょう。
一方、ルータのトレースや、レスポンスの低下、 その他の起動しているメカニズムを無効にします。
このオプションは IP アドレスを隠すのに非常に効果的です。
おとりのホストをコンマで区切る中に、ME をオプションとして追加すると、あなたの IP アドレスがおとりの一つとして使用されます。
'ME' を 6番目以降に追加すると、 いくつかの有名な (Solar Designer の素晴らしい scanlogd のような) ポートスキャン検知デーモンはあなたの IP アドレスをまったく表示できないようです。
もし、'ME' を指定しない場合、nmap はあなたの IP アドレスをランダムな位置に挿入します。
おとりに使うホストはネットにつながっていたほうがいいです。
さもないと標的のホストに SYN flood 攻撃をやってしまうかもしれません。
また、ネットワークに一つしかホストがつながっていないと簡単に見つかってしまいます。
なのでおとりには名前の代わりに IP アドレスを使用したほうが良いでしょう。
(そうすることで、おとりのネットワークはネームサーバのログを参照しないので)
さらに、いくつかの (間抜けな) "ポートスキャン検知機" はポートスキャンを試みているホストとのルーティングを遮断するでしょう。
だから、不注意にもあなたが使っているおとりマシンとの接続が切れてしまいます。
これは、標的のマシンに重大な問題を引き起こします。
もし、おとりが internet gateway だったり、 localhost だったらどうなるでしょうか。
だから、このオプションを使う際は注意してください。
本当に言いたい事は、 いたずらのポートスキャンを検出しても対抗措置をとるべきでは無いということです。
それはただのおとりかも!
おとりは、実際のポートスキャンの合間に、 基本的な ping スキャン (ICMP, SYN, ACK, なんでもつかって) を実行します。
おとりは、OS の検出 (-O) の合間も実行します。
おとりをたくさん使いすぎると、スキャンが遅くなる上に正確でなくなってくる可能性があるので、 良くありません。
ついでに、いくつかの ISP はあなたが詐称したパケットを遮断しますが、 多くの (現在はほとんどの) ISP はパケットを遮断しません。
-S <IP_Address>
-
ある状況によっては、あなたの IP アドレスを知ることが出来ないかもしれません。
(そういう状況になったら nmap は教えてくれます)
この状況になったら、-S を使ってあなたの (送信源としたい) IP アドレスを指定してください。
別の可能性として、このオプションは IP アドレスを詐称してほかの誰かがスキャンを行っているように見せかけることが出来ます。
想像してみてください。ある会社が再三競合他社にポートスキャンをするところを!
このやり方は推奨しませんし、本当の目的ではありません。
他人を装ってポートスキャンをする人がいる可能性があることについて、 人々が気をつけてくれることを願っています。
この種の使い方には -e が一般的に必要です。
-e <interface>
-
このオプションは、どのインターフェースでパケットを送受信するか nmap に命令します。
nmap は自動的に認識できるはずですが、もしできない場合は設定してください。
-g <portnumber>
-
このオプションは、チェック元のポート番号を指定します。
多くの単純なファイアウォールやパケットフィルターは DNS (53) や FTP-DATA (20) から来るパケットを通過させて接続を確立する様に設定されています。
これがファイアウォールのセキュリティ機能を完全に破滅させるのは明白です。
なぜなら、侵入者は送信元のポートが DNS や FTP を装うようにするだけで良いのですから。
当然 UDPの53番ポートをまずスキャンし、 そして TCPの20番ポートを TCP 53番の前にスキャンしてみましょう。
現状では要求されているだけですが、もしいつかできるようになったらすごい。
たとえば、TCP ISN (イニシャルシーケンス番号) を一つの host:port から一つの host:port まですべてサンプリングすることができないので、 nmap は -g を設定してさえも送信元のポートを変更します。
このオプションを使うことで、ややパフォーマンスが落ちることに注意してください。
それは、送信源のポート番号に役に立つ情報を時々仕込むからです。
--data_length <number>
-
通常、nmap はヘッダ情報のみの最小パケットを送信します。
なので、TCP パケットは 40バイト で ICMP エコーリクエストはたったの 28バイト です。
このオプションでは、ほとんどのパケットを大量の 0 の情報で満たして送信します。
ping やポートスキャンのパケットには適用されますが、 OS 検出 (-O) のオプションには影響されません。
スピードは遅くなりますが、見つかりにくくなります。
-n
-
このオプションで DNS の名前解決をしなくなります。
DNS はたいてい遅いので、このオプションでスピードアップできます。
-R
-
nmap がいつも名前解決をするようにします。
通常はネットワークにマシンが繋がっているのを見つけたときだけです。
-r
-
ポートスキャンする順番をランダムにしないようにします。
--randomize_hosts
-
スキャンする前に 2048 台以上のそれぞれのグループを入れ替えます。
このオプションで、多様なネットワークモニタリングシステムから見つかりにくくでき、 特に (あとで記述する) TIMING OPTIONS と組合わせて遅くするとより効果があります。
-M <max sockets>
-
(デフォルトでは TCP) connect() スキャンを同時にできる最大数を指定できます。
このオプションは、ほんの少しスキャンを遅くして、標的のマシンのクラッシュを防ぐのに役立ちます。
さらに -sS を使うことで、一般的にマシンの処理が軽くなります。
TIMING OPTIONS
普通、nmap はネットワークの特徴に合わせてスピードを調整し、
標的のネットワークやホストに見つからないようにできるだけ速く上手に働きます。
しかし、あるケースでは nmap のデフォルトのタイミングポリシーが目的に合わないこともあります。
次に示すオプションで、スキャンタイミングレベルをほどよく調節できます。
-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane>
-
nmap のタイミングポリシーを簡単に設定できます。
次のように 0〜5 の数字でも指定できます。
たとえば、'-T 0' だったら Paranoid モードで、'-T 5' なら Insane モードです。
以上のタイミングモードは以下に示すオプションをより遅いレベルに設定して組合わせないほうがいいです。
--host_timeout <milliseconds>
-
nmap は一つのホストにかかる時間を指定できます。
デフォルトでは何も設定されていません。
--max_rtt_timeout <milliseconds>
-
nmap は個々の通信のタイムアウトを指定できます。
デフォルトは 9000 です。
--min_rtt_timeout <milliseconds>
-
目標ホストが非常に速く ESTABLISHED のパターンを応答するとき、
nmap は一つの調査にかかる時間の量を自動的に縮めます。
これはスキャンが早くなりますが、レスポンスが通常より長くかかったパケットは、 失敗してしまいます。
このパラメーターで、nmap が調査に見切りをつける前に最低限与えられた時間だけ待つことを保証することができます。
--initial_rtt_timeout <milliseconds>
-
初期のスキャンタイムアウトを指定します。
-P0 をつかってファイアウォールのあるホストを調査するのに有効です。
通常 nmap は、ping や 最初のいくつかの調査から適切な RTT評価値を得ることができます。
デフォルトモードは 6000 を使用します。
--max_parallelism <number>
-
同時スキャンする数の最大値を指定します。
たとえば 1 を指定すると、一度に 1つのポートしかスキャンしません。
ping sweep や RPC スキャンなどの同時にスキャンを行う際に効果があります。
--scan_delay <milliseconds>
-
調査の最小間隔を指定します。
ネットワークの負荷を落としたり、IDS に見つからないようにスキャンのスピードを落としてこっそりスキャンするのにとても役立ちます。
- 192.168.*.*
- 192.168.0-255.0-255
- 192.168.0-50,51-255.0,1,2,3,4,5-255
- 192.168.0.0/16
オプション (オプションの引数) 以外は全て標的のホストを指定しているように扱われます。
最も簡単なケースは
調査対象の単独のホスト名や IP アドレスをコマンドラインで表記する場合です。
もし、IP アドレスのサブネットでスキャンしたい場合は、
/mask をホスト名や IP アドレスに追加することが出来ます。
mask は 0 (インターネット全体をスキャン)
〜 32 (指定されたホストのみ) の間で指定してください。
/24 を指定するとクラスC のアドレスで、
/16 を指定するとクラスB のアドレスです。
nmap は IPアドレスのリストや範囲のそれぞれの要素を指定するのに、
さらに強力な表記方法があります。
たとえば、192.168.*.* のクラスB のネットワーク全体をスキャンするのに
のような表現が出来ます。これらは全て同じ意味です。
アスタリスク (*) を使用する場合、 シェルスクリプトではバックスラッシュ (\) またはクオータ (") が必要になることを覚えておいてください。
他の面白い方法は他の方法でインターネットを一部だけ調べられることです。
標的のクラス内の全てのホストをスキャンする代わりに、 EXAMPLES セクションを参照してください。
ここには nmap を使用するのに少し矛盾があるものや難解な例がいくつかあります
指定する IP アドレスやドメイン名をもっと具体的に指定していますので、
あなたのネットワークに合わせてアドレスや名前を入れ替えてください。
私は、他のネットワークをポートスキャンすることは違法だと思っていませんし、
ポートスキャンを他からの攻撃だと解釈するのは良くないと思います。
私は今まで 100も 1000ものマシンをスキャンしてきましたが、苦痛なだけでした。
私は法律家ではないけれども、nmap の調査に苛立ちを覚える人もいるでしょう。
先に許可をもらってから、あなたの責任で使ってください。
nmap -v target.example.com
このオプションは、全ての予約された TCP ポートを target.example.com
に対してスキャンします。
-v は冗長モードです。
nmap -sS -O target.example.com/24
target.example.com のクラスC に相当する
255 台のマシンに対してステルス SYN スキャンを発射します。
さらに、繋がっているマシンの OS を推測します。
これを行うには、SYN スキャンとOS 検知を行うので root 権限が必要です。
nmap -sX -p 22,53,110,143,4564 198.116.*.1-127
この方法では、198.116 クラスB 内の 8ビット 255それぞれのはじめの半分に対して
Xmas tree スキャンを送信します。
この場合は、sshd, DNS, pop3d, imapd, 4564 のポートをスキャンします。
マイクロソフトのマシンでは TCP スタックが不足しているので
Xmas スキャンはうまく働かないことに注意してください。
CISCO, IRIX, HP/UX, BSDI も同様です。
nmap -v --randomize_hosts -p 80 '*.*.2.3-5'
IP の範囲を指定するより、
インターネットから一部だけサンプルとして調べる方が面白いです。
このコマンドでは、IP アドレスの後半に .2.3, .2.4, .2.5 がつく全ての
Web サーバをスキャンします。
127 以降の方が興味深いマシンが多いです。
'127-222' を最初のアスタリスクの変わりにしたくなるでしょう。
なぜなら、IMHO によるとそのセクションに面白いマシンが密集しているからです。
host -l company.com | cut '-d ' -f 4 | ./nmap -v -iL -
company.com の DNS ゾーンで見つかったホストを整形して nmap に渡しています。
上記のコマンドは私の GNU/Linux マシンでの話です。
あなたは環境に合わせて他のコマンドか違うオプションが必要かもしれません。
(訳注: host コマンドは Red Hat の場合 bind-utils に入っていますが、
なんだかうまく動きません。ターゲットが悪いのかな?
詳細はこちら
cut コマンドは Red Hat の場合 textutils に入っています。
詳細はこちら)
バグですか? どんなバグですか?
見つけたら教えてください。パッチも歓迎します (笑)
新しい OS のフィンガープリントを送ってください。
データベースを成長できますので。
nmap は適したフィンガープリントが見つかったら、URL に上げます。
Fyodor <fyodor@insecure.org>
最新のバージョンは以下から入手可能です。
http://www.insecure.org/nmap/
nmap は (C) 1995-2001 by Insecure.Com LLC
libpcap は nmap と一緒にずっと開発されつづけます。
これは、カリフォルニア州バークレイ大学の Lawrence Berkley National Laboratory
の Van Jacobson, Craig Leres, Steven McCanne に著作権があります。
nmap と一緒に公開されたバージョンは変更されているかもしれません。
生ソースは
ftp://ftp.ee.lbl.gov/libpcap.tar.Z にあります。
このプログラムはフリーソフトです。
Free Software Foundation が公開している GNU General Public License Version 2
にしたがって再配布改変可能です。
再配布や改変はあなたの責任で行ってください。
もしこのライセンスに同意できないのならば、
別のライセンスを喜んで販売します。
(fyodor@insecure.org
にコンタクトしてください)
ソースは公開されています。
なぜなら、ユーザにはこのプログラムがどのような動作をするのか、
事前に知る権利があると信じているからです。
さらに、セキュリティホール (がこれ以上見つからないこと)
の監査に使用することを許可します。
ソースコードは新たなプラットフォームに対応したり、バグを修正したり、
新機能を追加してかまいません。
修正内容を fyodor@insecure.org
に送ってもらえば、できるだけメインの機能に追加するやる気がでます。
修正内容を Fyodor か、insecure.org 開発メーリングリストの一つに送ってもらえば、
Fyodor から無制限の再使用権、無制限改造のライセンス番号を取得できます。
その他の Free Software project (KDE や NASM) が抱えている問題を、
前のライセンスが無効になるために、再ライセンスされたコードが破壊することは重要です。
nmap はずっとオープンソースです。
あなたの出資による特別なライセンスの状態にしたいのなら、
私達にそういってください。
このプログラムは役立つことを願って公開されていますが、何ら一切の保証はありません。
商品としての適格性の保証は含まれていないし、何ら規格への適合はありません。
詳しくは GNU General Public License を参照してください。
(nmap のディストリビューションに著作権 (COPYING) ファイルが同梱されています)
nmap は文中に掲載された弱いプログラムや TCP スタックや OS
でさえも破壊することが知られていることに気を付けてください。
nmap はダウンによる損害に対する準備をしていない限り、
ミッションクリティカルなシステムで実行しないでください。
nmap があなたのシステムやネットワークの破壊する可能性があることを認めます。
また、nmap を実行したことによるダメージや問題に関して一切責任を負いかねます。
わずかな破壊のリスクのためや、black hat による nmap を使った調査をされた以上に、
スキャンされたときに慌てふためく管理者達がいます。
だから、実行前に許可を取ることをお勧めします。
nmap はセキュリティの理由から、(suid root など) の権限では絶対に実行しません。
nmap の 2.0 以上の全バージョンは 2000 年問題を解決しています。
2.0 以前のバージョンは 2000 年問題があるかもしれませんが、確認していません。