コンテンツにスキップ

DDoS保護

DDoS(Distributed Denial of Service)攻撃は、攻撃者が複数の送信元からのトラフィックでウェブサイトまたはオンラインサービスを圧倒し、サービスを利用不可能にしようとするサイバー攻撃の一種です。本ドキュメントでは、DDoS保護の推奨事項およびWallarmを用いたリソースの保護方法について説明します。

DDoS攻撃は、ボットネットと呼ばれる乗っ取られたコンピューターシステムのネットワークから発動されることが多いです。攻撃者はこれらのシステムを用いてターゲットに大量のトラフィックを送信し、サーバーに過負荷をかけ正当な要求に応答できなくします。DDoS攻撃は、ウェブサイト、オンラインゲーム、さらにはソーシャルメディアプラットフォームなど、あらゆる種類のオンラインサービスを対象とする可能性があります。

攻撃者がDDoS攻撃を実行するために使用できる技術は多数存在し、その手法やツールは大きく異なります。中には、サーバーへの大量の接続要求送信などの低レベルの手法を用いる比較的単純な攻撃もあれば、IPアドレスのなりすましやネットワークインフラの脆弱性を悪用するなど、複雑な戦術を用いる洗練された攻撃もあります。

DDoS攻撃の分類

攻撃者がウェブサイトまたはオンラインサービスの可用性を妨害するために利用できるDDoS攻撃にはいくつかの種類があります。以下は一般的なDDoS攻撃のタイプです:

OSI層 / 攻撃タイプ Volumetric and amplification attacks Protocol exploits and Logic bombs
L3/L4
  • UDPフラッド:これらの攻撃はターゲットに大量のUDPパケットを送信し、利用可能な帯域幅を消費してサービスを妨害しようとします。
  • ICMPフラッド (Smurf攻撃):これらの攻撃はICMPを用いてターゲットに大量のエコー要求パケット(一般に「ping」要求として知られる)を送信し、帯域幅を消費してサービスを妨害しようとします。
  • SYNフラッド:これらの攻撃はTCP接続の確立方法の脆弱性を突きます。攻撃者はターゲットに大量のSYNパケットを送信しますが、接続確立に必要な三者間ハンドシェイクを完了しません。これにより、ターゲットサーバーはハンドシェイクが完了するのを待つ間にリソースが占有されます。
  • Ping of Death:これらの攻撃は、ターゲットが処理可能な最大サイズを超える大きなパケットを送信してクラッシュさせようとします。パケットが大きすぎるため、処理に失敗しターゲットがクラッシュまたは利用不可能になる可能性があります。
L7
  • HTTPフラッド:これらの攻撃は、大量の正当なGETまたはPOST要求に見えるリクエストをサーバーまたはウェブアプリケーションに送信し、ターゲットを圧倒します。この種の攻撃は、マルウェアに感染した乗っ取られたコンピューター群、すなわちボットネットを用いて実行されることが多いです。
  • 増幅攻撃:これらの攻撃は、増幅技術を用いてターゲットに送信されるトラフィック量を実際よりも大きく見せかけます。たとえば、攻撃者が小さなリクエストをサーバーに送信すると、サーバーはそれに対してはるかに大きな応答を返し、ターゲットに送信されるトラフィックの量が増幅されます。攻撃者が増幅攻撃を実行するために使用できる手法には、NTP増幅、DNS増幅などがあります。
  • Slowloris:Slowloris攻撃は、最小限の帯域幅で実行可能な点が特徴です。攻撃は、ウェブサーバーへ複数の同時接続を開始し、それらを長時間維持します。攻撃者は部分的な要求を送信し、時折HTTPヘッダーを補完することで、要求が完了段階に至るのを防ぎます。
API/App specific (L7+)
  • Heavy Request:これらの攻撃は、サーバーが大量のデータを応答として送信するよう誘導する特別に作成された要求を使用します。この種類の攻撃は、事前にウェブアプリケーションを調査し、その脆弱性を悪用することに基づいているため、ターゲットを絞った攻撃でよく使用されます。
  • Logic Bomb:これらの攻撃は、大量のデータを含む特別に作成された要求を使用し、要求処理中の脆弱性を悪用してターゲットシステム上で大量のリソース消費を引き起こすように設計されています。Logic Bombには、XML Bomb、JSON Bombなど、さまざまな種類があります。

Volumetric and amplification attacksは、大量のトラフィックでターゲットを圧倒しようとします。目的は、ターゲットサーバーまたはネットワークの帯域幅や計算リソースを飽和させ、正当な要求に応答できない状態にすることです。

Protocol exploits and Logic bombsは、サービスまたはネットワークの通信方法の脆弱性を突くことを目的としたDDoS攻撃です。これらの攻撃は、特定のプロトコルの脆弱性を悪用する、またはターゲットが処理しにくい不正な形式のパケットを送信することで、通常のトラフィックの流れを妨害します。

DDoS攻撃の緩和

DDoS攻撃はさまざまな形態を取り、異なるOSI層を対象とするため、単一の対策では効果が不十分であり、包括的な保護を提供するためには複数の対策を併用する必要があります。

  • インターネットサービスプロバイダーおよびクラウドサービスプロバイダーは、通常、L3-L4レベルのDDoS攻撃に対する第一線の防御を提供します。重度のL3-L4 DDoS攻撃の場合、追加の緩和ツールが必要です。例として:

    1 Gbps以上のトラフィックを発生させるDDoS攻撃の場合、トラフィックスクラビング用の専門的なDDoS保護サービスが必要になることがあります。トラフィックスクラビングとは、第三者サービスを経由してトラフィックをルーティングし、悪意のあるトラフィックを除去し、正当な要求のみをサービスに転送する技術です。L3-L4 DDoS攻撃に対する追加の保護対策として、NGFWなどのソリューションを利用することも推奨します。

  • L7 DDoS攻撃、別名「アプリケーション層」攻撃は、L3-L4攻撃に比べてより標的を絞った洗練された攻撃です。通常、L7 DDoS攻撃は攻撃対象のアプリケーションの特性を狙うため、正当なトラフィックと区別が困難です。L7 DDoS攻撃から保護するには、WAAPまたはアプリケーション層のトラフィックを解析する専門のAnti-DDoSソリューションを使用してください。また、API GatewayまたはWEBサーバーをピーク負荷に対応できるように構成することも推奨します。

保護対策を選定する際には、以下の要因に基づいて組織のニーズおよびリソースを慎重に評価する必要があります:

  • 攻撃の種類

  • 攻撃の量

  • ウェブアプリケーションまたはAPIの複雑さおよびコスト

DDoS攻撃を早期に識別し、迅速な対策を講じるために、対応計画を準備することも必要です。

WallarmによるL7 DDoS保護

Wallarmは、L7 DDoS脅威に対して幅広い保護対策を提供します:

  • API Abuse Prevention機能を有効化し、さまざまな種類の悪意のあるボットを識別して遮断します。

  • Brute force triggerにより、パスワードなどのパラメータ値に対するブルートフォースによる大量の要求を防ぎます。

  • Forced browsing triggerにより、ウェブアプリケーションの隠しリソース(ディレクトリやファイルなど)を検出しようとする悪意のある試行を防ぎます。

  • denylists and graylistsを用いたジオロケーションフィルタリングにより、攻撃を仕掛ける特定の地域からのアプリケーションやAPIへのアクセスを防ぎます。

  • denylists and graylistsを使用して信頼できない送信元をブロックします。ターゲットを絞った攻撃から保護するため、Tor、Proxy、VPN等、攻撃者が位置情報を隠しジオフィルタを回避できる信頼性の低い送信元をブロックすることが有用です。

  • Logic (Data) bomb検出。WallarmはZipまたはXML bombを含む悪意のある要求を自動的に検出して遮断します。

  • Rate limitingの設定により、特定のAPIスコープに対して許可される接続の最大数を指定します。定義された制限を超える要求はWallarmにより拒否されます。

NGINXベースのWallarmノードを使用している場合、以下の方法でL7 DDoSに対するセキュリティ向上のため、NGINXの設定を行うことが推奨されます:

  • キャッシング。一般的なリクエストに対してキャッシュ応答を設定し、DDoS攻撃下で発生するトラフィックの一部を吸収してウェブアプリケーションまたはAPIへの到達を防ぎます。

  • Rate limiting。受信リクエストに対してレート制限ルールを作成し、ターゲットのウェブアプリケーションまたはAPIに送信されるトラフィックの量を制限します。

  • 接続数の制限。1つのクライアントIPアドレスが開くことのできる接続数に、実利用者に適した値の制限を設定することで、リソースの過剰使用を防ぎます。

  • 遅い接続の終了。十分な頻度でデータを書き込まない接続は、長時間維持され新規接続の受付を妨げるのを防ぐために終了させます。

NGINX設定の例およびその他の推奨事項をご参照ください