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でも類似の回避手法が存在することが分かった。
- ASP.NET 1.1を利用している(ASP.NET 2.0以上の場合は問題なし)
- HTTPリクエストの文字エンコーディングとしてUTF-8を利用している
この場合に、「不正な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サイトの運営者:
- ASP.NET 2.0への移行
- アプリケーション側での脆弱性対策の徹底
IDS/IPS/WAFベンダー:
- 文字エンコーディングを考慮した「不正な文字エンコーディング」の検知
- ただし、IDS/IPSでは実現困難と思われる
発見者
HASHコンサルティング 徳丸浩
http://www.hash-c.co.jp/
secuinfo (at) hash-c.co.jp