nmap

Nmapは生の(raw)IPパケットを用いて、ネットワーク上で調べようとするホストのどのポートが利用可能になっているか、これらのホストが提供しているサービス(アプリケーション名とバージョン)は何か、ホストが実行しているOS(OS名とバージョン)は何か、どのような種類のパケットフィルタ/ファイアウォールが使用されているかなど、その他数多くの特徴を斬新な方法で判別できる凄いツールです。

インストール

$ sudo apt-get install nmap

 

自分のホストで開いているポートを確認します。

$ nmap localhost

使用方法

ステルススキャン

もっとも基本的なポートスキャン方式が「TCP SYNスキャン」だ。「ステルススキャン」とも呼ばれている。このスキャン方式を利用するにはroot権限が必要だが、高速にポートスキャンを行えるのが特徴だ。root権限を持つユーザーがスキャン方式を指定しないでNmapを実行した場合、このスキャン方式が利用される。また、-sSオプションを指定して明示的にこのスキャン方式を選択することもできる。

 TCP SYNスキャンでは、対象のホスト/ポートに対しTCPのSYNパケットを送信し、その結果からポートが利用可能かどうかをチェックする。サーバーはSYNパケットを受信した場合、そのポートが利用可能であればSYN/ACKパケットをクライアントに返送する。いっぽう、サーバーアプリケーションが稼働していないなどで接続を受け付けられない場合はサーバーはRSTパケットを返送する。また、パケットフィルタなどでそのポートへのアクセスがブロックされている場合、サーバーからパケットは返送されない。この違いによってTCP SYNスキャンではポートの状態を調査する。

 なお、SYNスキャンでは対象のサーバー/ホストに対しSYNパケットを送信するだけで、実際の接続は確立させない。そのため、通常サーバー側にはそのログは残らない。ただし、ファイアウォールのログには記録される可能性がある。

$nmap -sS localhost

コネクトスキャン

TCP Connectスキャンは、connectシステムコールを発行してターゲットとするホスト/ポートへの接続を確立させることでポートが利用可能かどうかをチェックする。この方式ではroot権限を必要としないが、SYNスキャンと比べると処理速度に劣る。また、ターゲットのホストにログが記録される可能性も高くなる。一般ユーザーでスキャン方式を指定しないでNmapを実行した場合、このスキャン方式が利用される。また、-sTオプションを指定することで明示的にこの方式を選択することも可能だ。

$nmap -sT localhost

Null、FIN、Xmasスキャン

-sNオプションではTCP Nullスキャンを、-sFオプションではFINスキャンを、-sXオプションではXmasスキャンを実行できる。TCP Nullスキャンはどのフラグも設定していないパケットを送信することでスキャンを行う。TCP/IPではこのようなパケットを受信した場合、ポートの状態が「closed」であればRSTフラグ付きのパケットを返送する。いっぽうポートで待ち受けが行われていれば、何もパケットを返送しない。つまり、パケットの返送があればそのポートは「closed」であり、返送が無ければ「open」もしくは「filtered」のどちらか(「open|filtered」)であると判断できる。

 また、FINスキャンではTCPのFINフラグのみを設定したパケットを、XmasスキャンではFINおよびPSH、URGフラグを設定したパケットを利用する。これらのパケットについても、TCP Nullスキャンと同様の結果を得ることができる。

これらスキャン方式を利用するメリットは、特定のファイアウォールやパケットフィルタをすり抜けることが可能であるという点だ。ただし、ターゲットのOSやファイアウォール/ルーターによっては実際とは異なる検出結果が得られる可能性がある。また、ポートがclosedであることは判定できるが、openもしくはfilteredのどちらであるかは判定できない。つまり、検出結果は「closed」と「open|filtered」のどちらかとなる。

$nmap -sN localhost

ACKスキャン

TCP ACKスキャンでは、ACKフラグだけを設定したパケットを使ってポートスキャンを行う。このスキャンでは、ポートに対しフィルタが適用されているかどうか(filteredかunfilteredか)のみを判定できる。

$nmap -sA localhost

ウインドウスキャン

TCPウィンドウスキャンはACKスキャンと同じであるが、一部のシステムでは返送パケットのTCPウィンドウのフィールドが異なることを利用してポートがopenかclosedかどうかを判定する。ただし、この挙動をするのは一部のシステムのみであるため、信頼性は低い。

$nmap -sW localhost

Maimonスキャン

TCP Maimonスキャンは、FINおよびACKフラグを設定したパケットを使ってポートスキャンを行う。通常このパケットを受け取るとホストはRSTパケットを返送するが、BSD由来の一部のシステムではポートが開いている場合にパケットが返送されないことを利用してポートの状態を判別する。

 そのほか、指定した任意のフラグを設定したパケットを使用する–scanflagsオプションも用意されている。このオプションを利用することで、任意のフラグ付きパケットを対象ホストに送信できる。

$nmap -sM localhost

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です