2016/04/11

アプリケーション層 DoS 攻撃

2016 年 4 月 11 日 MARC LALIBERTE 著

サービス拒否攻撃(DoS)や分散型サービス拒否攻撃(DDoS)攻撃では、攻撃者が標的とするネットワークサービスのリソースを大量に使用して、サービスにアクセスできない状態に追い込みます。DoS の目的は幅広く、政治的なものであったり、犯罪であったり、単に注目を集めたいというものであったりします。たとえば、政治活動家のハクティビストグループであるアノニマスは、日本の捕鯨活動への反対行動として、日産自動車のグローバル Web サイトを攻撃したことがあります。犯罪者もまた、カスペルスキーが発表した作成の DDoS レポートにあるように、ネットワーク侵入の隠避や撹乱の手段として、この攻撃方法を使用しています。あるいは、ハッカー集団、リザードスクワッドによる 2014 年クリスマスの Xbox Live や PlayStation Networking に対する DDoS 攻撃のように、注目を集めることを目的とするものもあります。

攻撃者は多くの場合、SYN フラッドによって、ネットワーク層やトランスポート層に対して DoS 攻撃を仕掛けます。TCP のハンドシェイクプロセスに馴染みがないという方には、InetDaemon によるこの短い記事が参考になるでしょう。SYN フラッドでは、攻撃者が TCP SYN メッセージを送信して標的とするサーバーの接続を開きます。接続を確認するための ACK メッセージは送信しません。これにより、サーバーのリソースが使用されて、いずれかの段階で新たな接続を確立できなくなり、すなわち、アクセスが拒否されることになります。分散型(DDoS)攻撃の場合は、悪意あるトラフィックのソースが複数のクライアントに分散しているため、攻撃者が各クライアントで使用するリソースが標的のサーバーよりも少なくてすみます。

ネットワーク層 DoS 攻撃の場合は、ネットワークファイアウォールを使用してフラッド攻撃を検出し、抑制することで、緩和できます。ウォッチガード Firebox には Default Packet Handling というルールが予め構成されており、保護対象のネットワークに対する DDoS 攻撃が発生した場合は、このルールによってフラッド攻撃を仕掛けようとするソースがブロックされ、トラフィックが抑制されます。

ネットワーク層 DoS 攻撃に対する保護が強化されていることから、攻撃方法も変化してきています。最近の 1 つの傾向として、アプリケーション層へと攻撃がシフトしています。アプリケーション層 DoS 攻撃では、悪意あるクライアントが UDP リッスンまたは TCP 接続完了のいずれかのトラフィックを送信しますが、この時に、標的のネットワークサービスのネットワーク帯域幅とリソースの両方が使用されます。アプリケーション層 DoS の一般的な形態は、リフレクション型 DNS アンプ(増幅)攻撃です。リフレクション型 DNS アンプ攻撃では、悪意あるクライアントが DNS クエリを送信して、標的サーバーの偽装ソース IP を使って DNS リゾルバを開きます。DNS リゾルバが次に、応答を送信(リフレクション)しますが、この応答はクエリの何倍もの大きさであることも多く、かつ、IP を偽造された標的サーバーにその応答が送信されることになります。この種の攻撃は、複数の DNS リゾルバを使用する複数のクライアントに分散しているため、サーバーに大量の応答が送信されることで、使用される帯域幅が増幅します。

Imperva が先週のブログ記事で、これとは別の種類の、同社のクライアントで経験したアプリケーション層 DDoS 攻撃について解説していますが、 この攻撃では、Nitol マルウェアの亜種に感染したボットネットがランダムにサイズの大きいファイルを生成し、それを HTTP POST 要求を使って標的サーバーにアップロードしていました。アプリケーション層を使用していたために、TCP ハンドシェイクの完了後に初めて、悪意あるトラフィックであると特定されました。つまり、悪意あるトラフィックであると特定される前に、ネットワーク経由で標的のサービスがアプリケーショントラフィックを大量に受け取って、それによって帯域幅が大量に使用されてしまっていたことになります。さらには、この攻撃によって、悪意があるとわかる前のトラフィックを標的のサービスが処理し、それによって、大量の処理リソースが無駄に使用されていたことになります。

アプリケーション層 DoS 攻撃からの保護は、ネットワーク層 DoS 攻撃の保護と比べると、はるかに困難です。ネットワーク境界の上流のネットワーク層攻撃の場合は、フラッド検出を使用することで簡単に緩和できますが、アプリケーション層攻撃の場合は、TCP 接続が先に完了するために、通常は、悪意があると特定される前にトラフィックがネットワークの境界に到達できます。一般的には、ネットワークのパイプを攻撃者の想定よりも大きくすることで、攻撃を緩和します。

ネットワークの境界では、ステートフルファイアウォールを使用して、最低でも、リフレクション型トラフィックがネットワークに侵入しないようにします。ステートフルファイアウォールでは、ネットワーク上でのクライアントからのセッションのレコードが保存されます。偽装パケットへの応答が到着した場合は、ステートフルファイアウォールのセッションテーブル内のどのレコードとも一致しないため、ファイアウォールによってパケットがドロップされます。この種の保護では、悪意あるパケットの保護対象ネットワークへの侵入を阻止できますが、外部ネットワーク帯域幅が大量に使用されないようにできるわけではありません。最善策は、インターネットサービスプロバイダーが BCP 38 を採用することであり、このフィルターがあれば、インターネットバックボーンへの侵入前に偽装トラフィックがフィルタリングされます。 – Marc Laliberte

参考記事