10月 22

Nmapを検証してみました【ヘルプ編】



※本投稿に記載の内容を自身の管理下にないネットワーク・コンピュータに行った場合は、攻撃行為と判断され、最悪の場合、法的措置を取られる可能性もあります。同内容の調査を行われる場合には、必ず自身の管理下にあるネットワークやサーバーに対してのみ実施してください。


 

【検証概要】
Nmapの「日本語リファレンス」について、長らく更新されていないこともあり、「日本語リファレンス」記載の動作と「実際の動作」とに多数の差異が確認できました。本検証はNmapの「実際の動作」に基づいたヘルプを作成することを目的としております。
なお、公式リファレンスは以下をご参照ください。(下記、検証結果の項目にて多数引用しております。)

日本語版リファレンスガイド
「Nmap リファレンスガイド (Man Page)」 https://nmap.org/man/jp/

英語版リファレンスガイド
「Chapter 15. Nmap Reference Guide」 https://nmap.org/book/man.html
 

【検証環境】
下図、2パターンの検証環境にて、Nmapの全オプションを各々指定し、Nmapを実行しました。Nmap実行ホストおよびターゲットホストにてNmap実行時のパケットキャプチャを取得し、日本語リファレンスに記載されている内容と比較の上、差異を確認しました。

Nmapヘルプ検証構成図

なお、各ホストは以下のOS、Versionを使用しました。
・Nmap実行ホスト:Kali Linux Rolling (Nmap version 7.25 BETA1)
・ターゲットホスト:metasploitable-linux-2.0.0
 

【検証結果】
以下に各コマンド、コマンドの説明およびコマンド例を記載します。
※1 Nmapのヘルプに記載なし
※2 タブ補完不可
 

■ターゲットの指定

コマンド コマンドの説明


コマンド例

デフォルト オプション(もしくはオプションの引数)以外の入力値は、すべてターゲットホストの指定として扱われる。
コマンド例)
nmap 192.168.1.0/24
nmap 192.168.1.4/24
nmap 192.168.1.1-254
-iL <inputfilename>
(リストから入力)
ターゲットとするホスト/ネットワークを記載したファイルを指定する。
ファイルの記載形式は、Nmapがコマンドラインで対応しているもの(IPアドレス、ホスト名、CIDR、IPv6、オクテット範囲)であれば指定可能。ただし各入力は1つ以上のスペース、タブ、改行文字で区切る必要がある。標準入力からホストを読み込ませたい場合は、ファイル名としてハイフン(-)を指定する。
コマンド例)
nmap iL target
-iR <num hosts>
(ターゲットを無作為に選ぶ)
全世界全てのIPアドレス(プライベート、マルチキャスト、未割り当てなどのアドレス範囲以外)からターゲットを無作為に選ぶ。
<num hosts>はターゲットのIP数を指定。0(ゼロ)を指定すると、全てのIPをターゲットとする。
コマンド例)
nmap -iR 2
–exclude <host1[,host2][,host3],…>
(ホスト/ネットワークを除外する)
ターゲットから除外するホスト/ネットワークを指定する。
ホスト名、CIDR表記のネットブロック、オクテット範囲などを指定可能。
コマンド例)
nmap 192.168.1.0/24 –exclude 192.168.1.0/26
–excludefile <exclude_file>
(ファイルからリストを除外する)
ターゲットから除外するホスト/ネットワークを記載したファイルを指定する。
コマンド例)
nmap 192.168.1.0/24 –excludefile excludetarget

 

■ホストの発見

≪Nmap実行ホストとターゲットホストが同セグメントの環境≫

コマンド コマンドの説明


コマンド例

デフォルト ・ターゲットのIPアドレスに対しARPを実行。応答があったホストをUPしているとみなす。
・応答があったホストについては、DNSの逆引き解決を行う。
・応答があったホストに対して、ポートスキャンを実施。
コマンド例)
nmap 192.168.1.96/29
-sL
(リストスキャン)
ターゲットの全IPアドレスに対しDNSの逆引き解決のみを行う。(他スキャンとの組み合わせ不可)
コマンド例)
nmap 192.168.1.96/29 -sL
-sn
-sP※1
(Ping スキャン)
pingスキャン(ホスト発見)のみを実行し、応答があったホストの一覧を出力する。ポートスキャンやOS検出などは行わない。
コマンド例)
nmap 192.168.1.96/29 -sn
-Pn
-P0※1※2
(ping なし)
デフォルト時と同じ動作を行う。(UPしているホストにのみポートスキャンを実施。)
コマンド例)
nmap 192.168.1.96/29 -Pn
-PS<portlist>
(TCP SYN Ping)
デフォルト時と同じ動作を行う。
コマンド例)
nmap 192.168.1.96/29 -PS3389
-PA<portlist>
(TCP ACK Ping)
デフォルト時と同じ動作を行う。
コマンド例)
nmap 192.168.1.96/29 -PA3389
-PU<portlist>
(UDP Ping)
デフォルト時と同じ動作を行う。
コマンド例)
nmap 192.168.1.96/29 -PU161
-PY
(SCTP PIng)
デフォルト時と同じ動作を行う。
コマンド例)
nmap 192.168.1.96/29 -PY22
-PE; -PP; -PM
(ICMP Ping タイプ)
デフォルト時と同じ動作を行う。
コマンド例)
nmap 192.168.1.96/29 -PE
nmap 192.168.1.96/29 -PP
nmap 192.168.1.96/29 -PM
-PR
(ARP Ping)
デフォルト時と同じ動作を行う。
コマンド例)
nmap 192.168.1.96/29 -PR
-n
(DNS解決を行わない)
ホストの発見により発見したアクティブなホストに対して逆引きのDNS解決を行わないように指定する。
コマンド例)
nmap 192.168.1.96/29 -n
-R
(全ターゲットにDNS解決を行う)
ターゲットのIPアドレスについて、ホストのUP/Downに関わらず、全てのホストの逆引きDNS解決を行う。
コマンド例)
nmap 192.168.1.96/29 -R
–dns-servers <serv1[,serv2],…> DNSサーバーを個別に指定する。
コマンド例)
nmap 192.168.1.96/29 –dns-servers 8.8.8.8
–system_dns
(システムのDNSリゾルバを使う)
Nmapを実行しているサーバーのリゾルバを使用する。デフォルトではNmapが直接DNS問い合わせを行う。
コマンド例)
nmap 192.168.1.96/29 –system-dns
–traceroute ターゲットホストに対しTraceRouteを行う。
コマンド例)
nmap 192.168.1.96/29 –traceroute

 

≪Nmap実行ホストとターゲットホストが別セグメントの環境≫

コマンド コマンドの説明


コマンド例

デフォルト ・以下のパケットを送信。いずれかのプロトコルで応答があれば、そのホストが存在すると判断し、以降パケット送信は行わない。
-ICMPエコー
-TCP443(SYN)
-TCP80(ACK)
-ICMPタイムスタンプ
・応答があったホストについては、DNSの逆引き解決を行う。
・応答があったホストに対して、ポートスキャンを実施。
コマンド例)
nmap 192.168.1.96/29
-sL
(リストスキャン)
ターゲットの全IPアドレスに対しDNSの逆引き解決のみを行う。(他スキャンとの組み合わせ不可)
コマンド例)
nmap 192.168.1.96/29 -sL
-sn
-sP※1
(Ping スキャン)
pingスキャン(ホスト発見)のみを実行し、応答があったホストの一覧を出力する。ポートスキャンやOS検出などは行わない。
コマンド例)
nmap 192.168.1.96/29 -sn
-Pn
-P0※1※2
(ping なし)
ホスト発見を行わず、ターゲットの全IPアドレスに対してスキャンを実行する。
・全ホストに対しDNSの逆引き解決を行う。
・全ホストに対しポートスキャンを実施。
コマンド例)
nmap 192.168.1.96/29 -Pn
-PS<portlist>
(TCP SYN Ping)
指定したTCPポートへのSYNパケット送信にてホストの発見を行う。(ICMPパケットは送信しない。)デフォルトはTCP80番ポート。コンマ区切りで複数のポート(例:-PS22,23,25)を指定することも可能。複数のポートを指定した場合、各ポートに対するプローブ送出は同時に行われる。
SYN/ACKもしくはRSTの応答でターゲットホストがUPしていると判断する。なお、ターゲットがOpenポートの場合には、ハーフオープン接続をリセットする。デフォルトで2回送信して応答がない場合はホストがDownしているとみなす。
コマンド例)
nmap 192.168.1.96/29 -PS3389
-PA<portlist>
(TCP ACK Ping)
指定したTCPポートへのACKパケット送信にてホストの発見を行う。(ICMPパケットは送信しない。)デフォルトはTCP80番ポート。コンマ区切りで複数のポート(例:-PS22,23,25)を指定することも可能。複数のポートを指定した場合、各ポートに対するプローブ送出は同時に行われる。
RSTの応答でターゲットホストがUPしていると判断する。デフォルトで2回送信して応答がない場合はホストがDownしているとみなす。
コマンド例)
nmap 192.168.1.96/29 -PA3389
-PU<portlist>
(UDP Ping)
指定したUDPポートへの送信にてホストの発見を行う。デフォルトは40125ポート。
ICMPポート到達不能パケット(ICMP3-3)の応答でターゲットホストがUPしていると判断する。デフォルトで2回送信して応答がない場合はホストがDownしているとみなす。
コマンド例)
nmap 192.168.1.96/29 -PU161
-PY
(SCTP PIng)
指定したSCTPポートへのINITチャンク送信にてホストの発見を行う。
デフォルトは80ポート。コンマ区切りで複数のポート(例:-PY22,23,25)を指定することも可能。複数のポートを指定した場合、各ポートに対するプローブ送出は同時に行われる。
INIT- ACK、ABORTもしくはICMPプロトコル到達不能パケット(ICMP3-3)の応答でターゲットホストがUPしていると判断する。2回送信して応答がない場合はホストがDownしているとみなす。
コマンド例)
nmap 192.168.1.96/29 -PY22
-PE; -PP; -PM
(ICMP Ping タイプ)
指定したICMP要求パケットの送信にてホストの発見を行う。
2回送信して応答がない場合はホストがDownしているとみなす。
-PE:ICMPエコー要求
-PP:タイムスタンプ要求
-PM:アドレスマスク要求
コマンド例)
nmap 192.168.1.96/29 -PE
nmap 192.168.1.96/29 -PP
nmap 192.168.1.96/29 -PM
-PR
(ARP Ping)
実行不可。
コマンド例)
nmap 192.168.1.96/29 -PR
-n
(DNS解決を行わない)
ホストの発見により発見したアクティブなホストに対して逆引きのDNS解決を行わないように指定する。
コマンド例)
nmap 192.168.1.96/29 -n
-R
(全ターゲットにDNS解決を行う)
ターゲットのIPアドレスについて、ホストのUP/Downに関わらず、全てのホストの逆引きDNS解決を行う。
コマンド例)
nmap 192.168.1.96/29 -R
–dns-servers <serv1[,serv2],…> DNSサーバーを個別に指定する。
コマンド例)
nmap 192.168.1.96/29 –dns-servers 8.8.8.8
–system_dns
(システムのDNSリゾルバを使う)
Nmapを実行しているサーバーのリゾルバを使用する。デフォルトではNmapが直接DNS問い合わせを行う。
コマンド例)
nmap 192.168.1.96/29 –system-dns
–traceroute 各ホストに対し、TraceRouteを実行する。
ポートスキャンを行う場合は、ポートスキャン時のプローブでTraceRouteを実行。ポートスキャンを行わない場合はICMPを別途送信しTraceRouteを実行する。
コマンド例)
nmap 192.168.1.96/29 –traceroute

 

■ポートスキャンのテクニック

このオプションは一度に1つしか使えないが、UDPスキャン(-sU)だけは例外で、TCPスキャンタイプのいずれか1つと組み合わせて用いることができる。

コマンド コマンドの説明


コマンド例

デフォルト TCP SYNスキャンを実行。
コマンド例)
nmap 192.168.1.96/29
-sS
(TCP SYN スキャン)
TCPのSYNパケットでポートスキャンを実行。Openポートに対してハーフオープン接続をリセットするため、TCPコネクションを確立しない。(ターゲットからSYN/ACKで応答があった場合、RSTパケットを送信して、コネクションを終了させる。)複数ホストが対象の場合は、同時に実行する。

スキャン対象ポートの応答によりポートの状態を以下に分類する。
SYN/ACKで応答:Openポートと判断
RSTで応答:Closedポートと判断
数回再送信しても応答なし:Filteredポートと判断
ICMP到達不能エラー(タイプ 3、コード 1、2、3、9、10、13)で応答:Filteredポートと判断

コマンド例)
nmap 192.168.1.96/29 -sS
-sT
(TCP connect() スキャン)
TCPのSYNパケットでポートスキャンを実行。Openポートに対してハーフオープン接続をリセットできないため、TCPコネクションを確立してしまう。Nmap実行ユーザが生パケットへの書き込み権限を持たないか、IPv6ネットワークをスキャンする場合に使用。
コマンド例)
nmap 192.168.1.96/29 -sT
-sU
(UDP スキャン)
空の(データなし)UDPヘッダを各UDPポートに送ることでUDPスキャンを実行。
スキャン対象ポートの応答によりポートの状態を以下に分類する。
ICMPポート到達不能エラー(タイプ3、コード 1、2、9、10、13)で応答:Filteredポートと判断
ICMPポート到達不能エラー(タイプ3、コード3)で応答:Closedポートと判断
UDPパケットで応答:Openポートと判断
数回の再試行の後も応答がない場合:Open|Filteredポートと判断
応答パケットの送信数が制限されている場合が多く、Nmapはそれに応じて処理速度を下げる。
コマンド例)
nmap 192.168.1.96/29 -sU
-sN; -sF; -sX
(TCP Null、FIN、およびXmasスキャン)
それぞれTCPの以下フラグを立てたパケットでポートスキャンを実行。
SYN、RST、ACKなどのフラグビットを含まないパケットに対しては、ポートが閉じている場合はRSTが返され、ポートが開いている場合は何の応答も返されない。
Null スキャン 「-sN」: 何のビットも設定しない(tcpヘッダのフラグは0)
FIN スキャン 「-sF」: TCP FINビットだけを設定する
Xmas スキャン 「-sX」: FIN、PSH、URGのフラグをすべて設定する
スキャン対象ポートの応答によりポートの状態を以下に分類する。
RSTで応答:Closedポートと判断
数回再送信しても応答なし:Open|Filteredと判断
ICMP到達不能エラー(タイプ 3、コード 1、2、3、9、10、13)で応答:Filteredと判断
コマンド例)
nmap 192.168.1.96/29 -sN
nmap 192.168.1.96/29 -sF
nmap 192.168.1.96/29 -sX
-sA
(TCP ACK スキャン)
TCPのACKパケットでポートスキャンを実行。
スキャン対象ポートの応答によりポートの状態を以下に分類する。
RSTパケットで応答:Unfilteredポートと判断
応答を返さないポートや、ICMPポート到達不能エラー(タイプ3、コード 1、2、3、9、10、13)で応答:Filteredポートと判断
コマンド例)
nmap 192.168.1.96/29 -sA
-sW
(TCP ウィンドウスキャン)
TCPのACKパケットでポートスキャンを実行。
スキャン対象ポートの応答によりポートの状態を以下に分類する。
RSTパケット(TCPウインドウ=0)で応答:Closedポートと判断
RSTパケット(TCPウインドウ=正の値)で応答:Openポートと判断
応答を返さないポートや、ICMPポート到達不能エラー(タイプ3、コード 1、2、3、9、10、13)で応答:Filteredポートと判断
コマンド例)
nmap 192.168.1.96/29 -sW
-sM
(TCP Maimon スキャン)
TCPのFIN/ACKパケットでポートスキャンを実行。
ターゲットホストがBSD由来のシステムの場合、ポートの状態により以下の動作を行う(BSDでは未検証。WindowsではOpen/Closed関係なく、全てのポートでRSTパケットで応答した。)
Openポート:パケットが破棄される。
Closedポート:RSTパケットで応答。
コマンド例)
nmap 192.168.1.96/29 -sM
–scanflags
(カスタム TCP スキャン)
任意のTCPフラグを指定し、ポートスキャンを実行。
引数は、例えば9(PSH と FIN)といった数字のフラグ値で指定することも、記号名を使った指定(順不同)も可能。
フラグに対応する数字は以下を参照。
URG(32)、ACK(16)、PSH(8)、RST(4)、SYN(2)、FIN(1)TCPスキャンタイプ(-sA や -sFなど)を指定でき、ポート状態の分類は同スキャンタイプの分類に準ずる。デフォルトはSYNスキャンが使用される。
コマンド例)
nmap 192.168.1.96/29 –scanflags URGACKPSH
nmap 192.168.1.96/29 -sA –scanflags URGACKPSH
-sI <zombie host[:probeport]>
(Idle スキャン)
ゾンビホストを利用して、同ホストからTCPポートスキャンを実行する。(Nmap実行ホストの実IPアドレスからは、ターゲットホストにプローブが送信されない。)
ホスト発見時はNmap実行ホストのIPアドレスを使用。TCPポートスキャン時のソースポートはデフォルトでTCP443。
スキャン結果は、指定したゾンビホストから見たOpenポートが表示される。
コマンド例)
nmap 192.168.1.96/29 -sI 192.168.110.1
-sY
(SCTP INIT)
任意のTCPフラグを指定し、ポートスキャンを実行。
引数は、例えば9(PSH と FIN)などの数字のフラグ値で指定することもできるが、記号名を使った指定(順不同)も可能である。
フラグに対応する数字は以下を参照。
URG(32)、ACK(16)、PSH(8)、RST(4)、SYN(2)、FIN(1)TCPスキャンタイプ(「-sA」や「-sF」など)を指定でき、ポート状態の分類は同スキャンタイプの分類に準ずる。デフォルトはSYNスキャンが使用される。
コマンド例)
nmap 192.168.1.96/29 -sY
-sZ
(COOKIE-ECHOスキャン)
SCTPのCOOKIE ECHOチャンクでポートスキャンを実行。スキャン対象ポートはデフォルトで52ポート。
スキャン対象ポートの応答によりポートの状態を以下に分類する。
ABORTで応答:Closedポートと判断(未検証)
ICMP到達不能エラー(タイプ 3、コード 2)の応答:Filteredポートと判断
数回再送信しても応答なし:Open|Filteredポートと判断
コマンド例)
nmap 192.168.1.96/29 -sZ
-sO
(IPプロトコルスキャン)
ターゲットマシン上でどのIPプロトコル(TCP、ICMP、IGMPなど)がサポートされているかをスキャンする。スキャンするプロトコル番号を指定するには「-p」オプションを使う。
IPパケットヘッダのIPプロトコル番号フィールドにスキャン対象のプロトコル番号を挿入して送信する。
スキャン対象プロトコルの応答によりプロトコルの状態を以下に分類する
ICMPプロトコル到達不能エラー以外の応答があった場合:プロトコルをOpenと判断
ICMPプロトコル到達不能エラー(タイプ 3、 コード 2)で応答:プロトコルをClosedと判断
その他のICMP到達不能エラー(タイプ 3、 コード 1、3、9、10、13)で応答:プロトコルはFilteredと判断
数回再送信しても応答なし:プロトコルはOpen|Filteredと判断
以下のプロトコルスキャンには下記パケットを使用する。
TCP=ポート80番にACKパケット送信
UDP=ポート40125番にパケット送信
ICMP=ECHO request送信
SCTP=ポート80番にINITチャンク送信
コマンド例)
nmap 192.168.1.96/29 -sO
-b <ftp relay host>
(FTPバウンススキャン)
プロキシFTP接続の脆弱性を持つFTPサーバーに他のホストをポートスキャンさせる。(未検証)引数は<username>:<password>@<server>:<port>。<server>は、この脆弱性を持つFTPサーバーの名前かIPアドレスを指定する。
匿名ログインが可能な場合は、<username>:<password>の部分を、使用するポート番号がFTPポート(21)の場合は、ポート番号(と前のコロン)をそれぞれ省略できる。
コマンド例)
nmap 192.168.1.96/29 -b admin:[email protected]

 

■ポートの指定とスキャンの順序

コマンド コマンドの説明


コマンド例

デフォルト TCP/UDPともに1000ポートをスキャン。また、スキャンするポートの順番はランダムで選択する。
コマンド例)
nmap 192.168.1.96/29
-p <port ranges>
(指定されたポートのみスキャン)
ポートスキャン時のスキャン対象ポートを指定する。
スキャンタイプ「-s*」で指定したプロトコルのポートが対象となる。(TCP/UDPポート両方のスキャンを実行するには、-sUおよび最低1つのTCPスキャンタイプ(「-sS」、「-sF」、「-sT」など)を指定する必要がある。)
IPプロトコルスキャン「-sO」では、本オプションでスキャン対象とするプロトコル番号を指定する(0-255)。指定方法は以下を参照。
-p- (1番から65535番までのポート)
-p U:53,111,137,T:21-23,80 (UDPポートの53番、111番、137番と、TCPポートの21~23番、80番)
コマンド例)
nmap 192.168.1.96/29 -sS -sU -p U:53,T:3389,21-25,80
nmap 192.168.1.96/29 -sO -p 1-17
–exclude-ports <port ranges>※2 ポートスキャンから除外したいポートを指定する。ポートの指定方法は-pオプションと同様。IPプロトコルスキャン「-sO」では、本オプションでスキャンから除外したいプロトコル番号を指定する。(0-255)
コマンド例)
nmap 192.168.1.96/29 –exclude-ports 40-50
nmap 192.168.1.96/29 -sO –exclude-ports 4-16
-F
(高速 (限定したポートだけ) スキャン)
100ポートのスキャンのみ実施。(デフォルトは1000ポート)
「–datadir」オプションを使用して、独自に作成したnmap-servicesファイルを指定可能。
コマンド例)
nmap 192.168.1.96/29 -F
-r
(ポートの順番を無作為にしない)
番号順にポートスキャンを実行する。
コマンド例)
nmap 192.168.1.96/29 -r
–top-ports <number> nmap-servicesファイル記載のポートの内、スキャン優先度が高い上位ポート<number>ポートをスキャンする。<number>は1以上の数値で指定。なお、「–exclude-ports」で指定されたポートは除外される。
以下、上位10ポートを記載。
“ftp, ssh, telnet, smtp, http, POP3, netbios-ssn, https, microsoft-ds, ms-wbt-server”
コマンド例)
nmap 192.168.1.96/29 –top-ports 10
–port-ratio <ratio> nmap-servicesファイル記載のポートの内、open-Frequencyが指定した値より大きいポートのみをスキャン対象とする。<ration>は0以上1以下の値で指定。
コマンド例)
nmap 192.168.1.96/29 –port-ratio 0.002

 

■サービスとバージョンの検出

コマンド コマンドの説明


コマンド例

-sV
(バージョン検出)
ポートスキャン実施後、Openポートのバージョン検出(サービスプロトコル、アプリケーション名、バージョン番号などの特定)を行う。
コマンド例)
nmap 192.168.110.128/30 -sV
–allports※1※2
(バージョン検出の対象からすべてのポートを除外しない)
デフォルトでは、TCPポート9100番はバージョン検出を行わないが(一部のプリンタはこのポートに送られたものを全て出力するため)、同オプションを指定することにより、全ポートのバージョン検出を行う。
コマンド例)
nmap 192.168.110.128/30 -sV –allports
–version-intensity <intensity>
(バージョンスキャンの強度を設定)
Nmapは、バージョンスキャン(-sV)を実行する際に、1から9までの希少(rarity)値が割り振られた一連のプローブを送信する。この希少値が小さいプローブほど、よく用いられる各種サービスに対して有効であり、この希少値が大きいプローブほど、用途が限られることになる。この数字が大きいほど、サービスが正しく特定される確率は高くなるが、強度が高いスキャンは、それだけ時間がかかる。強度は0から9の間で指定する必要があり、デフォルトは7である。
コマンド例)
nmap 192.168.110.128/30 -sV –version-intensity 3
–version-light
(ライトモードを有効にする)
「–version-intensity 2」と同義。
コマンド例)
nmap 192.168.110.128/30 -sV –version-light
–version-all
(プローブを1つずつ試行する)
「–version-intensity 9」と同義。
コマンド例)
nmap 192.168.110.128/30 -sV –version-all
–version-trace
(バージョンスキャンの動作状況を追跡する)
バージョンスキャンのデバッグ情報を出力する。
(「–packet-trace」オプションの方がより詳細な情報を出力)
コマンド例)
nmap 192.168.110.128/30 -sV –version-trace
-sR
(RPCスキャン)※1※2
「-sV」と同義。(「-sV」オプションでもRPCのバージョン検出を行うため、同義となった。)
コマンド例)
nmap 192.168.110.128/30 -sR

 

■OS検出

コマンド コマンドの説明


コマンド例

-O
(OS検出を実行)
OSの検出を行う。
ポートスキャン実施後、ICMP、TCP、UDPパケットを送信。の応答パケットの内容よりOSを推測。ポートを全てFilterdにした場合にも、OS検出を行う。
コマンド例)
nmap 192.168.110.128/30 -O
–osscan-limit
(OS検出を有望なターゲットに絞る)
少なくとも1つのopenおよびclosedのTCPポートがないホストに対してはOS検出を行わない。
コマンド例)
nmap 192.168.110.128/30 -O –osscan-limit
–osscan-guess
–fuzzy※1※2
(OS検出の結果を推測)
どちらかのオプションを指定することで、ポートが全てFilteredのホストであってもOS検出を行う。(精度は下がる)
コマンド例)
nmap 192.168.110.128/30 -O –osscan-guess
nmap 192.168.110.128/30 -O –fuzzy

 

■タイミングとパフォーマンス

コマンド コマンドの説明


コマンド例

–min-hostgroup <size>
–max-hostgroup <size>
(並列スキャンのグループサイズを調節する)
Nmapはデフォルトで複数のホストをグルーピングし並行してポートスキャンやバージョンスキャンを行う。「–max-hostgroup」、「–min-hostgroup」でグループサイズの最大数、最小数を指定する。ホストの検出には適用されない。
コマンド例)
nmap 192.168.110.1-20 –min-hostgroup 10
nmap 192.168.110.1-20 –max-hostgroup 2
–min-parallelism <numprobes>
–max-parallelism <numprobes>
(プローブの並列処理を調節する)
ターゲットホストグループに向けて同時に送信するプローブの上限と下限を指定する。デフォルトでは、ネットワークパフォーマンスに基づいて、自動計算を行う。ホストの検出には適用されない。
コマンド例)
nmap 192.168.110.1-20 –min-parallelism 20
nmap 192.168.110.1-20 –max-parallelism 2
–min_rtt_timeout <seconds>
–max-rtt-timeout <seconds>
–initial-rtt-timeout <seconds>
(プローブのタイムアウトを調節する)
プローブを中止もしくは再送信するまでの実行タイムアウト値を指定する。デフォルトは動的に決定する。「–max-rtt-timeout」と「–initial-rtt-timeout」はデフォルトより小さな値を指定することで、スキャン時間を大幅に短縮できる。
以下、設定値の目安。
・Nmap実行ホストとターゲットホストが同セグメントの環境
「–max-rtt-timeout」の値は100ミリ秒(ms)が推奨最小値。
・Nmap実行ホストとターゲットホストが別セグメントの環境
最大往復時間(RTT)を調べ、「–initial-rtt-timeout」の値を、同値を2倍に、また「–max-rtt-timeout」の値は、これを3倍か4倍にしたものが推奨。
コマンド例)
nmap 192.168.110.128/30 –min_rtt_timeout 3
nmap 192.168.110.128/30 –max-rtt-timeout 0.1
nmap 192.168.110.128/30 –initial-rtt-timeout 0.1
–host-timeout <milliseconds>
(遅いターゲットホストを見切る)
ホスト毎のスキャンタイムアウト時間をミリ秒単位の数値で指定する。
タイムアウトしたホストのポートスキャン、OS検出結果は出力されない。
コマンド例)
nmap 192.168.110.128/30 –host-timeout 1
–scan-delay <seconds>
–max_scan-delay <seconds>
(プローブ間の遅滞時間を調節する)
ホスト発見、ポートスキャン実行時、ホスト毎に指定した送信間隔でプローブを送出する。
コマンド例)
nmap 192.168.110.128/30  –scan-delay 1
–max-retries <tries> ホスト発見、ポートスキャン実行時のプローブ再送回数を指定。
デフォルトは10。(信頼性の高いネットワークの場合は通常1回のみ再送を実施。)0を指定すると再送を行わない。なお、DNSの逆引き解決のプローブ再送回数については本オプションの影響を受けない。
コマンド例)
nmap 192.168.110.128/30 –max-retries 0
–min-rate <number> –max-rate <number> 「–min-rate」は1秒あたりに送信するプローブの最小値を、「–max-rate」は1秒あたりに送信するプローブの最大値をそれぞれ指定する。
なお、同オプションは各ターゲットホスト毎ではなく、ターゲットホスト全体に対して送信するプローブ数の1秒あたりの上限、下限を決定する。ホスト発見、ポートスキャンで有効となるが、OS検出には影響を与えない。
コマンド例)
nmap 192.168.110.128/30 –min-rate 10
nmap 192.168.110.128/30 –max-rate 5
-T <Paranoid|Sneaky|Polite|
Normal|Aggressive|Insane>
(タイミングのテンプレートを設定する)
スキャン用のタイミングテンプレートを使用する。
テンプレートは、paranoid (0)、sneaky (1)、polite (2)、normal (3)、aggressive (4)、insane (5)があり、-Tオプションと番号(0 – 5)か名前で指定できる。
デフォルトは「-T3(normal)」で、番号より小さくなるにつれスキャン処理速度を落として実行する。逆に番号が大きくなるにつれ、スキャン速度を上げて実行する。(プローブの送信間隔でタイミングをとる。)
テンプレートを最初に指定することで、その他制御オプションと組み合わせて使用することができる。
コマンド例)
nmap 192.168.1.128/30 -T3
nmap 192.168.1.128/30 -T2
nmap 192.168.1.128/30 -T4

 

■ファイアウォール/IDSの回避とスプーフィング

コマンド コマンドの説明


コマンド例

-f
(パケットをフラグメント化する)
–mtu
(指定したMTUを用いる)
ホスト発見を含む全てのスキャンにてパケットをフラグメント化する。
は小さく断片化されたIPパケットを利用するようになる。「-f」を一度指定すると、IPヘッダを8バイトかそれ以下のパケットに分割、「-f」を二度指定すると、IPヘッダを16バイトのパケットに分割。
「–mtu」では、ユーザ独自の分割サイズを指定することも可能。(分割サイズは8の倍数にする必要がある。)
コマンド例)
nmap 192.168.1.96/29 -f
nmap 192.168.1.96/29 -f -f
nmap 192.168.1.96/29 –mtu 8
-D <decoy1 [,decoy2][,ME],…>
(おとりを使ってスキャンを隠蔽する)
実際のスキャンの他に、おとりとして指定したホストアドレス(複数可)もスキャンしているようにターゲットホストに見せかける。各おとりホストはコンマで区切って指定する。おとりの1つとしてME(自分)オプションを用いて、Nmap実行ホストのIPアドレスをその位置で稼働させることもできる。
MEオプションを使わない場合、Nmapがランダムに位置を指定する。おとりホストのMACアドレスはNmap実行ホストのものを使用。おとりホストはNmap実行ホストと別セグメントのIPアドレスも指定可能。おとりとして使用するホストが稼動中でないと、OpenポートのSYN/ACKパケットに対するRSTを返さないため、ハーフオープン接続が大量に発生する可能性がある。
おとりは、ホスト発見およびポートスキャンの両方で使用される。OS検出「-O」を行う際にも使われる。
コマンド例)
nmap 192.168.1.96/29 -D 192.168.110.1,ME
nmap 192.168.1.96/29 -D 192.168.111.1,ME
-S <IP_Address>
(ソースアドレスを偽装する)
プローブの送信に利用したいインターフェースのIPアドレスを指定する。
・Nmap実行ホストとターゲットホストが同セグメントの環境
ホスト発見、ポートスキャンにて偽装IPアドレスを使用。Nmap実行ホストと別セグメントの偽装IPアドレスも使用可能。
・Nmap実行ホストとターゲットホストが別セグメントの環境
ホスト発見、ポートスキャンにて偽装IPアドレスを使用。Nmap実行ホストと別セグメントの偽装IPアドレスは使用不可。
コマンド例)
nmap 192.168.1.96/29 -S 192.168.110.132 -e eth0 -Pn
nmap 192.168.1.96/29 -S 192.168.1.131 -e eth0 -Pn
-e <interface>
(特定のインターフェースを使用する)
プローブを送受信に使用するNmap実行ホストのインターフェースを指定。
コマンド例)
nmap 192.168.1.96/29 -e eth0
–source-port <portnumber>
-g <portnumber>
(ソースポート番号を偽装する)
ポートスキャン時のソースポート番号を偽装する際に使用する。
コマンド例)
nmap 192.168.1.96/29 -sS –source-port 20
nmap 192.168.1.96/29 -sU –source-port 53
–proxies <url1,[url2],…> HTTP / SOCKS4プロキシを介するときに使用する。
コマンド例)
nmap 192.168.1.96/29 –proxies http://proxy.com
–data <hex string>※2
(送信パケットにバイナリデータを付加する)
送信するパケット内のペイロードにバイナリデータを含めることができる。
データは以下のとおり16進数で指定する。
・0xAABBCCDDEEFF<…>
・AABBCCDDEEFF<…>
コマンド例)
nmap 192.168.1.96/29 –data 0xAAAABBBB
nmap 192.168.1.96/29 –data AAAABBBB
–data-string <string>※2
(送信パケットに文字列データを付加する)
送信するパケット内のペイロードに文字列データを含めることができる。
文字列はユニコードにて送信する。
コマンド例)
nmap 192.168.1.96/29 –data-string test
–data-length <number>
(送信パケットにランダムデータを付加する)
送信パケットに指定したバイト数のランダムデータを付加する。
ホストの発見およびポートスキャン時のパケットには概ねデータが付加されるが、OS検出時のパケットにはデータは付加されない。
コマンド例)
nmap 192.168.1.96/29 –data-length 10
–ip-options <options> 指定されたIPオプション(sourceルーティング、Recordルートなど)付きパケットを送信する。
R: Record Route
T: Record-timestamp
U: Record Route、Record-timestampの両方
L: Looseソースルーティング
S: Strictソースルーティング
コマンド例)
nmap 192.168.1.96/29 –ip-options R
nmap 192.168.1.96/29 –ip-options L
–ttl <value>
(IPのTTLフィールド値を設定する)
送信パケットのIPv4生存時間(TTL)フィールドを指定した値に設定する。
コマンド例)
nmap 192.168.1.96/29 –ttl 10
–randomize-hosts※1※2
(ターゲットホストの順番を無作為化する)
ターゲットホストのスキャン順序(ホストの発見、ポートスキャンともに)をランダムにする。デフォルトでは昇順にスキャンが行われる。
(スキャン前に、各グループあたり最大8096のホストをランダムに並び替える。)
コマンド例)
nmap 192.168.1.0/24 –randomize-hosts
–spoof-mac <mac address, prefix, or vendor name>
(MACアドレスを偽装する)
Nmapが送信するイーサネットフレームに、指定したMACアドレスを使用する。オプション「–send-eth」が必須。
MACアドレスの指定方法は以下のとおり
文字列の“0”:MACアドレスをランダムに指定
16進数(2桁ずつコロンで区切る)の数値:同値をMACアドレスとして使用。12桁未満の16進数が指定された場合は、残りの6バイトにはランダムに指定する。
引数が0以外の文字列(Apple, Ciscoなど):nmap-mac-prefixes を調べ、指定した文字列を含むベンダ名を見つける。一致するものがあった場合、そのベンダのOUIを使用し、残りの3バイトにはランダムに指定する。
Nmap実行ホストとターゲットホストが同セグメントの環境では、ホスト発見の段で失敗する。Nmap実行ホストとターゲットホストが別セグメントの環境では、スキャンは成功するが「-Pn」オプションが必須となる。
コマンド例)
nmap 192.168.1.96/29 –send-eth –spoof-mac 0 -Pn
nmap 192.168.1.96/29 –send-eth –spoof-mac 00:00:0D:11:11:11 -Pn
nmap 192.168.1.96/29 –send-eth –spoof-mac cisco -Pn
–badsum
(送信パケットに無効なチェックサムを使用する)
ターゲットホストに送信されるパケットに対して無効なTCP、UDPまたはSCTPチェックサムを使用する。
ターゲットホストは受け取ったパケットをドロップし、なにも応答しない。
Nmap実行ホストとターゲットホストが別セグメントの環境の場合には、「-Pn」オプションが必須。(ホスト発見時のICMPその他パケットにも応答しなくなるため。)
コマンド例)
nmap 192.168.1.96/29 –badsum

 

■出力

コマンド コマンドの説明


コマンド例

デフォルト 標準出力(Nmapを実行中のターミナル)に出力。
コマンド例)
nmap 192.168.1.96/29
-oN <filespec>
(通常出力)
指定した名前のファイルにテキストで結果が書き込まれる。標準出力に比べ、実行時間情報や警告の出力が削られている。
コマンド例)
nmap 192.168.1.96/29 -oN test
-oX <filespec>
(XML出力)
指定した名前のファイルにXML形式で結果が書き込まれる。
デフォルトでは、nmap.xslののスタイルシートが使用される。
コマンド例)
nmap 192.168.1.96/29 -oX test
-oS <filespec>
(ScRipT KIdd|3 oUTpuT)
指定した名前のファイルにleet形式((一部のアルファベット文字を音や形状の似た別の文字に置き換える形式)のテキストで結果が書き込まれる。
コマンド例)
nmap 192.168.1.96/29 -oS test
-oG <filespec>
(Grep検索可能出力)
指定した名前のファイルにGrep可能なテキストで結果が書き込まれる。
出力結果の構成はコメント行(#記号で始まる行)とターゲット行で構成されており、ターゲット行は、6つのラベル付きフィールドの組み合わせになっており、それぞれのフィールドはタブで区切られている。各フィールドは、Host、Ports、Protocols、Ignored State、OS、Seq Index、IPID、Statusになっている。Ports(ポート)エントリはカンマ区切りリストになっており、各ポートエントリは、7つのスラッシュ(/)で区切られたサブフィールドから成る。各サブフィールドはポート番号/ポートの状態/プロトコル/所有者/サービス/SunRPC情報/バージョン情報/を示す。
コマンド例)
nmap 192.168.1.96/29 -oG test
-oA <basename>
(全フォーマットに出力する)
スキャン結果を通常、XML、grep可能の3つのフォーマットで出力する。それぞれ、<basename>.nmap、<basename>.xml、<basename>.gnmapというファイルに保存される。
コマンド例)
nmap 192.168.1.96/29 -oA test
-v
(出力結果の詳細(冗長)レベルを上げる)
より詳細なスキャン結果を出力する。二度指定すると、より詳細なスキャン結果を出力する。(ホスト検出、DNS逆引きなどの進捗状況や、Openポートのreasonなどが表示される。Openポートは見つかり次第表示される。)
本オプションは標準出力を対象にしたものだが、通常出力とスクリプトキディ出力にも一部効果がある。
コマンド例)
nmap 192.168.1.96/29 -v
-d
(デバッグレベルを上げる/設定する)
「-v」オプション以上の詳細なスキャン結果を出力する。複数回指定すると、より詳細なスキャン結果を出力する。
ホスト検出、DNS逆引き、ポートスキャンの進捗状況や、TimingReport、およびOpenポートのReasonなどが表示される。デバッグレベルを指定することで、結果の詳細レベルを設定できる。(1~9から9が最も詳細。)
コマンド例)
nmap 192.168.1.96/29 -d
–reason
(ホストおよびポートステータスの理由を表示する)
各ポートの状態(Open、Closedポートなど)を特定した理由、および各ホストがUPまたはDownしている理由を示す。例えば、RSTパケットが来たからClosedポート、エコー応答があったからホストはUPしているなど。
XMLで出力した場合には、同オプションを指定していなくても理由を出力する。
コマンド例)
nmap 192.168.1.96/29 –reason
–open
(Openポートのみ表示する)
少なくとも1つのOpen、open|filteredもしくは、unfilteredポートがあるホストのみを特定し(すべてのポートがFilteredのホストは出力しない)、また同状態にあるポートのみを出力。
コマンド例)
nmap 192.168.1.96/29 –open
–packet-trace
(送受信したパケットやデータを追跡する)
Nmapが送受信した全パケットを表示する。
コマンド例)
nmap 192.168.1.96/29 –packet-trace
–iflist
(インターフェースや経路の一覧を表示する)
Nmap実行ホストのインタフェースおよびルーティングテーブル表示。
コマンド例)
nmap 192.168.1.96/29 –iflist
–append-output
(出力ファイルは上書きせず追加する)
「-oX」や「-oN」などでスキャン結果をファイルに出力する際、指定したファイル名が既に存在する場合には、既存のファイルに結果を追記する。
(デフォルトでは結果を上書きする。)
コマンド例)
nmap 192.168.1.96/29 -oN test –append-output
–resume <filename>
(中断したスキャンを再開する)
Nmapのスキャンは、ctrl+Cを押すことによってキャンセルできる。
通常出力「-oN」もしくはgrep可能出力「-oG」のログが存在すれば、本オプションで中断されたスキャンを再開することができる。
引数として、通常もしくはgrep可能出力ファイルをとる。
(検証では”Unable to parse supposed log file test7.  Sorry”のメッセージが表示され再開できず。)
コマンド例)
nmap 192.168.1.96/29 -v -sV -oN test
nmap –resume test
–stylesheet <path or URL>
(XML出力変換のXSLスタイルシートを設定する)
XML形式のファイル出力に際し、カスタムのスタイルシートを使用する場合に使用。引数はフルパス名かURLで指定する。
コマンド例)
nmap 192.168.1.96/29 -oX test –stylesheet http://www.insecure.org/nmap/data/nmap.xsl
–webxml
(Nmap.OrgよりXSLスタイルシートを読み込む)
XML形式のファイル出力に際し、以下のスタイルシートを指定する場合に使用するオプション。
https://nmap.org/svn/docs/nmap.xsl
コマンド例)
nmap 192.168.1.96/29 -oX test –webxml
–no-stylesheet
(XSLスタイルシート宣言をXMLから除外する)
XML形式のファイル出力に際し、XSLスタイルシートを関連付けないようにする。
コマンド例)
nmap 192.168.1.96/29 -oX test –no-stylesheet

 

■その他オプション

コマンド コマンドの説明


コマンド例

-6
(IPv6スキャンを有効にする)
IPv6スキャンを有効にする。IPv6で使用するためには、スキャンのソースとターゲットの両方をIPv6対応に設定する必要がある。なお、ホストの発見(TCPのみ)、connect()スキャン、バージョン検出はIPv6に対応している。
コマンド例)
nmap 2001:0db8:1234:5678:90ab:cdef:0000:0000 -6
-A
(アグレッシブ・スキャンオプション)
このオプションを指定すると、OS検出「-O」とバージョンスキャン「-sV」を実行できる。タイミングオプション(例えば-T4)や冗長オプション「-v」との併用不可。
ホスト名やworkgroupの検出も行う。
コマンド例)
nmap 192.168.1.96/29 -A
–datadir <directoryname>
(Nmapの特別データファイルの位置を指定する)
Nmap実行時に使用する”nmap-service-probes、nmap-services、nmap-protocols、nmap-rpc、nmap-mac-prefixes、nmap-os-fingerprints”のファイル位置を指定する。Nmapは同ファイル群を以下の順序で探す。
1. 「–datadir」オプションで指定したディレクトリ内
2. [NMAPDIR]環境変数で指定したディレクトリ内
3. 実在する有効なUID(POSIXシステムの場合)やNmapの実行ファイル(Win32の場合)が格納されているディレクトリの~/.nmap
4. 組み込みディレクトリの/usr/local/share/nmap や/usr/share/nmap
5. Nmapのカレントディレクトリ
コマンド例)
nmap 192.168.1.96/29 –datadir /root
–send-eth
(raw(生の)イーサネット層で送信する)
フレームの送信をraw Ethernetソケットを介して行う。(イーサネットフレームヘッダがカスタマイズ可)
コマンド例)
nmap 192.168.1.96/29 –send-eth
–send-ip
(raw IPレベルで送信する)
パケットの送信をraw IPソケットを介して行う。(IPヘッダががカスタマイズ可)
コマンド例)
nmap 192.168.1.96/29 –send-eth
–privileged※2
(ユーザが十分な権限を持つことを想定する)
Nmap実行ユーザがルート権限を与えられていると仮定して実行。
コマンド例)
nmap 192.168.1.96/29 –privileged
–unprivileged※2
(ユーザが十分な権限を持っていないことを想定する)
Nmapを権限のないユーザとして実行する。
ポートスキャンはデフォルトで「-sT」になる。
コマンド例)
nmap 192.168.1.96/29 –unprivileged
-V
–version
(バージョン番号を表示する)
Nmapのバージョン番号を表示。
コマンド例)
nmap -V
-h
–help
(ヘルプのサマリーページを表示する)
各コマンドについてのヘルプ画面を表示する。Nmapを引数なしで実行してもヘルプ画面を表示する。
コマンド例)
nmap -h

以上です。

reported by ntsuji, kuno

Category: tool | Nmapを検証してみました【ヘルプ編】 はコメントを受け付けていません。