【ITニュース解説】How I block all 26M of your curl requests
2025年09月30日に「Hacker News」が公開したITニュース「How I block all 26M of your curl requests」について初心者にもわかりやすく解説しています。
ITニュース概要
curlによる大量のリクエストを効率的に遮断する技術を解説。パケットフィルタリングの仕組みを使い、不正アクセスやサーバー負荷増大を防ぐ具体的な方法を初心者向けに紹介する。ネットワークセキュリティの基本を学べる。
ITニュース解説
ニュース記事は、ネットワークの世界で起こる特定の種類の攻撃、特にIPv6という新しいインターネットプロトコルの「断片化(フラグメンテーション)」という仕組みを悪用したサービス妨害(DoS)攻撃と、それに対する具体的な防御策について解説している。システムエンジニアを目指す上で、このようなネットワークの基礎から応用、そしてセキュリティの知識は不可欠だ。
まず、ネットワーク通信の基本的な仕組みから見ていこう。インターネット上でデータが送られるとき、情報は「パケット」という小さな塊に分割される。このパケットには、送り主と受け取り主のIPアドレス(インターネット上の住所)、データの種類を示すプロトコル情報、そして実際のデータ本体などが含まれている。IPアドレスには現在主流のIPv4と、より多くのアドレスを扱える次世代のIPv6という二つの形式があり、IPv6の利用が広がっている。
次に、「断片化(フラグメンテーション)」の概念を理解することが重要だ。ネットワーク上をデータが流れる際、通信経路の各区間には「MTU(Maximum Transmission Unit)」と呼ばれる、一度に運べるパケットの最大サイズが決まっている。もし送信したいデータのサイズがこのMTUよりも大きい場合、データは複数の小さなパケットに分割され、それぞれが独立して送られる。これが断片化だ。受信側では、これらの分割されたパケットをすべて受け取ってから、元のデータに再構築する。この仕組みは、サイズの大きなデータを効率的に運ぶために必要な機能である。
記事で取り上げられているのは、この断片化の仕組みを悪用したDoS攻撃である。DoS攻撃とは、特定のサーバーやサービスに対して大量の不正なリクエストやデータを送りつけることで、そのサーバーをパンクさせ、正規のユーザーがサービスを利用できない状態に陥らせる攻撃のことだ。今回の攻撃では、IPv6の断片化の特性が悪用される。攻撃者は、意図的に不正な形式の断片化パケットを作成し、標的のサーバーに送りつける。例えば、IPv6のパケットヘッダにある「Next Header」という重要なフィールドには、そのパケットの次にどのプロトコル(例:TCP、UDP)が続くかを示す情報が入っているが、攻撃者はこのフィールドに不正な値を設定したり、あるいは本来最初の断片パケットに含まれるべき重要な情報(例えばTCPポート番号など)を意図的に削除したりする。
このような不正な断片化パケットを受け取ったサーバーは、通常、そのパケットを正常なものとして再構築しようとする。しかし、パケットに必要な情報が不足していたり、構造が不正であったりするため、サーバーのネットワークスタック(ネットワーク通信を処理するソフトウェア群)は再構築に失敗する。この失敗処理が繰り返し発生したり、不正な再構築のためにサーバーのCPUやメモリといったリソースが過剰に消費されたりすることで、サーバーの処理能力が著しく低下し、最終的には応答不能に陥ってしまう。記事のタイトルにある「curl requests」は、ウェブサービスなどにリクエストを送るための一般的なコマンドだが、今回の攻撃では、あたかも正常なウェブリクエストであるかのように見せかけた不正な断片化パケットが大量に送りつけられるイメージだ。
この攻撃に対する有効な対策として、「パケットフィルタリング」がある。パケットフィルタリングとは、ファイアウォールなどのネットワークセキュリティ機器や、サーバーのオペレーティングシステムに搭載された機能を使って、特定の条件に合致するパケットを通過させたり、あるいは破棄したりする技術のことだ。簡単に言えば、ネットワークの入り口で、怪しい荷物(パケット)を門前払いする門番のような役割を果たす。
記事で紹介されている具体的な対策は次の三つである。
一つ目は、「断片オフセット0以外のパケットを破棄する」というルールだ。断片化されたパケットには、元のデータのどの部分にあたるかを示す「オフセット」という情報が含まれる。通常の通信では、最初の断片パケットはオフセットが0であり、通信に必要な重要なヘッダ情報(TCPやUDPのポート番号など)が含まれている。しかし、攻撃者は意図的にオフセット0以外のパケットから送信を開始したり、オフセット0のパケットに本来必要な情報を含めなかったりすることがある。そこで、ネットワーク管理者は、「オフセットが0でないパケットを、オフセット0のパケットがまだ到着していない段階で受け取ったら破棄する」というルールを設定できる。これにより、不正な断片パケットがシステムのリソースを無駄に消費するのを防ぐ。
二つ目は、「Next HeaderがIPv6-Frag以外のパケットで、断片化しているものを破棄する」というルールだ。IPv6プロトコルでは、パケットが断片化されている場合、「断片ヘッダ(Fragment Header)」という特殊なヘッダが付与され、その断片ヘッダのNext Headerフィールドには「IPv6-Frag」という値が設定される。これは、このパケットが断片化の一部であることを明示している。しかし、攻撃者は不正なパケットを作成し、断片化されているにもかかわらず、Next HeaderにIPv6-Frag以外の値を設定することがある。このようなパケットは、IPv6の仕様に準拠しておらず、悪意のあるものとして破棄すべきである。
三つ目は、「IPv6の最小MTUである1280バイトを超えるパケットを破棄する」というルールだ。IPv6では、経路上のMTUを自動的に検出する「Path MTU Discovery」という機能があるが、攻撃者はこの仕組みを悪用し、不正に大きなパケットを送りつけようとすることがある。IPv6の仕様上、最低でも1280バイトのMTUが保証されているため、それよりも大きなパケットで断片化されていないもの、あるいは不正な断片化パターンを示すものは、疑わしいと判断して破棄できる。
これらの対策は、サーバーのOSに標準搭載されているパケットフィルタリング機能(例えばLinuxのnftablesやiptablesといったツール)を用いて実装することが可能だ。これらのツールを使うことで、ネットワーク管理者は特定の条件に基づいてパケットを細かく制御し、悪意のある通信をブロックできる。
今回の攻撃と対策の事例は、システムエンジニアを目指す上で非常に重要な教訓を与えてくれる。それは、ネットワークプロトコルの詳細な仕様を深く理解すること、そしてその仕様がどのように悪用される可能性があるのかを常に想像することの重要性である。単にネットワークが繋がる仕組みを知るだけでなく、パケットレベルでのデータの流れやヘッダ情報の内容、そしてそれらを制御するセキュリティメカニズムについて深く学ぶことは、安全で堅牢なシステムを構築するためには不可欠な知識となる。セキュリティは、システム設計の初期段階から常に考慮すべき要素であり、最新の攻撃手法と対策について学び続ける姿勢が求められる。このような深い理解は、日々のトラブルシューティングからセキュリティインシデントへの対応、さらにはシステム全体のパフォーマンス改善に至るまで、幅広い業務で役立つだろう。