2021年12月に、Javaベースのロギングユーティリティである「Apache Log4j」の脆弱性が公開されました。脆弱性および深刻度が最大であったこと、また広範囲のシステムやアプリケーションが対象となったことで大きな話題となりました。さらに、Apache Log4jの脆弱性を利用した攻撃の一部が、WAF (Web Application Firewall) を回避して被害をもたらしたことについては、「なぜWAFが回避されたのか」についての検証と議論を引き起こしました。
以下では、「どうすればWAFを回避した攻撃を防げるか」について解説します。
目次
WAFが回避される3つのパターン
WAFは、インターネット経由の攻撃を防ぐために設置されています。WAFが回避される、ということは、WAFによる保護が機能せずに、Webアプリケーションに直接攻撃が行われることを意味します。このような事態になってしまった場合、Webアプリケーション内で持っている顧客情報や課金情報などの流出といった被害を招きかねません。
では、なぜWAFが回避されてしまったのでしょうか。結論からいうと、3つのパターンがあります。
WAFが回避される3つのパターン①リクエストに記録された情報全てを検査しないWAFがある
1つめは、「リクエストに記録された情報全てを検査しないWAFがある」というパターンです。WAF製品には、「リクエストの記載された全部の情報を検査する」製品と、「WAFが考える重要な部分だけを検査し、それ以外の部分は検査しない」WAF製品があることが分かっています。今回、ログの全部分を検査しないWAF製品は、WAFを回避され攻撃が行われてたことが判明しています。
WAFが回避される3つのパターン②WAFがデコードしない部分に、エンコードした文字列を入れ、文字がデコードされた後に攻撃が行われる
2つめは、「WAFがデコードしない部分に、エンコードした文字列を入れ、文字がデコードされた後に攻撃が行われる」というパターンです。例えば、UTF-8では「0」が数字の「0」、「1」が数字の「1」となりますが、攻撃に用いる文字列を隠して埋め込むことで、WAFを回避させています。なお、このパターンは「難読化によるWAF回避」とも呼ばれます。
WAFが回避される3つのパターン③個別のWAF検出ロジックの回避
3つめは、「個別のWAF検出ロジックの回避」というパターンです。WAFには攻撃を検出するための膨大なロジックが盛り込まれていますが、その個別のロジックを回避するというもので、特に「JDNI Lookup」という仕組みを悪用したものです。
JDNIとは「Java Naming and Directory Interface」の略語です。Javaで標準的に用いられるディレクトリサーバーのアクセスに用いるAPIで、LDAPまたはLDAPSのプロトコルが用いられます。このAPIで用いられる変数を、ネットワーク越しに検索する機能がJDNI Lookupとなります。
一般的な攻撃例は以下のようなものです。
攻撃者が悪意のあるHTTPリクエストを行うと、リクエスト受けたサーバーがLDAPまたはLDAPSで攻撃者のサーバーがリクエストを送信します。攻撃者のサーバーは問い合わせに対応して、悪意のあるJavaのソースコードをコンパイルし、リクエストを送信したサーバーにダウンロード、実行させます。これで攻撃が成功してしまいます。
WAF回避を食い止めるための対策
ここでは、WAFを回避する攻撃を食い止めるための対策を2点ご紹介します。
WAF回避を食い止めるための対策①WAFがリクエストの全部分を検知対象にする
1つめは、WAFがリクエストの全部分を検知対象にするという点です。WAF側で、検知対象をあえて狭めている場合は、検知対象をリクエストの全部分とする必要があります。
全部分を検知できるようになった後は、難読化によるWAF回避への対応が必要となります。WAFベンダーからは、Log4jの脆弱性が報告された後、短期間で「Log4jの難読化によるWAF回避対策」のアップデートが提供されています。WAF利用企業は、このアップデートが正しく適用されているか確認しましょう。
WAF回避を食い止めるための対策②検出ロジックの追加
2つめは、検出ロジックの追加です。WAFが回避されるパターンでお伝えした「文字のエンコード・デコードを利用した回避」および「個別のWAF検出ロジック自体の回避」を踏まえて、今後同様のWAF回避が行われないよう、ロジックを追加すべきです。なお、ロジック追加の際は、「ロジックによる正常リクエストの誤検出」がないように留意すべきです。
標準でWAFセット済のWADAXで、Apache Log4j対策を
今回は、Apache Log4jの脆弱性について、できるだけ分かりやすくお伝えしました。WAF回避を防ぐための実際の対策には、攻撃者のリクエストログの解析や、実際行われた攻撃に対する対策の実装など、セキュリティに関する高度な理解と分析、そして対応が必要となります。
しかし、大企業を除く多くの企業においては、セキュリティ対策を専任で行う「セキュリティエンジニア」を採用する余裕がありません。このため、情報システム部門の担当者が、開発や運用業務の傍ら、セキュリティに関しても兼任で担当している例が多いのが実情です。こうした担当者は、セキュリティについて専門的な学習を行ってきたわけではないため、セキュリティに関する理解度に限界があるのが実情です。
そこでお勧めしたいのが、WADAX おたすけ クラウドサーバーです。WAFを含めたセキュリティ面の設定や脆弱性対応、24時間監視など、必要な機能をすべてパッケージとしてサービス提供いたします。Apache Log4jに関する対策も適用済です。
現在、30日無料トライアルを提供しておりますので、ぜひお試しください。
最後に
さて、今回はWAFの対策アプローチについてについてお届けしました。良いヒントは得られましたでしょうか?Webアプリケーションに対する汎用的な攻撃を、シグネチャ検査で検出しブロックできるWAFの利用をご検討であれば、30日間無料でお試しいただける、WADAXを是非ご検討ください。