あるホストから送信されるTCPパケットを解析すると,そのホストが使用しているOSを特定することができる。これを「passive fingerprinting」(受動的な OS 特定手法)と呼ぶ。この passive fingerprinting は,IDS(侵入検知システム)などと組み合わせることで,セキュリティの向上に役立つ。例えば,攻撃パケットを検知した際,送信元の OS 情報まで取得することで,攻撃者に関するより多くの情報を収集できる。そこで今回のコラムでは,passive fingerprinting と,それを実現するツール「p.0.f」を紹介する。

「能動的」と「受動的」の違い

 ホストのOS種類を特定する手段として,まず思い浮かぶのが,「nmap」や,以前筆者がコラムで取り上げた「X」などのツールを使用することである。これらは,対象ホストに向けていくつかのパケットを送信し,それに対する応答パケットを材料として OS を特定するので,「active fingerprinting」(能動的な OS 特定手法)と呼ばれる。

 それに対して,passive fingerprinting では,対象ホストに対してのアクションは何も起こさない。その代わりに,対象ホストがネットワーク上に流すパケットを“盗聴”し,それを材料として OS を特定するのである。文字通り,「受動的」なのである。

受動的にOSを特定するツール「p.0.f」

 「p.0.f」は,Michal Zalewski 氏によって開発され,現在は William Stearns 氏によってメンテナンスされている,passive fingerprintingツールの一つである。

 今回はスペースの都合上,詳細については割愛するが,p.0.f の仕組みを簡単に説明しておこう。p.0.f では,受信した TCP パケットの,8 つのフィールドの値を収集し,あらかじめ用意されているデータベースとマッチングすることで,OS を特定する。データベースには,現時点で 141 種類のマッチング・ルールが登録されている。また,データベースに登録されていない OS などに関しては,ユーザーが独自にルールを追加できる。

 また,受信したパケットをポート番号や IP アドレスなどで解析前にフィルタリングすることが可能なため,効率的な fingerprinting が可能となる。このときのフィルタリング・ルールは,有名なパケット解析ツールのひとつである「tcpdump」と同じ形式なので,tcpdumpのフィルタリング・ルールをそのまま利用できる。

 では,p.0.f の簡単な実行例を見てみよう。以下は,TCPポート80番にアクセスしてきたホストに限定して,OS fingerprinting を実施している。

# ./p0f -t -v 'port 80'
p0f: passive os fingerprinting utility, version 1.8
(C) Michal Zalewski , William Stearns 
p0f: file: '/etc/p0f.fp', 139 fprints, iface: 'eth0', rule: 'port 80'.
 192.168.0.1 [1 hops]: Windows 2000 (9)
 + 192.168.0.1:4780 -> 192.168.0.2:80
 192.168.0.1 [1 hops]: Windows 2000 (9)
 + 192.168.0.1:4780 -> 192.168.0.2:80
 192.168.0.1 [1 hops]: Windows 2000 (9)
 + 192.168.0.1:4780 -> 192.168.0.2:80

 p.0.f の出力結果から,p.0.f を実行しているホスト(192.168.0.2)へWebアクセスしてきたホストのIPアドレスが「192.168.0.1」であることが分かるとともに,その OS が Windows 2000 であることが分かる。実際,これは正しい結果であった。

passive fingerprinting の利用法

 冒頭で述べたように,passive fingerprinting は IDS と組み合わせることで効果的に機能する。攻撃を検知した際,送信元の OS 情報まで取得できるのだ。さらには,その統計を取ることで,攻撃者が利用する OS の傾向を分析することも可能であろう。攻撃者の傾向を知ることは,守りをどのように固めればよいのかを考える上で非常に有用である。

 この考え方は,「ハニーポット」*1 に通じるものがある。ハニーポットを研究し,インターネット上で実際に運用している有名なグループ「The Honeynet Project」では,自分を守るためには,敵を知る必要がある(Know Your Enemy)と唱えている。そして,敵を知る方法の一つとして,passive fingerprinting を取り上げている*2

*1 ハニーポットとは,元々「はちみつ(honey)の入った甘いつぼ(pot)」という意味。ここでは,おとりとなって攻撃者を誘き寄せるために,ぜい弱性があるように振舞うホストのことを指す。攻撃者に自由に攻撃させることで,その傾向をつかみ,実際のホストの守りを固めるための情報にする。
*2 Know Your Enemy:Passive Fingerprinting

 passive fingerprinting は,技術的には目新しいものではない。「sniffing」(パケット分析)と「OS fingerprinting」(OS種類の分析)の組み合わせに過ぎない。しかし,「Know Your Enemy」の手段として,非常におもしろい発想だと思う。

 ただし,ユーザーに便利な仕組みは,悪意ある者にとっても便利であることを忘れてはならない。特定のホストを狙うような攻撃者にとっては,それほど有用ではないだろが,不特定多数を狙う,愉快犯的な攻撃者にとっては,同一 OS を効率的にリストアップする手段として有用だ。例えば,Solaris OS への攻撃法を知る攻撃者は,p.0.f で Solaris OS のホストをリストアップしておけば,“効率的”に攻撃できる。さらには,「passive」な方法なので,調べられる相手は気付かないことにも,注意する必要がある。


矢次弘志(Hiroshi Yatsugi)
株式会社ラック 不正アクセス対策事業本部
yatsugi@lac.co.jp


 IT Proセキュリティ・サイトが提供する「今週のSecurity Check [一般編]」は,その週に起きたUNIX関連およびセキュリティ全般のニュースや動向をまとめた週刊コラムです。セキュリティ・ベンダーである「株式会社ラック」のスタッフの方を執筆陣に迎え,専門家の立場から解説していただきます。