26Nmapを検証してみました【NSE編】Tweet※本投稿に記載の内容を自身の管理下にないネットワーク・コンピュータに行った場合は、攻撃行為と判断され、最悪の場合、法的措置を取られる可能性もあります。同内容の調査を行われる場合には、必ず自身の管理下にあるネットワークやサーバーに対してのみ実施してください。コメントを受け付けていません。22Nmapを検証してみました【ヘルプ編】Tweet※本投稿に記載の内容を自身の管理下にないネットワーク・コンピュータに行った場合は、攻撃行為と判断され、最悪の場合、法的措置を取られる可能性もあります。同内容の調査を行われる場合には、必ず自身の管理下にあるネットワークやサーバーに対してのみ実施してください。【検証概要】Nmapの「日本語リファレンス」について、長らく更新されていないこともあり、「日本語リファレンス」記載の動作と「実際の動作」とに多数の差異が確認できました。本検証はNmapの「実際の動作」に基づいたヘルプを作成することを目的としております。公式リファレンスは以下をご参照ください。(下記、検証結果の項目にて多数引用しております。2パターンの検証環境にて、Nmapの全オプションを各々指定し、Nmapを実行しました。Nmap実行ホストおよびターゲットホストにてNmap実行時のパケットキャプチャを取得し、日本語リファレンスに記載されている内容と比較の上、差異を確認しました。各ホストは以下のOS、Versionを使用しました。各コマンド、コマンドの説明およびコマンド例を記載します。オプション(もしくはオプションの引数)以外の入力値は、すべてターゲットホストの指定として扱われる。ターゲットとするホスト/ネットワークを記載したファイルを指定する。ファイルの記載形式は、Nmapがコマンドラインで対応しているもの(IPアドレス、ホスト名、CIDR、IPv6、オクテット範囲)であれば指定可能。各入力は1つ以上のスペース、タブ、改行文字で区切る必要がある。標準入力からホストを読み込ませたい場合は、ファイル名としてハイフン(-)を指定する。全世界全てのIPアドレス(プライベート、マルチキャスト、未割り当てなどのアドレス範囲以外)からターゲットを無作為に選ぶ。hosts>はターゲットのIP数を指定。0(ゼロ)を指定すると、全てのIPをターゲットとする。ターゲットから除外するホスト/ネットワークを指定する。ホスト名、CIDR表記のネットブロック、オクテット範囲などを指定可能。ターゲットから除外するホスト/ネットワークを記載したファイルを指定する。・ターゲットのIPアドレスに対しARPを実行。応答があったホストをUPしているとみなす。・応答があったホストについては、DNSの逆引き解決を行う。・応答があったホストに対して、ポートスキャンを実施。ターゲットの全IPアドレスに対しDNSの逆引き解決のみを行う。pingスキャン(ホスト発見)のみを実行し、応答があったホストの一覧を出力する。ポートスキャンやOS検出などは行わない。デフォルト時と同じ動作を行う。(UPしているホストにのみポートスキャンを実施。デフォルト時と同じ動作を行う。デフォルト時と同じ動作を行う。デフォルト時と同じ動作を行う。デフォルト時と同じ動作を行う。デフォルト時と同じ動作を行う。デフォルト時と同じ動作を行う。ホストの発見により発見したアクティブなホストに対して逆引きのDNS解決を行わないように指定する。ターゲットのIPアドレスについて、ホストのUP/Downに関わらず、全てのホストの逆引きDNS解決を行う。DNSサーバーを個別に指定する。Nmapを実行しているサーバーのリゾルバを使用する。デフォルトではNmapが直接DNS問い合わせを行う。ターゲットホストに対しTraceRouteを行う。・以下のパケットを送信。いずれかのプロトコルで応答があれば、そのホストが存在すると判断し、以降パケット送信は行わない。-ICMPエコー-TCP443(SYN)-TCP80(ACK)-ICMPタイムスタンプ・応答があったホストについては、DNSの逆引き解決を行う。・応答があったホストに対して、ポートスキャンを実施。ターゲットの全IPアドレスに対しDNSの逆引き解決のみを行う。pingスキャン(ホスト発見)のみを実行し、応答があったホストの一覧を出力する。ポートスキャンやOS検出などは行わない。ホスト発見を行わず、ターゲットの全IPアドレスに対してスキャンを実行する。・全ホストに対しDNSの逆引き解決を行う。・全ホストに対しポートスキャンを実施。指定したTCPポートへのSYNパケット送信にてホストの発見を行う。(ICMPパケットは送信しない。)デフォルトはTCP80番ポート。コンマ区切りで複数のポート(例:-PS22,23,25)を指定することも可能。複数のポートを指定した場合、各ポートに対するプローブ送出は同時に行われる。SYN/ACKもしくはRSTの応答でターゲットホストがUPしていると判断する。ターゲットがOpenポートの場合には、ハーフオープン接続をリセットする。デフォルトで2回送信して応答がない場合はホストがDownしているとみなす。指定したTCPポートへのACKパケット送信にてホストの発見を行う。(ICMPパケットは送信しない。)デフォルトはTCP80番ポート。コンマ区切りで複数のポート(例:-PS22,23,25)を指定することも可能。複数のポートを指定した場合、各ポートに対するプローブ送出は同時に行われる。RSTの応答でターゲットホストがUPしていると判断する。デフォルトで2回送信して応答がない場合はホストがDownしているとみなす。指定したUDPポートへの送信にてホストの発見を行う。デフォルトは40125ポート。ICMPポート到達不能パケット(ICMP3-3)の応答でターゲットホストがUPしていると判断する。デフォルトで2回送信して応答がない場合はホストがDownしているとみなす。指定したSCTPポートへのINITチャンク送信にてホストの発見を行う。デフォルトは80ポート。コンマ区切りで複数のポート(例:-PY22,23,25)を指定することも可能。複数のポートを指定した場合、各ポートに対するプローブ送出は同時に行われる。ACK、ABORTもしくはICMPプロトコル到達不能パケット(ICMP3-3)の応答でターゲットホストがUPしていると判断する。2回送信して応答がない場合はホストがDownしているとみなす。指定したICMP要求パケットの送信にてホストの発見を行う。2回送信して応答がない場合はホストがDownしているとみなす。ホストの発見により発見したアクティブなホストに対して逆引きのDNS解決を行わないように指定する。ターゲットのIPアドレスについて、ホストのUP/Downに関わらず、全てのホストの逆引きDNS解決を行う。DNSサーバーを個別に指定する。Nmapを実行しているサーバーのリゾルバを使用する。デフォルトではNmapが直接DNS問い合わせを行う。各ホストに対し、TraceRouteを実行する。ポートスキャンを行う場合は、ポートスキャン時のプローブでTraceRouteを実行。ポートスキャンを行わない場合はICMPを別途送信しTraceRouteを実行する。–traceroute■ポートスキャンのテクニックこのオプションは一度に1つしか使えないが、UDPスキャン(-sU)だけは例外で、TCPスキャンタイプのいずれか1つと組み合わせて用いることができる。SYNスキャンを実行。TCPのSYNパケットでポートスキャンを実行。Openポートに対してハーフオープン接続をリセットするため、TCPコネクションを確立しない。(ターゲットからSYN/ACKで応答があった場合、RSTパケットを送信して、コネクションを終了させる。)複数ホストが対象の場合は、同時に実行する。スキャン対象ポートの応答によりポートの状態を以下に分類する。TCPのSYNパケットでポートスキャンを実行。Openポートに対してハーフオープン接続をリセットできないため、TCPコネクションを確立してしまう。Nmap実行ユーザが生パケットへの書き込み権限を持たないか、IPv6ネットワークをスキャンする場合に使用。空の(データなし)UDPヘッダを各UDPポートに送ることでUDPスキャンを実行。スキャン対象ポートの応答によりポートの状態を以下に分類する。応答パケットの送信数が制限されている場合が多く、Nmapはそれに応じて処理速度を下げる。それぞれTCPの以下フラグを立てたパケットでポートスキャンを実行。SYN、RST、ACKなどのフラグビットを含まないパケットに対しては、ポートが閉じている場合はRSTが返され、ポートが開いている場合は何の応答も返されない。FIN、PSH、URGのフラグをすべて設定するスキャン対象ポートの応答によりポートの状態を以下に分類する。TCPのACKパケットでポートスキャンを実行。スキャン対象ポートの応答によりポートの状態を以下に分類する。TCPのACKパケットでポートスキャンを実行。スキャン対象ポートの応答によりポートの状態を以下に分類する。TCPのFIN/ACKパケットでポートスキャンを実行。ターゲットホストがBSD由来のシステムの場合、ポートの状態により以下の動作を行う(BSDでは未検証。WindowsではOpen/Closed関係なく、全てのポートでRSTパケットで応答した。)Openポート:パケットが破棄される。Closedポート:RSTパケットで応答。任意のTCPフラグを指定し、ポートスキャンを実行。FIN)といった数字のフラグ値で指定することも、記号名を使った指定(順不同)も可能。フラグに対応する数字は以下を参照。-sFなど)を指定でき、ポート状態の分類は同スキャンタイプの分類に準ずる。デフォルトはSYNスキャンが使用される。ゾンビホストを利用して、同ホストからTCPポートスキャンを実行する。(Nmap実行ホストの実IPアドレスからは、ターゲットホストにプローブが送信されない。)ホスト発見時はNmap実行ホストのIPアドレスを使用。TCPポートスキャン時のソースポートはデフォルトでTCP443。スキャン結果は、指定したゾンビホストから見たOpenポートが表示される。任意のTCPフラグを指定し、ポートスキャンを実行。FIN)などの数字のフラグ値で指定することもできるが、記号名を使った指定(順不同)も可能である。フラグに対応する数字は以下を参照。URG(32)、ACK(16)、PSH(8)、RST(4)、SYN(2)、FIN(1)TCPスキャンタイプ(「-sA」や「-sF」など)を指定でき、ポート状態の分類は同スキャンタイプの分類に準ずる。デフォルトはSYNスキャンが使用される。ECHOチャンクでポートスキャンを実行。スキャン対象ポートはデフォルトで52ポート。スキャン対象ポートの応答によりポートの状態を以下に分類する。ターゲットマシン上でどのIPプロトコル(TCP、ICMP、IGMPなど)がサポートされているかをスキャンする。スキャンするプロトコル番号を指定するには「-p」オプションを使う。IPパケットヘッダのIPプロトコル番号フィールドにスキャン対象のプロトコル番号を挿入して送信する。以下のプロトコルスキャンには下記パケットを使用する。プロキシFTP接続の脆弱性を持つFTPサーバーに他のホストをポートスキャンさせる。(未検証)引数は<username>:<password>@<server>:<port>。<server>は、この脆弱性を持つFTPサーバーの名前かIPアドレスを指定する。匿名ログインが可能な場合は、<username>:<password>の部分を、使用するポート番号がFTPポート(21)の場合は、ポート番号(と前のコロン)をそれぞれ省略できる。TCP/UDPともに1000ポートをスキャン。スキャンするポートの順番はランダムで選択する。ポートスキャン時のスキャン対象ポートを指定する。スキャンタイプ「-s*」で指定したプロトコルのポートが対象となる。(TCP/UDPポート両方のスキャンを実行するには、-sUおよび最低1つのTCPスキャンタイプ(「-sS」、「-sF」、「-sT」など)を指定する必要がある。)IPプロトコルスキャン「-sO」では、本オプションでスキャン対象とするプロトコル番号を指定する(0-255)。指定方法は以下を参照。ポートスキャンから除外したいポートを指定する。ポートの指定方法は-pオプションと同様。IPプロトコルスキャン「-sO」では、本オプションでスキャンから除外したいプロトコル番号を指定する。100ポートのスキャンのみ実施。(デフォルトは1000ポート)「–datadir」オプションを使用して、独自に作成したnmap-servicesファイルを指定可能。番号順にポートスキャンを実行する。nmap-servicesファイル記載のポートの内、スキャン優先度が高い上位ポート<number>ポートをスキャンする。<number>は1以上の数値で指定。「–exclude-ports」で指定されたポートは除外される。以下、上位10ポートを記載。nmap-servicesファイル記載のポートの内、open-Frequencyが指定した値より大きいポートのみをスキャン対象とする。<ration>は0以上1以下の値で指定。ポートスキャン実施後、Openポートのバージョン検出(サービスプロトコル、アプリケーション名、バージョン番号などの特定)を行う。デフォルトでは、TCPポート9100番はバージョン検出を行わないが(一部のプリンタはこのポートに送られたものを全て出力するため)、同オプションを指定することにより、全ポートのバージョン検出を行う。Nmapは、バージョンスキャン(-sV)を実行する際に、1から9までの希少(rarity)値が割り振られた一連のプローブを送信する。この希少値が小さいプローブほど、よく用いられる各種サービスに対して有効であり、この希少値が大きいプローブほど、用途が限られることになる。この数字が大きいほど、サービスが正しく特定される確率は高くなるが、強度が高いスキャンは、それだけ時間がかかる。強度は0から9の間で指定する必要があり、デフォルトは7である。