ケルン工科大学の研究チームが新型サイバー攻撃の「Cache Poisoned Denial of Service(キャッシュ汚染型DoS攻撃、CPDoS)」の存在を明らかにしました。
CDNは、キャッシュを用いた画期的なシステムだ。もし元来のサーバーがダウンしたとしてもユーザーが物理的に近い場所に存在するサーバーからデータにアクセスすることが可能にすることで、データ通信の高速化・安定化させるというシステムだ。そんなCDNのシステムを逆手に取ったサイバー攻撃がCPDoSだ。
CPDoSは、CDNやプロキシサーバーによってホスティングされているいかなるウェブリソースでもブロック可能だ。研究チームによると、1つの悪意のあるHTTPリクエストですら、対象となったコンテンツに対するアクセスを全て妨害することができるとのことなのだ。
今回の発表では、CPDoSを引き起こす悪意のあるヘッダを、「HTTPヘッダオーバーサイズ(HHO)」「HTTPメタ文字(HMC)」「HTTPメソッドオーバーライド(HMO)」とし規定し、それについても詳しく解説されている。
以下、原文からの直訳だ。
◆HTTPヘッダーオーバーサイズ(HHO)
HTTPリクエストヘッダのサイズは、ReDoSなどの攻撃を予防するため、大半のウェブサーバーでは「8192バイトまで」といった制限が課されています。しかし、Amazon CloudFrontなど一部のCDNでは、その制限が「20480バイトまで」となっており、「何バイトで制限するか」はサービスによりまちまちです。
HHOは、キャッシュサーバーと元サーバーの間の「制限バイト数の差」を突く攻撃です。例えば、攻撃者がキャッシュサーバーの制限より小さく元サーバーの制限より大きいサイズのリクエストを送信したとします。この場合、このリクエストはキャッシュサーバーの制限を満たしているので、キャッシュサーバーはリクエストを受理します。しかし、キャッシュサーバーが元サーバーに対してリクエストを送信すると、元サーバーのサイズ制限に引っかかってしまうため、キャッシュサーバーにはエラーページが返信されてしまいます。
HHOによるCPDoSを実演したの様子は以下のムービーでチェックできます。最初に表示されていたウェブページが、実験の最後で「Bad Request」のページに代わっています。
◆HTTPメタ文字(HMC)
HMCもHHOとほぼ同様の手口です。HMCでは、元サーバーが「有害」だと判定しうる「\n」「\r」「\a」などの制御文字を含んだリクエストを送信します。元サーバーがこれらの制御文字を「有害」と判定するとキャッシュサーバーに対してエラーページを返します。
◆HTTPメソッドオーバーライド(HMO)
HTTPサーバーは「GET」「POST」「DELETE」「PUT」などのHTTPメソッドに対応していますが、プロキシサーバーやキャッシュサーバーなどは「GET」「POST」にしか対応していない場合がほとんどとのこと。
HMOはHTTPメソッドを置換するようなヘッダを含んだリクエストです。途中で「POST」に置き換わるようにヘッダに書き込まれた「GET」リクエストを送信したとすると、キャッシュサーバーはこのリクエストは「GET」だと扱います。しかし、元サーバーでは「POST」として実行されるため、「POST」リクエストを処理することができるアプリケーションが埋め込まれていない場合には、404 Not Foundのエラーページを返してしまいます。
HMO攻撃を実行しているのが以下のムービー。「Welcome to the start page」と表記されていたウェブページが、「POST」リクエストを処理できずに攻撃実行後はエラーページに代わります。
研究チームはどのサーバーとCDNの組み合わせがどの手法のCPDoSに脆弱性を有しているのか、表を使って示しています。○はCPDoSには対策済みの組み合わせです。
研究チームはCPDoSに対して、緩和策を複数講じており、1つ目の緩和策は「デフォルトでHTTPエラーページをキャッシュしないようにCDNを設定する」という手法で、2つ目は「各エラーページのヘッダに『Cache-Control:no-store』を追加する」という手法とのこと。研究チームはCDN利用者側に対して緩和策を促すだけではなく、CDNサービスを提供する事業者に対しても対策の必要性を訴えている。この対策がユーザーの隅々まで行き渡るのは至難の業となるだろう。