SQLインジェクションの対策
運用時の対策
SQLインジェクションに限らず、Webアプリケーションの防御にはIDS(Intrusion Detection System;侵入検知システム)、IPS(Intrusion Prevention System;侵入防止システム)、WAF(Web Application Firewall;Webアプリケーションファイアーウォール)の導入が検討できる。具体的には、図3-1のような効果が期待できる。しかし、導入しただけで安全という訳ではない。導入にあたっては図3-2に示す項目に注意が必要だ。導入例を図3-3に示す。
また、SQLインジェクションなどの攻撃を早期に察知し対策するには、ログの監視/解析が有効である。
データベースサーバーのログの監視/解析の方法を示す。
・データベースサーバーに不自然なSQLが送信されていないかどうか、データベースサーバーのクエリーログを監視し、通常は使われない形式のSQL文が使用されていないか監視を行う方法で、攻撃を検知することができる。
・データベースサーバーのユーザーが行ったSQL文送信以外の操作ログを記録し、監視/解析する。これによって、権限昇格によるシステムカタログなどへの攻撃を検知することができる。
そのほかのアクセスログの解析として、以下のようなものがある。
・WebサーバーへのアクセスログもSQLインジェクションを検知する上では有力な手掛かりとなる。IPAからWebサーバーのアクセスログを解析し、SQLインジェクションの有無をチェックするツールも配布されている。これらを有効に活用してほしい。
・WAF/IDS/IPSなどのログも有用である。Webサーバー単独でログを採取するよりもより多くの情報が得られる。ログは必ず採取し、監視してほしい。
なお、ログの解析にはそのWebサイト、Webシステムのアクセス数に比例した記憶容量を持つ記憶装置が必要である。ログの1日当たりの発生量を適切に見積もり、いつまで保存するのかによって必要なコストは変動する。それぞれに見合った製品やシステムを検討の上導入するべきである。
ここまで紹介したように、SQLインジェクションの対策は基本的な事柄をしっかりやっておくことが重要である。しかし、どうしても対策の漏れが生じてしまうこともあるだろう。よくあるSQLインジェクションの対策の漏れと、その対応方法を図3-4にまとめているので、チェックしてみてほしい。
次回は攻撃手法を紹介
今回紹介した通り、SQLインジェクション攻撃の対策は技術的に特別なことをする訳ではない。にもかかわらず、いまだに診断でSQLインジェクション脆弱性がなくならないのは、やはり問題の根底にセキュリティーに対する認識の低さがあると思われる。次回は、実際のSQLインジェクション攻撃の手法を紹介する。
【参考文献】
IPA「安全なウェブサイトの作り方 改訂第3版」
(http://www.ipa.go.jp/security/vuln/documents/website_security.pdf)(アクセス:2009/2)
IPA「ソフトウエア等の脆弱性関連情報に関する届出状況[2008年第4四半期(10月~12月)]」
(http://www.ipa.go.jp/security/vuln/report/vuln2008q4.html)(アクセス:2009/2)