ライザムーン(LizaMoon)攻撃に対してもWAFは有効

ライザムーン攻撃に対する行き届いた解説を読みました。
大規模インジェクション 「LizaMoon」攻撃について調べてみた。 - piyolog

ここで紹介されている内容は素晴らしいと思うのですが、一点、WAFに関する以下の記述が引っかかりました。

SQLインジェクションであれば既知の攻撃手法でありWAFで防ぐことは出来るのではという考え方もありますが、例えばブラックリストタイプのWAFでこの数値リテラル型をつくSQLインジェクションを防ぐことが出来ません。HTTPリクエストとして受けた文字列だけで、最終的にデータベースに対して発行されるSQLでその文字列がどのような扱いになるか(数値リテラルになるのかどうか)判断することが出来ないためです。

本当にブラックリストタイプのWAFで防ぐことができないのでしょうか。IBMのレポートに紹介されている以下の攻撃で考えてみます。

/target.asp?id%3D17871+update+【テーブル名】+set+【カラム名】%3DREPLACE(cast(...

https://www-950.ibm.com/blogs/tokyo-soc/?lang=ja

これはターゲットサイトのテーブルを改ざんするリクエストのURLですが、確かにシングルクォート「'」もセミコロン「;」も使われていないため、昔のWAFだと素通ししてしまいそうです。
しかし、現代的なWAFであればそうではありません。日経SYSTEMS 2009年3月号に「WAFでWebアプリの脆弱性を守れるか」という検証レポートを書いた際に以下の5製品でWAFを検証しました。その際のメモを元に、ライザムーン攻撃とWAFの関係について検討します。

  • 米F5 Networksの「BIG-IP Application Security Manager(以下,BIG-IP)」
  • 米Citrix Systemsの「Citrix Application Firewall(以下,Citrix)」
  • 米Impervaの「SecureSphere」
  • Barracuda Networksの「Barracuda Web Application Firewall(以下,Barracuda)」
  • ジェイピー・セキュアの「SiteGuard」

日経システムズの検証の際に用いたパターンの一つがこれです。

1 update pet set kind=CAST(0x48494a AS VARCHAR(2000)) where id=1001

このパターンは、ライザムーン攻撃の特徴をいくつか含んでいます。

このため、このパターンをブロックできれば、ライザムーン攻撃もブロックできる可能性が高いと考えられます。
結果は以下の通りです。

BIG-IP Citrix SecureSphere Barracuda SiteGuard
× △(検知のみ)

ご覧のように、このパターンを検知できなかったWAFはCitrixのみでした。今回の検証ではホワイトリストの設定はしていないので、ブラックリストによりライザムーン型のSQLインジェクション攻撃が検知できたことになります。

まとめ

ライザムーン攻撃に似た攻撃パターンを用いて、WAFのブラックリストでこの種の攻撃が検知できることを示しました。
id:Kangoさんの「ブラックリストタイプのWAFでこの数値リテラル型をつくSQLインジェクションを防ぐことが出来ません」という認識は、古いWAFのイメージに引きずられた典型的な誤解と考えられます。現実には、2008年(この検証を実施した時期)には、多くのWAFがライザムーン型の攻撃を防御できる性能を持っていたことになります。
したがって、WAFへの過信は禁物でアプリケーション側の対策が重要ではあるものの、既存アプリケーションに対する防御や、多層防御の一つとして、WAFは有効であると考えます。