EN JA
PF.OS(5)
PF.OS(5) FreeBSD File Formats Manual PF.OS(5)

名称

pf.osオペレーティングシステムの指紋ファイルの形式

解説

pf(4) ファイアウォールと tcpdump(1) プログラムは、ともに IPv4 TCP 接続に由来するホストのオペレーティングシステムを指紋採取 (識別?) することができます。ファイルは、9 つのコロン (‘ :’) で分離されたフィールドを含んでいる、指紋毎に 1 つの、改行で分離されたレコードから構成されます。これらのフィールド次の通りです:

window
TCP ウィンドウサイズ。
TTL
IP 有効期限。
df
IPv4 の存在は、ビットを断片化しません。
packet size
初期の TCP パケットのサイズ。
TCP options
TCP オプションの順序付けられたリスト。
class
オペレーティングシステムのクラス。
version
オペレーティングシステムのバージョン。
subtype
オペレーティングシステムのパッチレベルのサブタイプ。
description
オペレーティングシステム、バージョンとサブタイプの全般的なテキスト形式の記述。

window フィールドは、TCP ヘッダの th->th_win フィールドに対応している、ソースホストの通知 TCP ウィンドウサイズです。それは、(0 と 65,535 を含んで) 0 から 65,535 の間です。ウィンドウサイズは、パーセント記号‘%’でサイズを先頭に追加することによって定数の倍数を与えることができ、値は、係数として使用されます。 3 つの特別な値がウィンドウサイズに使用されます:

*
アスタリスクは、どんなウィンドウサイズにも一致するワイルドカードの値です。
S
最大のセグメントサイズ (MSS) の倍数であるあらゆるウィンドウサイズを許可します。
T
最大のトランスミッション単位 (MTU) の倍数であるあらゆるウィンドウサイズをを許可します。

ttl 値は、IP ヘッダ中の最初の有効期限です。指紋コードは、ネットワークを横断するとき、パケットの TTL の揮発性の主な原因となります。

df ビットは、IPv4 ヘッダの断片化しない (Don't Fragment) ビットに対応しえいます。それは、パケットを断片化しないように中間のルータを伝え、経路 MTU 検索に使用されます。それは、0 か 1 のどちらかです。

packet size (パケットサイズ) は、全部の IP パケットの文字通りのサイズであり、IP と TCP オプションのすべてに依存します。

TCP options フィールドは、SYN パケットに現れる個々の TCP オプションの順序付けられたリストです。各オプションは、コンマによって分離された単一の文字によって説明され、特定のオプションは、値を含みます。オプションは、次の通りです:

Mnnn
最大のセグメントサイズ (MSS) オプション。値は、‘%’係数を含めるか、または‘*’値ですべての MSS に一致するネットワークリンクの最大のパケットサイズです。
N
NOP オプション (ノーオペレーション)。
T[0]
タイムスタンプオプション。特定のオペレーティングシステムは、常に 0 のタイムスタンプから始まります、その場合、0 の値がオプションに追加されます。そうでなければ、値は、全く追加されません。
S
選択的確認 OK (Selective ACKnowledgement OK (SACKOK)) オプション。
Wnnn
ウィンドウのスケーリングオプション。値は、‘%’係数を含めるか、または‘*’値ですべてのウィンドウスケーリングに一致するウィンドウスケーリングのサイズです。

指紋の TCP オプションは、単一のドット‘.’で与えられます。

OpenBSD の TCP オプションの例は、次の通りです:

M*,N,N,S,N,W0,N,N,T

最初のオプション M* は、MSS オプションであり、すべての値に適合します。 2 番目と 3 番目のオプション N は、2 つの NOP に適合します。 4 番目のオプション S は、SACKOK オプションに適合します。 5 番目の N は、別の NOP に適合します。 6 番目の W0 は、0 スケーリングサイズでウィンドウスケーリングオプションに適合します。 7 番目と 8 番目の N オプションは、2 つの NOP に適合します。そして、9 番目と最終的なオプション T は、任意の時間の値でタイムスタンプオプションに適合します。

指紋の TCP オプションは、同じ順序で全く同じ TCP オプションにのみパケットに適合します。

class フィールドは、オペレーティングシステムのクラス、分野またはベンダです。

version は、オペレーティングシステムのバージョンです。それは、同じクラスですが異なったバージョンのオペレーティングシステムの異なった指紋を区別するために使用されます。

subtype は、オペレーティングシステムバージョンのサブタイプかパッチレベルです。それは、同じクラスで同じバージョンですが、わずかに異なったパッチか微調整のオペレーティングシステムの異なった指紋を区別するために使用されます。

description は、オペレーティングシステム、バージョン、パッチレベル、とこれ以上の役に立つ詳細の一般的な記述です。

使用例

明白な OpenBSD 3.3 ホストの指紋は、次の通りです:

  16384:64:1:64:M*,N,N,S,N,W0,N,N,T:OpenBSD:3.3::OpenBSD 3.3

df 規則がないファイアウォールを無効にする PF の後ろの OpenBSD 3.3 ホストの指紋は、次の通りでしょう:

  16384:64:0:64:M*,N,N,S,N,W0,N,N,T:OpenBSD:3.3:!df:OpenBSD 3.3 scrub no-df

絶対に役に立たない組み込みオペレーティングシステム指紋は、次の通りかもしれません:

  65535:255:0:40:.:DUMMY:1.1:p3:Dummy embedded OS v1.1p3

tcpdump(1) の出力は、

  # tcpdump -s128 -c1 -nv 'tcp[13] == 2' 
  03:13:48.118526 10.0.0.1.3377 > 10.0.0.2.80: S [tcp sum ok] \ 
      534596083:534596083(0) win 57344 <mss 1460> (DF) [tos 0x10] \ 
      (ttl 64, id 11315, len 44)

次の指紋にほとんど変換します。

  57344:64:1:44:M1460: exampleOS:1.0::exampleOS 1.0
May 31, 2007 FreeBSD