研究テーマ:SQL Injection Attacks And Defense

研究テーマ:SQL インジェクション攻撃と防御
情報工学科
4年
及川
隼平
SQLインジェクションとは?
別名「ダイレクト SQL コマンドインジェクション」とも呼ばれる。SQL とは、
データベースを操作するために一般的に使われている言語である。SQL インジ
ェクションは、アプリケーションのセキュリティ上の不備を意図的に利用し、
アプリケーションが想定しない SQL 文を実行させることにより、データベース
システムを不正に操作する攻撃方法のこと、またはその攻撃を可能とする脆弱
性のことをさす。
攻撃の仕組み
SQL インジェクション攻撃の手法は、Web コンテンツ (Web サーバー) から接
続しているデータベース サーバーに、管理者・開発者の意図しない特別な細工を施
した SQL 文を処理させる事でコンテンツの改ざんを行う。多くの場合、Web 閲覧者
にマルウエアの侵入を試みるプログラム (スクリプト) が書き込まれる。
SQLインジェクションの脆弱性を持ったアプリケーションのよくある例
SELECT*FROM user WHERE uid=’$uid’ AND pwd=’$pwd’
これは、ユーザー名とパスワードを入力してログインする処理の一部である。
uid と pwd の組み合わせが、データベースのものと一致すると認証するという
仕組みだとする。ユーザーからの入力は、ユーザー名が$uid、パスワードが$pwd
に渡されるものとする。ここで、以下のような入力があった場合の挙動を考え
てみる。
$uid
$pwd
:
:
ueno
‘ OR ‘A’=’A
これを入力すると SQL は以下のようになる。
SELECT*FROM user WHERE uid=’$ueno’ AND pwd=’’ OR ’A’=’A’
これが実行されると OR の後は常に真なので、パスワードが異なるにもかか
わらず認証されてしまうという現象が起きてしまう。
対策方法
この問題の場合、入力値には半角英数字のみを許可するよう制限する方法や、
以下の例のように SQL で使える特殊文字をエスケープして対処するという方法
が一般的になっている。
‘
¥
⇒
⇒
‘’
¥¥
この対策自体の方向性は正しいのだが、SQL インジェクションを理解してい
ないため、対策が漏れている場合があり、セカンドオーダーSQL インジェクシ
ョンといった問題に発展することもある。
参考文献:SQL INJECTION ATTACKS AND DEFENSE
著/JUSTIN CLARKE