Nmapを利用したポートスキャンへの対策

Ver.3.00対応になりました

Nmapとは / Port Scanとは

 Nmapとは、一言で言えばPort Scanを行うツールです。Port Scanが何かということについてはここでは詳しくは述べませんが、簡単に説明しておきます。

 WWWやFTPなど、外部から接続するユーザーに対してサービスを提供するサーバーは、提供するサービスごとに特定のポート番号を割り当て、その番号で外部からの接続を待っています。この状態を"ポートがオープンしている"と呼びます。

 通常、ある任意のサーバーで何番のポートがオープンしているということは基本的に分かりません。通常はそのようなことを知る必要性はありませんし、また知ってもどうなる物ではありませんが、サーバーのセキュリティホールを突いて侵入を試みるクラッカーにとっては、どのポートが開いているかということは非常に重要な情報になります。例えばある特定のポートを利用するサービスにセキュリティホールがあることが分かっていて、そのポートがあるサーバーでオープンされてことをクラッカーが知ったら、そこにクラッキングをかけるでしょう。

 ここで気が付くかと思いますが、Port Scanを行うこのNmapは、クラッキングからサーバーを防御する側にとって、どのポートが開いているのか、不必要なポートは開いていないか、またクラッカーの侵入によってオープンされているポートはないか、といったことを確認するために非常に有効なツールであると同時に、クラッカーにとってもクラッキングを行う情報を得るために悪用できるツールでもあるわけです。

 不用意にインターネット上の見知らぬサーバーに対してNmapを利用してPort Scanを行うと、Scanを受けている側からすればアタックを受けているようにしか見えないので、自分が管理しているサーバーのチェック以外には、決して利用しないようにして下さい。

 

Nmapの入手と関連ドキュメント

 NmapはInsecure.orgが開発・配布を行っています。ソースコードやバイナリパッケージ、各種ドキュメントについては、Insecure.orgから入手するのが間違いありません。
  NmapはLinuxだけではなく、WindowsやSolaris、FreeBSD、MacOS XやHP-UXなど、様々なOSをサポートしています。ディストリビューションによっては、あらかじめ同梱されている場合もあります。ちなみに、管理人が利用しているRedhat Ver.8では、インストール時に選択できましたし、インストール後でもパッケージ管理ツールを利用すれば容易に導入できます。
  Unix系OS向けにGTKを利用したGUIインターフェース(Nmap Frontend)も用意されていますので、こちらも併せて導入しておくと良いでしょう。

 Insecure.orgのTopPage
  http://www.insecure.org/

 Nmapの公式ページ
  http://www.insecure.org/nmap/index.html

 ドキュメント類も併せて配布されています。各国語版のドキュメントがありますが、2003年1月6日の時点で、日本語のドキュメントは一つしかありません。

 Remote OS detection via TCP/IP Stack FingerPrinting
  http://www.insecure.org/nmap/nmap-fingerprinting-article-jp.html

 本当はManの日本語版があるのが理想だと思われますが、管理人が調べた限りでは一切存在していないようでした。しかし、当サイトのアクセス解析の結果を眺めると、Nmapの情報を求めてこのページを訪れる方が非常に多いようでしたので、管理人が翻訳を行いました。

 翻訳の対象としたのは、Nmapのドキュメントページにあるこちらです。このファイルは2003年1月6日現在の最新開発版であるNmap 3.10α9のManページで、同時点での最新安定版であるVer.3.00に付属しているManの内容と若干異なる部分があります。管理人が把握している差異を以下に示しておきます。

 ・"-6"オプション(IPv6サポート)がVer.3.00にはない
 ・"--packet_trace"オプション(パケット出力モード)がVer.3.00にはない

 上記以外にも差異がある可能性があります。また、99%は正しいと思いますが、誤訳がある可能性も否定できません。そこら辺を踏まえた上でご利用ください。

Nmap Manページ日本語版

 正直言って、この情報がどれだけ必要とされているのか見えない部分があります。もし非常に多くの方が必要とされているのでしたら、Nmap本家にContributeしてもいいかなと思っていますが、自分一人では翻訳の品質を担保することさえ出来ません。もし本格的に動くならば、それなりの手続きを踏む必要があると思っています。

 その目安とするために、Nmap Manページ日本語訳が役に立った、という方がいらしゃったら、情報交換掲示板の方に一言でもいいのでコメントして頂ければと思います。ご協力お願いいたしますm(__)m

 

Nmapの起動

 導入については触れません。なにしろRedhat Ver.8では初期導入されているので、書きようがありません(^^;。ただし、RPMが利用できる環境ならばそちらで導入できますし、Windows版はインストーラー付、SolarisやDebian、FreeBSDなどでもパッケージ化されたNmapが用意されているので、導入が問題となることはまずないでしょう。

 本題の利用方法ですが、色々な意味でわかりやすいので、先に紹介したGUI版のフロントエンドを利用するといいと思います。下の画面はRedhat Ver.8上のターミナルから、"nmapfe &"でGUIを起動した画面です。左側はrootで起動、右側は一般ユーザーで起動した画面です

Nmap_Root Nmap_User

 チェックボックスの数が全く違うのが一目でわかると思いますが、Nmapはネットワークのかなり低層の機能をフルに利用するため、root権限で起動しないと真価が発揮できません。 通常、Nmapを利用するのはシステム管理者だと思われますので、自分の責任においてrootで起動するようにしましょう。
  逆に、もしあなたが一般ユーザーの権限しか持っていないのであれば、Nmapの利用はあきらめるべきです。なぜならば、先にも書きましたが、Nmapはある意味非常に危険なツールであるからです。一般ユーザーがNmapを悪用して何か問題を起こした場合、責任を問われるのはそのシステムの管理者なのです。このため、自分の責任で実行できない場合は、利用をするべきではないと管理人は考えます。

 

Nmapの利用例

 利用方法については、述べるべき事は多くはありません。全てはManに書かれています。 ただし、NmapのManは、私が知る限り最大サイズの巨大なManなので、よほど英語とネットワークの両方に明るい人でないと読むすら起きないでしょう。たとえ一読したとしても、自分が達成したい目的と自分の環境とを併せて考えて、最適の解を導き出すのは非常に困難な作業になるでしょう。

 しかし、マシンの簡単なセキュリティチェックに利用するのであれば、それほど込み入ったオプションを駆使する必要がないというのもまた事実です。ここでは、ごく簡単かつありがちな利用方法を幾つか例として挙げるに留めておきます。これ以上の利用方法を求めるのであれば、Manを参照してください。また、以下の例はroot権限を持っている前提でオプションの指定を行います。

 Manの中には、インターネット上の任意のホストを対象にスキャンを行う方法も紹介されていますが、攻撃の前準備と認識される可能性があるので、絶対に行わないでください。ここでは、基本的にローカルネットワークのみをスキャン対象として想定しています。同様の意味で、自分の身元を隠蔽したり、スキャン対象ホストを騙すようなオプションについては、ここでは一切触れません。

例1 : nmap -sS 192.168.0.2

 ・192.168.0.2でオープンしているTCPポートをスキャンする。
 ・-sSはSYN Stelthスキャン(詳細はMan参照)で、rootユーザーのデフォルトスキャンタイプ。
 ・Nmap付属のnmap-servicesファイルに記述があるTCPポートのみをスキャンする。
 ・-sSを-sUにすると、同じ条件でUDPポートのスキャンが行われる。

例2 : nmap -sS -p 1-65535 192.168.0.2

 ・-pはポート番号指定用のオプション。上記の例だと1番~65535番ポートまでを指定している。
 ・明示的にポート指定があるので、nmap-servicesに記述がないポートもスキャンされる。
 ・これ以外は例1と同じ。

例3 : nmap -sS -O 192.168.0.2/24

 ・スキャン対象範囲として、192.168.0.2のホストが所属するサブネット全体を指定。
 ・具体的には、192.168.0.1~255までのホストがSYN Stelthスキャンの対象となる。
 ・-OはOS調査用のオプション。スキャン対象のホストのOSを調査し、報告する。

例4 : nmap -sP 192.168.0.2/24

 ・-sPはPingスキャンを意味する。スキャン対象の範囲は例3と同じ。
 ・実際のスキャン行為を一切行わず、単純にホストの死活確認のみを行いたい場合に有効。

例5 : nmap -sO 192.168.0.2

 ・-sOはIPプロトコルスキャンを意味する。
 ・192.168.0.2がサポートしているTCPのプロトコル種別(ICMP, TCP, UDP, GRE....)を報告する。
 ・-sOはGUIでは指定できないため、コマンドラインから実行する必要がある。

例6 : nmap -sS 192.168.0.2 -v

 ・スキャン対象/方式は、例1と同じ。
 ・-v(Verboseモード)が指定されると、スキャン過程についての詳細な情報が出力される。
 ・-vを複数個指定する事により(Ex. ....-v -v -v)、詳細度のレベルが向上する。
 ・-d(Detail)も同様の意味を持つが、詳細出力度が更に高くなる。
 ・-dを複数指定すると、とんでもない事になるが、一度くらい見てもいいかも....
 ・-dはGUIでは利用できない。-vは最上部のメニューから選択する必要がある。

例7 : nmap -sS 192.168.0.2 -oX /home/ryu/Nmap_XML.log

 ・スキャン対象/方式は例1と同じ。
 ・-oXが指定されると、スキャン結果が指定ファイルにXML形式で出力される。
 ・同様に、-oNで人間が読める形式、-oGでgrepしやすい形式で出力される。

例8 : nmap -sS 192.168.0.2 -oS /home/ryu/Nmap_ScriptKiddie.log

 ・スキャン対象/方式は例1と同じ。
 ・-oSが指定されると、スキャン結果が指定ファイルにScriptKiddie形式で出力される。
 ・このファイル形式を言葉で説明するのは困難だが、日本語風に言えば"2ちゃんねる形式"というのが一番適切であろう。
 ・とりあえず一度実行してみていただきたい。

例9 : nmap -sS -iR -p 80

 ・-iRは、Nmapにランダムにスキャン対象ホストを選ばせるオプション。
 ・つまり、例9は"手当たり次第にWebサーバーが上がっているホストを探す"という意味になる。
 ・Nmapは原則的に他人に向けて使用してはいけないが、これくらいは許されるでしょう(^^;

 ここまでの内容を大体理解できれば、Nmapの基本の基本は抑えたといってもいいでしょう。実際はもっと様々なオプションがありますが、それらについてはManに譲ります。

 最後にもう一度書いておきますが、くれぐれもNmapを見ず知らずのホストに利用しないでください!

Validator

Home