タイニーフラグメント攻撃
インターネットとの境界のパケットフィルタは,外部からの TCP の接続要求を禁止するために,外部から受信した IP データグラムのうちフラグメントオフセットが 0 のものについて TCP ヘッダを検査し,SYN=1 かつ ACK=0 であれば破棄する。TCP のフラグのフィールドを含まないフラグメントと,フラグメントオフセットが 0 以外のフラグメントは,検査せずに通過させる。攻撃者が,SYN=1,ACK=0 の TCP セグメントを運ぶ IP データグラムを,最初のフラグメントのデータ部が 8 オクテットとなるように分割して内部のホストに送信した。このときの動作として,適切なものはどれか。
- ア最初のフラグメントには送信元と宛先のポート番号及びシーケンス番号だけが入り,フラグは 2 番目のフラグメントに入るので,両方が通過し,内部のホストで再構成されて接続要求として処理される。
- イ最初のフラグメントのデータ部が 8 オクテットでは宛先ポート番号も含まれないので,フィルタは宛先ポート番号による通過の判定もできなくなる。
- ウ最初のフラグメントは後続のフラグメントがあることを示すために DF ビットが 1 に設定されるので,経路上のルータで破棄され,内部のホストには届かない。
- エSYN=1 の情報は 2 番目のフラグメントに含まれるので,フィルタは 2 番目のフラグメントを検査して破棄し,内部のホストでは再構成できずに接続要求は失敗する。
正解と解説を見る
正解 ア
この問題の基礎知識
- IP のフラグメント化では,各フラグメントに元のデータグラム内の位置を示すフラグメントオフセット(8 オクテット単位)と,後続のフラグメントがあることを示す MF ビットが設定され,再構成は宛先ホストで行われる。
- TCP ヘッダは,送信元ポート番号(2 オクテット),宛先ポート番号(2 オクテット),シーケンス番号(4 オクテット),確認応答番号(4 オクテット)の順に並び,その後にデータオフセットと SYN や ACK などの制御フラグが続く。
- フラグメントを再構成せずに 1 つずつ検査するパケットフィルタでは,TCP ヘッダが複数のフラグメントにまたがると,後続のフラグメントにあるフィールドを検査できないことがある。これを悪用するのがタイニーフラグメント攻撃である。
- DF ビットはデータグラムの分割を禁止するビットであり,後続のフラグメントの有無を示す MF ビットとは役割が異なる。
TCP ヘッダの先頭 8 オクテットはポート番号(各 2 オクテット)とシーケンス番号(4 オクテット)であり,フラグは 14 オクテット目にあるので 2 番目のフラグメントに入る。IP の再構成は宛先ホストで行われるので,フィルタを通過した断片から SYN セグメントが復元される(RFC 1858)。
宛先ポート番号は TCP ヘッダの 3〜4 オクテット目にあり,データ部が 8 オクテットの最初のフラグメントに含まれる。2 番目のフラグメントに追い出されるのは,9 オクテット目以降の確認応答番号やフラグである。
後続のフラグメントがあることを示すのは MF(More Fragments)ビットである。DF(Don't Fragment)ビットはデータグラムの分割を禁止するもので,フラグメントに設定する必要はない。攻撃者は MF ビットを 1 にしたフラグメントを作成して送信する。
このフィルタは,フラグメントオフセットが 0 以外のフラグメントを検査せずに通過させるので,2 番目のフラグメントもそのまま内部に届く。対策としては,短すぎる最初のフラグメントや,オフセットが 1 の TCP のフラグメントを破棄する方法がある(RFC 1858)。
照合の根拠(6 件)
- ア(正解): データ部 8 オクテットの最初のフラグメントにはポート番号が入り,フラグは 2 番目のフラグメントに追い出される。イ(誤り): 宛先ポート番号は最初のフラグメントに含まれる
In this example, the first fragment contains only eight octets of data (the minimum fragment size). In the case of TCP, this is sufficient to contain the source and destination port numbers, but it will force the TCP flags field into the second fragment.
RFC 1858 · Section 3.1(新しいタブで開きます) - ア(正解)・エ(誤り): SYN=1,ACK=0 を破棄するフィルタは最初のフラグメントでフラグを検査できず,後続のフラグメントは検査しないので通過させる
Filters that attempt to drop connection requests (TCP datagrams having SYN=1 and ACK=0) will be unable to test these flags in the first octet, and will typically ignore them in subsequent fragments.
RFC 1858 · Section 3.1(新しいタブで開きます) - ア(正解): 再構成は宛先ホストで行われるので,通過した断片から SYN セグメントが復元される
The basic internet service is datagram oriented and provides for the fragmentation of datagrams at gateways, with reassembly taking place at the destination internet protocol module in the destination host.
RFC 791 · Section 3.2(新しいタブで開きます) - ウ(誤り): 後続のフラグメントがあることを示すのは MF ビットである
The More Fragments flag bit (MF) is set if the datagram is not the last fragment.
RFC 791 · Section 3.2(新しいタブで開きます) - ウ(誤り): DF ビットは分割を禁止するもので,後続の有無を示すものではない
If the Don't Fragment flag (DF) bit is set, then internet fragmentation of this datagram is NOT permitted, although it may be discarded.
RFC 791 · Section 3.2(新しいタブで開きます) - エ(誤り): 対策としてオフセット 1 のフラグメントを破棄する方法がある(問題のフィルタはこれをしていない)
If a packet with FO==1 is seen, conversely, it could indicate the presence, in the fragment set, of a zero-offset fragment with a transport header length of eight octets Discarding this one-offset fragment will block reassembly at the receiving host and be as effective as the direct method described above.
RFC 1858 · Section 3.2.2(新しいタブで開きます)
RFC 9293 Section 3.1 の TCP ヘッダ形式では,Source Port(2 オクテット)・Destination Port(2)・Sequence Number(4)が先頭 8 オクテット,続いて Acknowledgment Number(4),Data Offset と Rsrvd(各 4 ビット,13 オクテット目),制御ビット(14 オクテット目)の順なので,フラグは 2 番目のフラグメントに入る。