finger

Know Your Enemy:

Passive Fingerprinting

Identifying remote hosts, without them knowing

Honeynet Project

http://project.honeynet.org

Last Modified: 04 March, 2002

Translated by KOIZUMI Kanba

ネットワークセキュリティの挑戦の一つとして,悪いやつらを学ぶことがある.彼らに対するより良い防護やあなたの脅威を理解するために,あなたはあなたの敵を知らなければならない Know Your Enemy. Passive Fingerprinting (受動的指紋採取法) は敵に知られることなく,敵に関してさらに知る方法である.特に,スニファーによる追跡をすることなくリモートホストの OS やその他の特性を判定することができる.100% 正確ではないけれど,驚くべき良い結果得られる.siphonはサブレテインクリュー (subterrain crew) プロジェクトにより開発され,受動的にネットワークやシステムをマッピングしたり,OS の指紋採取をするツールだ.Michael Zalewski (有能なポーランド人) と Bill Stearns は p0f のメンテナンスをしている.これらの両方のツールは我々が議論する機能を実証する.

Fingerprinting

伝統的に,オペレーティングシステムの指紋採取は nmap や queso などの積極的なツールにより行なわれてきた.これらのツールは全てのオペレーティングシステムの IP スタックは特異性があるという原則により遂行される.特に,個々のオペレーティングシステムは多様に成型されたパケットへの返答が異る.必要なことはパケットへの異るオペレーティングシステムごとの異る返答のデータベースを造ることだ.その後,リモートホストのオペレーティングシステムを判定するために,整形された多様なパケットを送信し,どのように返答するかを見極めてデータベースと照らし会わせる.Fyodor のnmapはこの方法を使用するツールだ.彼はまたこの詳細を論文に書いている.

受動的指紋採取法はいくつかのコンセプトに従うが,異る実装がある.受動的指紋採取法はリモートシステムからのスニッファによる手がかりに基づく.リモートホストに積極的に要求を出すのではなく,あなたが必要なことはリモートホストから送信されるパケットを捕獲することだ.これらのパケットのスニッファによる手がかりを基に,リモートホストのオペレーティングシステムの判定ができる.積極的指紋採取法に似て,受動的指紋採取法はすべてのオペレーティングシステムの IP スタックには独自の特異性があるという原則に基づいている.スニッファによる足跡を解析したり,違いを識別することで,リモートホストのオペレーティングシステムを判定することができるだろう.

The Signatures

オペレーティングシステムを判定するのに4つの TCP エリアを見る(他のシグネチャを使う場合もある).このシグネチャは:

  • TTL - オペレーティングシステムが出力パケットに設定するTime To Live.
  • Window Size - オペレーティングシステムが設定するウインドウサイズ.
  • DF - オペレーティングシステムがDon't Fragmenet bitを設定しているか.
  • TOS -オペレーティングシステムがType of Serviceを設定しているか,もしそうならどのように.

パケットのこれらの要素を解析することで,リモートオペレーティングシステムを判定することができるだろう.このシステムは 100% 正確というわけではない,そして,あるオペレーティングシステムでは他よりうまくいく.一つのシグネチャによる判定は信頼できない.しかし,いくつかのシグネチャを見て,情報を結合することでリモートホスト識別の正確さが増す.簡単な例で説明する.以下は送信パケットのスニッファ結果だ.このシステムは我々に対してエクスプロイトを行なって来た,だから彼らについてさらに学びたいのだ.我々の正体がばれるから,nmap や finger はしたくない.むしろ,我々は受動的に学習したい.このシグネチャは受動的な武器であるsnortにより捕獲されたものだ.

04/20-21:41:48.129662 129.142.224.3:659 -> 172.16.1.107:604

TCP TTL:45 TOS:0x0 ID:56257

***F**A* Seq: 0x9DD90553

Ack: 0xE3C65D7 Win: 0x7D78

この4つの基準から,以下を識別する.

  • TTL: 45
  • Windows Size:0x7D78 (または 10進 で 32120)
  • DF:Don't Fragmetn bit が設定されている
  • TOS: 0x0

では,この情報をシグネチャのデータベースと比較してみよう.始めに,リモートホストで使われていた TTL を見る.スニッファ結果から TLL は 45 だと解る.もっともありそうなのは TTL が 64 にセットされて,我々まで 19 ホップで届いたということだ.この TTL に基づきこのパケットは Linux か FreeBSD から送信されたと解る (しかし,さらなるシグネチャがデータベースに追加される必要はある).この TTL はリモートホストへ traceroute することで確かめられる.もしあなたの traceroute を検知されることが心配なら,traceroute の time-to-live を設定することができ (デフォルトは30),リモートホストから 1 つか 2 つ少くできる (-m オプション).これは,実際にリモートホストに触らずに,あなたにパス情報を与えてくれる (プロバイダなど).TTL の更なる情報は Research Paper on Default TTL values をチェックしよう.

次のステップは,ウインドウサイズを比較することだ.ウインドウサイズは他の効果的なツールにより,どのウインドウサイズが使われ,またどれぐらいしばしば サイズが変更されるかを見つけることができる.上記のシグネチャでは,0x7D78 に設定されていることが解る.Linux, FreeBSD, Solarisではデフォルトのウインドウ サイズがセッションを通じて維持される傾向がある.しかし,シスコルーター (少くとも私の 2514) とマイクロソフト Windows/NT のウインドウサイズは連続的に 変更する.ウインドウサイズは初期の 3 ウエイハンドシェークの後で計測するならより正確である (TCPの スロースタートによる).ウインドウサイズの更なる情報は Stevens, "TCP/IP Illustrated, Volume 1 chapter 20" を見よう.

多くのシステムでは DF ビットを設定しているので,これは制限された価値がある.しかし,DF フラグを使用しない少数のシステムの識別を容易にする (SCO や OpenBSD). さらなるテストのあと,TOS はさらに制限された価値であると感じるだろう.これはオペレーティングシステムをさらにセッションベースに見て判定する.他の言葉では,TOS で判定できるオペレーティングシステムは多くないが,プロトコルが使われている.TOS はさらにいくつかのテストが要求される.だから,上記の情報では,TTL とウインドウサイズによりシグネチャのデータベースと結果を比較して,OS の信頼の度合いから判定できる (このばあいでは,linux カーネル2.2.x).

憶えておいてもらいたいのは,積極的指紋採取法のように,受動的指紋採取法ではいくつかの制限があるということだ.始めに,独自のパケットを生成するアプリケーション (nmap, hunt, nemesis) ではオペレーティングシステムと同じシグネチャは使わないことである.第二は,リモートホストが TTL,ウインドウサイズ,DF,TOS を修正するのは比較的容易であることだ.例えば,TTL は以下で変更する.

Solaris: ndd -set /dev/ip ip_def_ttl 'number'

Linux: echo 'number' > /proc/sys/net/ipv4/ip_default_ttl

NT: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

しかしながら,たくさんの異るパケットやシグネチャを結合させることで,この場合は TTL とウインドウサイズ,リモートホストの信頼できる近似ができる.

Other Signatures and Uses

今までに議論した 4 つのシグネチャに制限される分けではない.他のエリアにより追跡することができる,例えば初期シークエンスナンバー,IP 識別ナンバー,TCP や IP オプションだ.例えばシスコル-タ-は IP 識別ナンバーはランダムではなく,0 から始まる傾向がある.TCP オプションでは,選択 ack SackOKは windows や linux で使われるが,FreeBSD や Solaris では使われない.最大セグメントサイズ (MSS) では,多くのオペレーティングシステムは 1460 を使う,しかし,Novel は 1368 を使い,いくつかの FreeBSD の変種は 512 を使う.

また,ICMP パケットも利用できる.ハニーネットのメンバーである Ofi Arkin は ICMP を用いた拡張をし, ICMP Usage in Scanning という論文にしている.例えば,Microsoft の ICMP REQUEST ペイロードはアルファベットを含み,Linux や Solaris などのおおくの UNIX は数字やシンボルが使われる.

受動的指紋採取法は他の目的でも使われる.悪い男に 'ステルス' フィンガープリンティングに使われる.例えば,犠牲者であるの可能性のあるオペレーティングシステムを判定するためである.ウエブサーバでは,サーバからウエブぺ-ジにリクエストをして,その後スニッファデータを解析するだけでよい.これは IDS などに検知される積極的なツールの使用の必要性をバイパスする.また,受動的指紋採取法はリモートプロクシファイアウォールの識別にも使われる.プロクシファイアウォールはクライアントの接続を再構築するので,いままでに議論した方法でプロクシファイアウォールを識別することは可能だ.組織は受動的指紋採取法をネットワークの悪戯なシステムの識別にも使える.これらはネットワークに繋ぐことを許可されていないシステムだ.例えば,microsoft や Sun は Linux や FreeBSD を直ちにとめることができる,これらはなぜか表われた奇妙なシステムだ.受動的指紋採取法は,ネットワークパフォ-マンスに影響を与えることなく速やかに一覧できる.多くの組織が自分達のネットワークに接続しているシステムを知らないことに驚くだろう.個人のセキュリティ監査から受動的指紋採取法はまた,重要なシステムを識別する (Unisys メインフレームなど).この方法はまた組織の無許可のシステムや OS を判定し,Blackhat 活動の可能性を指摘する.

このプロジェクトは受動的指紋採取法のコンセプトの検証をする test databaseを開発している.このデータベースは Telnet, FTP,HTTP, SSH プロトコルを用いて様々なテストをされている.このデータベースはもはや開発されてなく,検証目的のみで提供されている.もし,受動的指紋識別法の開発に貢献したいなら,これまで議論した積極的に維持する解決法を推薦する.

Conclusion

受動的指紋採取法はあなたに,敵に気づかれること無く,敵に関する学習をする能力を与えてくれる.単一の情報ではオペレーティングシステムの識別は難しいが,いくつかのシグネチャを結合することでリモートシステムの近似ができる.以下の人びとにアイデアや助言を下さったことに大きな感謝をする.

Craig Smith

Peter Grundl

Subterrain Siphon Project