フォティーンフォティ技術研究所
取締役技術担当
金居 良治

 fingerprintが得られたら,nmapの持っているデータベースと比較して,内容が一致するものを表示する。完全に一致するOSが見付からない場合には,--osscan-guessオプションでOSを推測することができる。

 OSの推測では,fingerprintとデータベースにあるOS情報の一致率を求め,その一致率の最も高かったものを表示する。例えば,SEQのSPテストが一致している場合には,25ポイントが加算される。一致していなければ加算されない。このように一致したテストのポイントのみ計算し,全ポイントに対する割合を求めることで一致率を計算する。

 ただしテストには重要なものとそうでないものがあるため,各テストにはウエイト値が割り当ててあり,重要なテストほど結果に大きく影響するようになっている。これにより,比較的高い精度でOSを推測できるようになっている。具体的なウエイト値は/usr/share/nmap/nmap-os-dbもしくは/usr/local/share/nmap/nmap-os-dbファイルのMatchPointsという行の直後に見ることができる。筆者が持っているnmap-os-dbのMatchPointsを見ると,SEQではTI,II,TS といったテストに高いポイントが割り当てられていて,これらのテストの重要性が分かる(図1)。

図1●nmap-os-dbのMatchPointsの例
図1●nmap-os-dbのMatchPointsの例
[画像のクリックで拡大表示]

 個人的には一致率が95%以上なら,そのOS だと思っていいのではないかと思っている。5%の欠落は何なのかというと,やはりデータベースの情報不足から来るものが多いというのが筆者の感想である。100%一致しないようなターゲットOSを発見したら,ぜひそのOS fingerprint情報をnmapチームに送信してほしい。

 どのテストが一致していて,どのテストが不一致だったのかを簡単に見分けられるように,筆者は以前,画面を色分けするスクリプトを作成しました。OS検出を実装している方向けのデバッグ・ツールである。一致したテストを青,一致しなかったテストを赤,実行されずにスキップされたテストを黄色として表示する。参考にしていただければと思う。

■nmap osfp script サンプル出力
http://www.r89.org/nmap_sample1.html

■nmap osfp script
http://www.r89.org/nmapfp_match.pl

nmapの方向性を変えた「nmapスクリプト・エンジン」

 最後に,次期バージョンに搭載予定の機能を紹介しよう。nmapの方向性を決定的に変えたnmapスクリプト・エンジン,通称NSEだ。

 NSEとはズバリ,nessusと同じ方向性を持つぜい弱性検査の機能である。nessusはネットワークぜい弱性スキャナで,リモート・マシンのぜい弱性をスキャンすることができる。つまり,NSEでも同様のことが可能になる。例えばプロキシ・サーバーやWebサーバーがオープン・プロキシとして設定されていないか,DNSサーバーでゾーン転送が可能になってるかどうか,といったことをチェックできるようになる。これらはぜい弱性というより設定ミスだが,次期バージョンのnmapでは,こういったよりアプリケーション寄りのテストが可能になる。

 現状では非常に基本的な機能しか実装されていないが,開発は非常にアクティブに行われている。ベータ版である4.22SOC6でwww.fourteenforty.jpをスキャンした結果を示す(図2)。

図2●NSEでぜい弱性を検索した様子
図2●NSEでぜい弱性を検索した様子

 図2から,ポート・スキャン以外にもいくつか情報が追加して表示されているのが分かるだろう。SSLv2が使用可能になっていると警告を出したり,何かWebページに対するチェックも動作しているようです。他にも前述したゾーン転送のチェックなど,いくつかのチェック機能が既に実装されている。

 NSEの実装は,スクリプト言語のバックエンドとチェック・スクリプトの集合体である。チェック・スクリプトを書く時にはNSEスクリプトの言語仕様を勉強して,その約束に則ってスクリプトを記述する。このNSEスクリプト言語はLUAという言語がベースになっており,perlやpythonを知っているユーザーなら容易に学習できるかもしれない。