前回に続き,入力フォームに数値を入れる場合を検証した。情報を盗む攻撃(3)と改竄する攻撃(4)の2種類である(図4)。合計4個の攻撃パターンを試すとCitrixが3個を遮断しなかった。

図4●検証した数値型・新型のSQLインジェクション<br>(3)と(4)は数値型の攻撃。それぞれ情報を盗むパターンと改竄するパターンがある。(5)は2008年10月に見つかった新しい攻撃手法
図4●検証した数値型・新型のSQLインジェクション
(3)と(4)は数値型の攻撃。それぞれ情報を盗むパターンと改竄するパターンがある。(5)は2008年10月に見つかった新しい攻撃手法
[画像のクリックで拡大表示]

 入力値として文字列を想定するWebアプリケーションを攻撃する(1)(2)の場合は,「'」などの特殊文字が必要なので,WAFは攻撃かどうかを判断しやすい。しかし数値の入力を想定しているアプリケーションの場合,ブラックリストで攻撃を検出するのは比較的難しくなる。SQL文の中で出てくることが多い「'」などの特殊文字を使わずに攻撃できるからだ。このため攻撃(3)(4)のような数値型の攻撃は,実際に多く用いられている。

 実は事前のヒアリングにより,Citrixのブラックリストは,「'」などの特殊文字と,SQLの予約語(select,whereなど)の両方が入っているものを攻撃とみなす仕組みだと分かっていた。他社製品と異なり,シグネチャを備えていない。このため数値型攻撃の一部を遮断しなかった。

 数値型攻撃を防ぐ方法をシトリックス・システムズ・ジャパンに確認すると,二つあることが分かった。一つはホワイトリストの利用だ。ホワイトリストで入力値を数値だけに限定すれば,今回の攻撃をすべて遮断できる。ただしWebサイト中の数値型の入力値をすべて探して,漏れなく設定するのは手間が掛かる。もう一つは,特殊文字がなくても,SQLの予約語が入っているだけで遮断するように設定する方法。過剰検知が増えるため,必要な入力文字は個別に許可するなどの作業が必要になる。

 検知漏れの最後の検証として,2008年10月に明らかになった「%」文字を使う攻撃を試した(図4(5))。これは,米MicrosoftのWebサーバー(IIS:Internet Information Services)のASP(Active Server Pages)環境だけで有効な攻撃で,インターネット上で頻繁に使われているのをラックが発見して警告したものだ。

 この攻撃は2パターンを試し,Barracudaは1パターン,Citrixは2パターンを遮断しなかった。ベンダーに確認すると,どちらもブラックリストの設定変更によってある程度の遮断が可能だが,100%の対応は難しいという。両社ともファームウエアのバージョンアップで遮断可能にする計画だ。