DNSベースのDDoS攻撃に対する10のシンプルな減災対策

UDPフラッド攻撃は高帯域幅のDDoS攻撃によく使用される手法です。これは、UDPが非接続型のプロトコルであり、スクリプトを使用して簡単にUDPパケットを生成できるためです。

DNSでは主にUDPが使用されますが、状況によってはTCPが使用されます。これは、DDoSツールでUDP/DNSプロトコルが使用されるのが極めて一般的なことだからです。

DNSはインターネットの基盤である非常に重要なプロトコルであるため、その可用性は最も重視されます。そこで攻撃者はDNSを使えないようにするため、再帰的な問い合わせを許可するオープンなDNSリゾルバに対し偽装した要求を送信します。数多くのホームゲートウェイを含め、インターネット上には数百万のオープンDNSリゾルバが存在します。オープンDNSリゾルバは、偽装された要求を有効なものとして処理し、受信者(つまり被害者)にDNS応答を返します。要求数が多い場合、リゾルバが大量のDNS応答を生成する可能性があります。これは、正しく構成されていないDNSリゾルバを悪用して、小さなサイズのDNSクエリを大きなペイロードに変換し、標的に送信する攻撃手法で、アンプ攻撃(amplification attack)と呼ばれます。さらに、別のタイプの攻撃では、DNSサーバー宛てに一方的なクエリや異常なクエリが送信されることがあります。

FortiDDoSは、下記の10のシンプルな方法でDNSフラッド攻撃を減災し、DNSインフラストラクチャを保護します。

一方的なDNS応答を許可しない

  • 典型的なDNSメッセージ交換は、リゾルバからサーバーへの要求メッセージと、それに続くサーバーからリゾルバへの応答メッセージで構成されます。一方的に応答メッセージが送信されることはありません。また、応答メッセージに対して応答メッセージが返されることはありません。
  • FortiDDoSは、オープンリゾルバまたは権威サーバーのいずれかであるDNSリゾルバよりも前に配備されます。
  • 毎秒数百万件のクエリ処理が可能で、クエリとそれに対応する応答のメモリテーブルを保持するインラインデバイスです。
  • 応答を受信し、対応するクエリが未通過であった場合、その応答は単純にドロップされます。この仕組みは、反射攻撃に対して非常に効果的です。

早過ぎる再送信はドロップする

  • パケットロスが発生した場合であっても 正規のDNSクライアントが極めて短時間に同じクエリを送信することはありません。クエリの再送信については、RFCの規定に従う必要があります。
  • したがって、同一のIPから同一の宛先に同一のクエリが短時間で送信された場合には、そのクエリをドロップすることができます。

応答をすでに送信した場合は同じクエリをすぐには許可しない(パケットの有効期限を設定する)

  • 正規のクライアントは、すでに応答を受信しているのであれば同じクエリを再送信しません。
  • すべての応答は、有効期限が切れるまでの間キャッシュされることになっています。
  • クエリフラッドの発生時、そのような仕組みを実行すれば不要なフラッドを阻止できます。

異常なDNSクエリと応答はドロップする

  • DDoS攻撃の大半は、スクリプトを使用して作成されています。使用されるスクリプトには、他のソフトウェアと同様バグが存在する可能性があります。スクリプトは、必ずしもDNSヘッダーに関するRFCに準拠しているとは限りません。つまり、シンプルな異常検出メカニズムであっても、場合によってはフラッド攻撃パケットの数をある程度制限できます。

受信したことのない予期せぬDNSクエリや一方的なDNSクエリはドロップする

  • このようなクエリの原因としては、プローブ用にサーバーをリゾルバとする不適切な権限委譲、デバッグを目的とした誤った構成、あるいは単なる攻撃トラフィックが考えられます。いずれの場合も、クエリをドロップするのが合理的です。
  • フラッドが発生していない間に、肯定応答が返された正規クエリのテーブルを作成することができます。
  • 作成されたテーブルは、これまで受信したことのないフラッド攻撃クエリをブロックするために使用できます。
  • こうすることで、ドリップ、ファントムドメイン、ファントムサブドメインを使用したDNS DDoS攻撃を阻止できます。
  • また、権威ネームサーバーには、権限を持つゾーン内またはそれ以下のドメイン名に対するクエリのみが送信されるようになるため、一方的なDNSクエリはブロックされます。

偽装クライアントでないことをDNSクライアントに証明させる

  • 偽装はDNS攻撃でよく見られる手法です。
  • アプライアンスがクライアントに対して認証情報が偽装されていないことを証明するよう強制できる場合には、偽装されたフラッド攻撃パケットからフラッド攻撃ではないパケットを選別するのにアプライアンスを使用できます。
  • FortiDDoSでは、TCP転送の強制または再送信の強制などのアンチスプーフィング手法を用いて正規のパケットが選別されます。

応答をキャッシュし、DNSサーバーのオーバーロードを防止する

  • FortiDDoSには、毎秒数百万件のDNSクエリの処理が可能なハードウェアロジックに基づく高性能キャッシュが搭載されています。
  • フラッド攻撃の最中にDNSクエリが上記すべてのテストに合格した場合、応答がすでにキャッシュ内に存在していればキャッシュは応答することができます。これにより、サーバーがオーバーロードすることはなくなります。

ACLを活用する

  • 多くのクエリには、所有していない情報やサポート対象ではない情報が含まれます。そうしたクエリは単にブロックすることも可能です。たとえば、外部IPアドレスによるゾーン転送やフラグメントパケットのクエリを禁止するには、そうしたクエリをドロップするだけで済みます。

位置情報に基づくACL、BCP38、IPレピュテーションを活用する

  • DNSサーバーをホスティングするいずれの企業も、把握できている顧客のフットプリントは限定的です。
  • 攻撃パケットが偽装されている場合、その送信元アドレスを見ると世界中から送信されていることが分かります。希望しない位置情報のあるパケットをブロックしたり、特定の位置情報を持つトラフィックのみを許可したりするシンプルなフィルタは非常に有効です。
  • 同様に、スプーフィング攻撃もランダムに実行されます。偽装されたパケットが内部のアドレスから送信されることもあります。ハードウェアフィルタを使用してBCP38を実装することで、異常な送信元アドレスからのトラフィックも排除できます。
  • 顧客にDNS解決サービスを提供しているサービスプロバイダにBCP38を実装することによって、顧客は攻撃パケットを送信することも内部アドレスを使用してパケットを受信することもできなくなるため、非常に効果的です。これにより、顧客および顧客が送受信するパケットの選別が可能になります。

帯域幅を多めにプロビジョニングする

  • 通常のDNSトラフィックが数Gbpsある場合には、帯域幅に余裕を持たせる必要があります。大規模な攻撃に対処できるよう、オーバープロビジョニングしてください。

FortiDDoSを使用して上記の10のシンプルな方法を実行することで、DNSベースのDDoS攻撃の緩和と顧客へのサービス提供の継続が実現します。