前回の記事でSQLインジェクションの話は終わりにして、
SQLインジェクションの常識
ブラインドSQLインジェクションの話をする前に、
SQLインジェクション対策として間違ってはいないが不十分な対策
- エラーメッセージを表示しない
(特にSQLエラー) - ユーザ入力文字列をエスケープする
これらはSQLインジェクション対策として有用な対策ですが、
これらの対策を行っても、
以下はよくあるSQLインジェクションの脅威に対する誤解です。
- データベースの構造を知られていなければ攻撃できない
- エラーメッセージを表示しなければSQLインジェクションによって攻撃されない
- SQLインジェクションを成功させるには高度な攻撃スキルが必要である
これらは全てとても危険な誤った認識です。
ブラインドSQLインジェクション
PostgreSQLカンファレンスの私のセッションをお聞きになられた方は、
ブラインドSQLインジェクションを利用した攻撃手順
- SQLインジェクションに脆弱な箇所を見つける
- フィンガープリンティングによりSQLデータベースサーバの種類を判別する
- ブラインドSQLインジェクションを行い、
データベースの構造を解析する - 攻撃用のSQL文を実行させ、
情報の不正取得や改ざんを行う
まず、
や
のような文字列を送信してアプリケーションの動作がどのように変化するか観察するとSQLインジェクションに脆弱か判別できます。これ以外にもSQLインジェクションに脆弱かチェックするために便利な文字列はいくつもあります。エラーメッセージが表示されなくてもプログラムの動作はSQL文の実行結果によって変化します。プログラムが予期していない入力を与えることによって発生するアプリケーションの動作の違いによって攻撃者が簡単にSQLインジェクションに脆弱か判別できます。
データベースサーバの種類もフィンガープリンティングによって簡単に判別できます。ステップ1でSQLインジェクションに脆弱な箇所がわかっているので、
次にブラインドSQLインジェクションを行ってデータベースを解析します。ブラインドSQLインジェクションにはデータベースシステムのシステムカタログ
詳しい解説は省略しますが、
最後に解析したデータベースの設計情報とSQLインジェクション脆弱性を利用して、
SQLインジェクション脆弱性は非常に危険
すべてのSQLインジェクション脆弱性がブラインドSQLインジェクションに利用できるわけではありませんが、
参考URL
- SQL Injection Cheatsheet
- http://
ferruh. mavituna. com/ makale/ sql-injection-cheatsheet/ - Blind SQL Injection (PDF)
- http://
www. spidynamics. com/ whitepapers/ Blind_ SQLInjection. pdf