テールドロップ(テールドロップ)とは | 意味や読み方など丁寧でわかりやすい用語解説
テールドロップ(テールドロップ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
テールドロップ (テールドロップ)
英語表記
tail drop (テールドロップ)
用語解説
テールドロップとは、過去に広く知られたDoS(Denial of Service)攻撃の一種である。TCP/IPプロトコルスタックのIPフラグメンテーション機能における実装の脆弱性を悪用し、標的となるコンピュータシステムをクラッシュさせたり、フリーズさせたりすることを目的とする。具体的には、不正なIPパケットの断片(フラグメント)を送信することで、システムがそれらを再構築する際の処理を混乱させ、結果としてサービス停止状態に追い込むものだった。現代のほとんどのオペレーティングシステムやネットワーク機器ではこの脆弱性への対策が完了しており、現在では通用しない歴史的な攻撃手法となっている。
この攻撃を理解するには、まずIPフラグメンテーションの仕組みを把握する必要がある。インターネット上でデータはIPパケットと呼ばれる単位で送受信されるが、ネットワーク経路上の各リンクには、一度に送信できるパケットの最大サイズであるMTU(Maximum Transmission Unit)が存在する。もし送信しようとするIPパケットが、経路上のどこかのMTUよりも大きい場合、そのパケットはルーターによって小さな断片、すなわちフラグメントに分割される。これらのフラグメントには、元のパケットを正しく復元するために必要な情報が付与される。主な情報としては、元のパケットを識別するためのID、そしてフラグメントが元のパケットのどの位置(オフセット)から始まるかを示す情報、さらにそのフラグメントのデータ長などが含まれる。受信側のシステムは、これらの情報を使ってすべてのフラグメントを集め、正しい順序で結合し、元のIPパケットを再構築する。
テールドロップ攻撃は、このIPフラグメンテーションの仕組みの「隙間」を突いた。攻撃者は、意図的にIPフラグメントのオフセット値やデータ長を矛盾させた、不正なフラグメントを作成し、標的システムに送信する。例えば、あるフラグメントが終わり、次のフラグメントが始まるべき場所を計算すると、その次のフラグメントの開始オフセットが前のフラグメントのデータ範囲と重複したり、あるいは不整合が生じたりするように細工する。具体的には、後続のフラグメントの開始オフセットが、先行するフラグメントの終了オフセットよりも「前」に来るように設定したり、あるいは複数のフラグメントが互いに矛盾するデータ範囲を持つように設定したりする。
当時の多くのオペレーティングシステム、特にWindows 95/NT系のOSや一部の古いバージョンのLinuxカーネルなどは、このような矛盾したフラグメントを受け取った際の処理に不備があった。システムは、これらの不正なフラグメントを何とか再構築しようと試みるが、オフセットの不整合やデータ長の矛盾により、メモリ領域の管理に失敗したり、不正なメモリアドレスへのアクセスを試みたりする。その結果、システムのカーネルが予期せぬエラーに遭遇し、バッファオーバーフロー、ヌルポインタ参照、あるいは無限ループのような状況を引き起こすことがあった。これにより、システムの処理能力が著しく低下したり、最終的にはカーネルパニック、システムクラッシュ、フリーズ、あるいは突然の再起動といった深刻な障害が発生し、標的システムが提供するサービスが停止状態に陥った。これがDoS攻撃として機能したのである。
この攻撃が広く認識されると、各OSベンダーやネットワーク機器ベンダーは迅速に対応した。不正なIPフラグメントを検出して破棄するパッチやファームウェアアップデートがリリースされ、システムはフラグメントのオフセットとデータ長の整合性を厳密にチェックするようになった。現代のほとんどのOSやルーター、ファイアウォールは、テールドロップ攻撃のような矛盾したIPフラグメントを適切に検出し、破棄するか安全に処理する能力を備えているため、現在ではこの種の攻撃はほとんど成功しない。しかし、テールドロップ攻撃は、ネットワークプロトコルの実装において、想定外のデータやエッジケースに対する堅牢な処理がどれほど重要であるかを示す、重要な教訓としてITセキュリティの歴史に刻まれている。また、IPフラグメンテーション自体は正当な機能であり、現在でも利用されているが、その処理にはリソース枯渇攻撃など、異なる種類の脆弱性が存在しうるため、常に注意が必要である。