技術者ブログ
クラウド型WAF「Scutum(スキュータム)」の開発者/エンジニアによるブログです。
金床“Kanatoko”をはじめとする株式会社ビットフォレストの技術チームが、“WAFを支える技術”をテーマに幅広く、不定期に更新中!

WAFによるHashDoS攻撃の検知
はじめに
2011年末に発表されたHashDoS攻撃は、JavaやPHP、ASPなど非常に広い範囲に影響を及ぼすものであり、大きな話題となりました。筆者はちょうど大晦日にこの情報をキャッチし、その内容にのけぞりそうになりました。というのも、Javaアプリケーション内でHashMapを使い、そこにユーザ(この場合は攻撃者)からのデータを格納するだけで脆弱だというからです。
JavaではHashMapは非常に頻繁に使われる基本的なクラスであり、TomcatやJettyなどが当然のように影響を受けました。私たちが提供しているSaaS型WAFサービス「Scutum(スキュータム)」は、筆者が開発しているGuardian@JUMPERZ.NET(以下、Guardian)というJava製のWAFアプリケーションがコアとなっており、内部では非常に多くの箇所でHashMapを使用しています。大晦日の午前中、大掃除をあきらめてまず最初に確認したのは、Guardian自体がこの攻撃に脆弱かどうか?という点です。ウェブアプリケーションやウェブサーバを守るべきWAFそのものがDoS攻撃に弱いとなってしまうと、極めてまずいと考えました。
WAFは当然、HTTPリクエストに含まれる各パラメータをパースして検査しますが、これらのパラメータは「name=value」というスタイルを取っているため、単純に考えればアプリケーション内部ではHashMapにそのまま格納するようなソースコードを書いてしまうことは十分あり得ます。どんな実装をしたのか記憶があいまいだったので、半ば祈りながらソースコードを確認したところ、ラッキーなことにパース後のデータはHashMapではなくListで管理していました。Guardian自体はこの攻撃には脆弱でないと確認でき、ほっと一息つけたのです。
その後ウェブ上で次々に更新される情報を確認しながら、お正月であるにもかかわらず防御機能の開発を開始しました。今回は、私たちのWAFでどのようにHashDoS攻撃を検知しているかについて、技術的な解説を行います。