OS 検出

Nmapの最も有名な機能の1つは、TCP/IPスタック・フィンガープリンティングを用いた、リモートからのOS検出機能である。Nmapは、一連のTCPやUDPのパケットをリモートホストに送り、その応答をほぼ全面的に調査する。TCP ISN(イニシャルシーケンス番号)サンプリング、TCPオプションのサポートや順序の調査、IPIDサンプリング、TCP初期ウィンドウサイズ調査などの数多くのテストを実施した後、Nmapはこれらの結果を、既知のOSフィンガープリントが1500件以上データベース化されたnmap-os-fingerprintsと照合し、一致するものがあった場合はそのOSに関する詳細情報を出力する。各フィンガープリントには、フリーテキスト形式のOSの解説、ベンダ名を与える分類(例:Sun)、下位のOS(例:Solaris)、OSの世代(例:10)、デバイスの種類(汎用、ルータ、スイッチ、ゲーム機など)が含まれる。

条件(例えば少なくともopenポート1つとclosedポート1つの存在がわかっているなど)は整っているが、NmapがターゲットマシンのOSを推測できない場合は、フィンガープリント投稿用URLがNmapから提供される。対象のマシンで動作しているOSが何か(確実に)わかっている場合は、当該のフィンガープリントをこのURLを使って投稿できる。こうした投稿が行われることで、Nmapが認識できるOSのデータベースに新たなデータが蓄積され、あらゆるユーザがさらに精度の高い調査を行えるようになる。

OS検出を行うことで、そのプロセスのなかで収集される情報を利用した別のテストをいくつか行うこともできる。例えば、アップタイムの測定がその1つで、TCPのタイムスタンプオプション(RFC 1323)を用いて、マシンが最後に再起動されたのはいつかを推定する。これは、その情報を返したマシンに関してのみ報告される。もう一つのテストは、TCPシーケンス番号の予測可能性の分類である。これにより、リモートホストに対して偽造したTCP接続を確立するのがどの程度困難であるかがおおよそ判定できる。これは、発信元IPベースの信頼関係(rlogin、ファイアウォール、フィルタなど)の弱点を悪用したり、攻撃の出所を隠蔽したりする場合に役立つ。この種のスプーフィングはもはやめったに行われないが、これに対して脆弱なマシンがいまだに数多くある。難易度を表す実際の数値は、統計的なサンプリングに基づいているために上下する可能性がある。通常はworthy challenge(価値ある挑戦)trivial joke(つまらないジョーク)などの言葉の表現による分類を利用する方がよい。これは、冗長(-v)モードの標準出力にのみレポートされる。-Oオプションとともに冗長モードが有効になっている場合、IPIDシーケンス番号の生成に関する情報もレポートされる。ほとんどのマシンは、インクリメンタル(incremental)に分類される。これは、送信するパケットごとに、IPヘッダのIDフィールドの値を1ずつ増加させることを意味する。この仕組みのせいで、これらのマシンは高度な情報収集攻撃やスプーフィング攻撃に対して脆弱になっている。

OS検出のメカニズム、使用法、カスタマイズ方法について述べた論文は、以下で入手できる(十数ヶ国語の翻訳版あり): https://nmap.org/osdetect/

OS検出は、以下のオプションで実行および制御できる:

-O (OS検出を実行)

上で述べたOS検出を実行する。また別な方法として-Aオプションを使うと、OS検出とバージョン検出の両方を実行できる。

--osscan-limit (OS検出を有望なターゲットに絞る)

少なくとも1つのopenおよびclosedのTCPポートが見つかれば、OS検出の効率はかなり上がる。このオプションを設定すると、Nmapは上の基準に満たないホストにはOS検出を試行しないようになる。これにより、かなりの時間が節約できる。多くのホストに対して-Pnスキャンを行う場合は特にそうである。-O あるいは -Aで、OS検出の実行をいつ要求するかだけが重要になる。

--osscan-guess; --fuzzy (OS検出の結果を推測)

Nmapが完全に一致するOSを検出できない場合、それに近似するものを候補として挙げる場合がある。Nmapがこれをデフォルトで行うためには、近似はかなり近いものでなければならない。上のどちらか(同等)のオプションを指定すると、Nmapはより大まかな近似をアグレッシブに行うようになる。