UTF-8を利用したIDS/IPS/WAFの検知回避技術

HASHコンサルティング株式会社
公開日:2009年3月23日

概要

本レポートでは、ASP.NET(1.1)をUTF-8文字エンコーディングにて利用しているサイトにおいて、不正な文字エンコーディングを利用したIDS/IPS/WAF回避の可能性について報告する。

背景

株式会社ラックが2008年10月に「【CSL】CSL緊急注意喚起レポート~新手のSQLインジェクションを行使するボットの確認~」と題するホワイトペーパーを発表した。いくつかの新種の攻撃手法が説明されている中で、不正なパーセントエンコードを利用した検知回避テクニックについて言及している。具体的には、以下のような方法だ。

Active Server Pages(ASP)では、「DEC%LARE」のようにパーセント記号に続く2文字が16進数でない場合、パーセント記号を取り除く、すなわち、ASPスクリプト内部では、入力は「DECLARE」として処理される。

アプリケーション側でSQLインジェクション対策している場合は問題ないが、IPSやWAFを用いて防御している場合、「DEC%LARE」をSQLキーワードとして検知できない場合がある。ただし、ASP.NETを利用している場合、パーセント記号は除去されないため、この問題は発生しないことがわかっていた。

発見された問題

下記条件の場合、ASP.NETでも類似の回避手法が存在することが分かった。

この場合に、「不正なUTF-8シーケンス」をASP.NETは除去することが分かった。具体的には、「DEC%C0LARE」のような入力に対して「%C0L」はUTF-8として不正なので、「%C0」のみを除去する。その結果、ASP.NETスクリプトが受け取る入力文字列は「DECLARE」となる。

影響範囲

アプリケーション側で脆弱性対策している場合は問題ない。IDS/IPS/WAFは、不正なUTF-8シーケンスを見分けることが困難なので、SQLキーワードなどを見逃す可能性が高い。%C0はISO-8859-1では「Aにグレイヴ・アクセントを付した文字」、Shift_JISでは半角カタカナの「テ」である。すなわち、%C0など挿入された文字は他の文字エンコーディングでは正当な文字であるので、単純に検知・削除するわけにはいかない。

解決策・回避策

Webサイトの運営者:

IDS/IPS/WAFベンダー:

発見者

HASHコンサルティング 徳丸浩
http://www.hash-c.co.jp/
secuinfo (at) hash-c.co.jp