HOME > Scutumを支える技術 > Scutum技術ブログ

技術者ブログ

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

2021年10月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
Scutum開発者/エンジニアによる技術ブログ WAF Tech Blog

ApacheのパストラバーサルをWAFでゼロデイ防御できたのは何故か

はじめに

世界的に知られているウェブサーバ実装のApache HTTP Serverがパストラバーサルの脆弱性を出してしまいました。しかも最初に発見されたCVE-2021-41773だけでなく、すぐに別のパストラバーサル脆弱性CVE-2021-42013も見つかり、わずか数日という短い期間において2度のバージョンアップが行われるという慌ただしい状況になりました。今回はこのApacheの脆弱性と、それに対してScutumがどのように対応できたかについて簡単にご紹介します。

ゼロデイ防御に成功

Scutumはクラウド型WAFとして、パストラバーサルへの攻撃を防ぐことを1つの目的にしています。そして今回Apacheに見つかった2つの脆弱性については、どちらもゼロデイで(脆弱性が発見されるよりもはるか昔から)防御ができる状態でした。そもそもこのような攻撃を想定した防御機能を展開していたためです。

そのため、Scutumをご利用中の場合、もし影響を受けるバージョンのApacheを動作させていたとしても問題ない(攻撃が出来ない)状態を常に保つことが出来ていました。このような状況であればバージョンアップを真夜中などに急いで行う必要もなく、慌てず慎重に対応することができます。また、万が一、脆弱性情報を見過ごしていて対応に遅れが出た場合でも安心できます。今回もApacheの脆弱性の公表後、攻撃は早めに発生していました。

WAFとしてはこのような状態にすることが理想であり、今回Scutumはこれをうまく実現でき、うれしく思います。

CVE-2021-41773を防げた理由

最初に見つかったCVE-2021-41773への攻撃は、一般的なWAFとして、検知するのが簡単な部類に属するものでした。攻撃のペイロードはURLデコードすると一部が典型的な

../../../../
になるものだったので、WAFがURLデコードさえしていれば見逃さずにすむ性質のものだったからです。

Scutumも当然URLデコードは行うので、まったく問題なく攻撃を検知・防御することができました。

CVE-2021-42013を防げた理由

それに対し、続けて見つかったCVE-2021-42013に対する攻撃はやや一般的にWAFとしては検知が難しいものだったと思います。攻撃のペイロードの一部は

%%32
%2%45
のように「%」が複数連続していたり、%に続く16進数が1バイトしか存在しないものだったからです。どちらもURLエンコードされた文字列として見た場合には異常な形であり、これをどのようにURLデコードするのかは実装依存になります。これはHTTP Request Smuggling(以下HRS)のように「どのように解釈するかがソフトウェアにより異なる」ことを利用する攻撃に使われるタイプのものです。

WAFがこれをURLデコードする場合、そのやり方と、後ろにいるウェブサーバ(アプリケーションサーバ)のやり方に違いがあると、攻撃がWAFで検知されない可能性が発生します。これは「HRSの利用によるWAFの回避」となってしまいます。もしこれが可能になってしまうと、パストラバーサルだけでなく、SQLインジェクションやコマンドインジェクションも含め、ありとあらゆる攻撃がWAFを回避してしまうことに繋がります。そのため、WAFを実装する際には、このようなHRSを防ぐことが非常に重要です。

そしてScutumではこの「HRSによるWAF回避」を防ぐため、上記のような「異常な形でURLエンコードされた文字列」は全てブロックする実装になっています。CVE-2021-42013への攻撃ではApacheのパーサ実装に残されたバグを攻略するために上記のような異常なURLエンコーディングが利用されていたため、Scutumではこちらを「パストラバーサル」としてではなく、「不正なエンコーディング」として検知し、防御することが出来ていたのです。

CVE-2021-41773を(ゼロデイで)防ぐことができたWAFはそこそこ多かったのではないかと思いますが、CVE-2021-42013についてはそれほど多くなかったのではないかと思います。

先手で防御を目指すWAF

WAFやIPSにおいて「脆弱性の存在が明らかになり、攻撃のペイロードが判明したら、それに対するシグネチャを作成し、できるだけ早く投入する」という運用が基本だと思われている方が多くいらっしゃるようですが、Scutumでは今回のApacheの件のように、「事前に想定しておいて防御する」こと、つまり先手での防御を重視しています。特に今回のパストラバーサルやSQLインジェクション、コマンドインジェクション等の一般的なウェブアプリケーションへの攻撃では、攻撃のペイロードは昔と変わらない面が多くあるため、これらの脆弱性については「Scutumを入れておけば安心だ」という状態になることを目標にしています。

まとめ

今回は久しぶりのお祭り騒ぎとなったApacheの2つのパストラバーサル脆弱性について、Scutumがなぜ元々の防御機能で防ぐことが出来たのかについて簡単にご紹介しました。余談ですが、先日見つかったConfluenceのOGNLインジェクションの脆弱性(CVE-2021-26084)についてもゼロデイで防御できていました。Scutumを使ってくださっている皆さんがパッチ当て作業で慌てずに済む状態を目指し、今後も頑張っていきます。