【入門編】 IPフラグメンテーションの発生条件とセキュリティリスク – ネットワーク基礎とWebセキュリティ実践ガイド

こんにちは!ネットワークの世界へようこそ。インフラエンジニアとして現場を駆け回っていると、普段は目に見えないパケットたちが、まるで意思を持っているかのようにルーターの間を駆け抜けていく姿が目に浮かぶようになります。

今回は、ネットワークの基礎でありながら、セキュリティの現場でも非常に重要なテーマである「IPフラグメンテーション(パケットの分割)」と、それに潜むセキュリティリスクについてお話しします。

「パケット? フラグメンテーション? なんか難しそう……」と思ったそこのあなた、安心してください! 一歩ずつ、身近な例えを交えながら優しく紐解いていきましょう。

—

1. 巨大な荷物を送るとき:IPフラグメンテーションの基本

私たちが普段使っているインターネットでは、データは「パケット」という小さな段ボール箱に小分けされて運ばれます。

ここで一つ、現実世界の郵便配達を想像してみてください。
郵便局(ネットワーク機器)には、一度に運べる荷物のサイズの上限(これをネットワークの世界では MTU(Maximum Transmission Unit) と呼びます)が決まっています。

もし、あなたが友人に「全巻揃いの分厚い漫画セット」を送りたいとします。でも、郵便局の規定のダンボール箱(MTU)には、どうあっても全巻が入りきりません。さあ、どうしますか?

そう、漫画を何冊かごとの束に分けて、別々のダンボール箱に詰めて送るはずです。受け取った友人は、届いた複数の箱を開けて、元の順番通りに並べて漫画を読みますよね。

ネットワークの世界でも全く同じことが起きています。
送信元のPCから送り出された巨大なIPパケットが、途中の経路で「ここから先は小さな箱しか通れませんよ」という狭い道(小さいMTU)に出くわしたとき、ルーターがそのパケットを泣く泣くパカッと分割(フラグメンテーション)するのです。

分割されたパケットには、それぞれ「これは元の大きな荷物のどこからどこまでの部分ですよ」という目印(フラグメントオフセット)が貼り付けられます。受け取り側のPCは、この目印を頼りにパケットを元の形にピタッとパズルのように組み立て直す(リアセンブルする)わけです。

—

2. 分割の裏側に潜む魔物:Teardrop攻撃の恐怖

「なるほど、大きな荷物を分けて運んで、最後に戻すんだから便利じゃない!」と思いますよね。しかし、セキュリティの歴史において、この「分割と再構築」の仕組みは、かつてエンジニアたちを震え上がらせる重大な脆弱性の温床となりました。

その代表例が「Teardrop(ティアドロップ)攻撃」という古典的かつ巧妙なサイバー攻撃です。

パズルのピースをわざと重ね合わせて混乱させる

先ほどの漫画の例を思い出してください。
もし、悪意ある差出人が、意図的に以下のような意地の悪い荷物を送ってきたらどうなるでしょうか?

  • 1箱目:「1巻から5巻までです」
  • 2箱目:「あれ、さっきの箱と被るけど…… 4巻から8巻までです」

受け取った友人は「あれっ? 4巻と5巻が被ってる! どっちを信じればいいの!?」とパニックになり、最悪の場合、荷物の整理ができなくなってしまいますよね。

OSのネットワーク処理もこれと全く同じです。
攻撃者は、パケットの断片を示す「フラグメントオフセット」の数値をワザと重複させたり、おかしな位置を指定したパケットの嵐を標的のサーバーに送りつけます。
昔のOS(Windows 95やNTなど)のTCP/IPスタックには、この重複したパケットを受け取ったときの「上手な逃げ道」が用意されていませんでした。結果として、サーバーはメモリの処理で大混乱に陥り、システムがフリーズしたり、最悪の場合はブルースクリーン(強制終了)になってダウンしてしまったのです。これがTeardrop攻撃のメカニズムです。

—

3. 現代の守り手:IDS/IPSによる再構築検査の重要性

「うわぁ、そんな古い攻撃の話をされても、今のモダンなOSなら大丈夫なんでしょ?」と思ったあなた、鋭いですね! 確かに現在の最新OSは、こうした重複パケットに対して堅牢に作られています。

しかし、セキュリティの現場はそんなに甘くありません。
現代のネットワークには、ファイアウォールやIDS(侵入検知システム) / IPS(侵入防止システム)といったセキュリティ製品が配置されています。

ここで、厄介な問題が立ち塞がります。
もし攻撃者が、悪意ある攻撃コード(例えば、サーバーを乗っとるための怪しいプログラム)を、わざと細かくバラバラに分割して送りつけてきたらどうでしょう?

  • 1個目のパケット:攻撃コードの「あ」
  • 2個目のパケット:攻撃コードの「い」
  • 3個目のパケット:攻撃コードの「う」

もし、IDSがパケットを1個ずつバラバラのままスキャンしていたら、「ふむふむ、ただの『あ』『い』『う』ですね。安全です!」とスルーしてしまうかもしれません。しかし、これらが受信側で合体した瞬間に、凶悪な牙をむくわけです。これを「フラグメント・オーバーラッピング(断片の重複)」を利用した検知回避と呼びます。

賢い番犬たちの仕事

だからこそ、現代の優秀なIDS/IPSや次世代ファイアウォール(NGFW)は、単に流れてくるパケットを眺めているだけでなく、ルーターと同じように一度頭の中でパケットを再構築(リアセンブル)してから、ウイルスや不正なパターンが含まれていないかを検査する機能を持っています。

ネットワークの境界で「怪しいパケットの破片が届いたぞ、ちょっと待て、組み立てて中身を確認しよう!」と踏み止まるこのひと手間こそが、企業ネットワークを守る要なのです。

—

4. 実務で役立つ設定と確認のヒント

インフラエンジニアとして現場に立つと、このフラグメンテーションやMTUの不一致に起因する「通信が途中でプツッと途切れる(いわゆるブラックホールルーター問題)」に遭遇することがあります。

例えば、Linuxサーバー上でパケットの挙動やフラグメンテーションの様子を確認したいとき、私たちは tcpdump や Wireshark といったツールを使います。

以下のコマンド例は、LinuxのCLIでネットワークインターフェース(ここでは eth0)を流れるパケットをキャプチャし、フラグメント関連の情報を確認する際の実用的なスニペットです。

# 【Linux】インターフェースeth0を通過するIPパケットのうち、フラグメント(分割)されたものをキャプチャする
# -nn: ホスト名やポート名を名前解決せず数値のまま表示
# -v: 詳細情報を表示(IPヘッダーのフラグメントフラグなどが確認できる)
# 'ip[6:2] & 0x3fff != 0': IPヘッダーのフラグメントオフセットとフラグ部分をフィルタリング
sudo tcpdump -nn -v -i eth0 'ip[6:2] & 0x3fff != 0'

また、ネットワーク機器(CiscoルーターやLinuxなど)の設定において、無駄なフラグメンテーションを発生させないために「TCP MSS(Maximum Segment Size)クランピング」という技術を設定することがよくあります。

例えば、PPPoE環境などでMTUが通常より小さくなっている場合、ルーター側で以下のようにMSSの大きさを自動調整する設定を入れることで、パケットが途中で無理やり分割されるのを防ぎます。

# 【Ciscoルーターのコンフィグ例】
# インターフェースコンフィグレーションモードにて、TCPの最大セグメントサイズを1360バイトに制限する
# (PPPoE等のオーバーヘッドによるフラグメンテーションを防ぐための定番設定)
interface GigabitEthernet0/1
 ip tcp adjust-mss 1360

こうした細かいパラメーターのチューニングが、アプリケーションのパフォーマンス低下や、謎の通信不良を防ぐカギとなります。

—

おわりに

今回は、IPフラグメンテーションの仕組みと、そこに潜むセキュリティリスク、そしてIDS/IPSによる再構築検査の重要性について解説しました。

普段は何気なく使っているインターネットですが、その裏側ではパケットが細かく刻まれ、ルーターが汗を流して運び、宛先で綺麗にパズルが組み立てられています。そして、その便利な仕組みの隙をつこうとする攻撃者と、それを防ぐエンジニアたちの知恵比べが、日夜繰り広げられているのです。

ネットワークの基礎を学ぶことは、セキュリティの目を養うことそのものです。ぜひ今回の話をきっかけに、ご自身の身の回りにあるパケットの流れに思いを馳せてみてくださいね。それでは、また次回の技術解説でお会いしましょう!

コメント

タイトルとURLをコピーしました