京セラコミュニケーションシステム株式会社
プロダクトサービス事業本部 技術顧問
徳丸 浩

 Webサイトは,そのサイト固有のサービスを提供するための機能を備えている。ショッピング・サイトなら,商品を紹介するためのカタログ機能や,ショッピング・バスケット機能,決済機能などを備えているだろう。これらの機能を実現するアプリケーションにセキュリティ上の不具合(バグ)が残っている場合がある。これをWebアプリケーションのぜい弱性という。

 バグの出方が多様であるように,Webアプリケーションのぜい弱性も多様なバリエーションがある。このうち,Webサイトの改ざんに直接結びつくぜい弱性としては以下が代表的なものとなる。

  • SQLインジェクション
  • OSコマンド・インジェクション
  • ファイル・アップロード機能のぜい弱性

これらのうち,現実に問題が数多く発生しているSQLインジェクションについて,以下で詳しく説明することにしよう。

■SQLインジェクションによる改ざん
 SQLインジェクションとは,SQLに引き渡すパラメータにSQL断片を混入させることにより,SQL文の意味を変更したり,新たなSQLを実行する手法である。SQLインジェクションを用いてWebサイトの改ざんを行うには,以下のような手順による。

  • SQLインジェクションによりDB内のテーブルや列の情報を取得する
  • SQLインジェクションにより,テーブルの値を書き換える

ここでは,テーブルの値を書き換える例を以下に示そう。一例として,エラー・メッセージを取得するような以下のSQLを想定する。言語はPerlを想定している。

SELECT ERRMSG FROM ERRINFO WHERE ERRNO=$n

例えば$n=243の場合は,実行されるSQLは以下のようになる。

SELECT ERRMSG FROM ERRINFO WHERE ERRNO=243

ここで変数$nとして以下の値が指定された場合どうなるか。

243; update usermaster set username=username + '<iframe src="http://www.tokumaru.org/"></iframe>'

この場合,以下のSQLが実行され,本来のSQLに続けて,UPDATE文が実行される。

SELECT ERRMSG FROM ERRINFO WHERE ERRNO=243; update usermaster set username=username + '<iframe src="http://www.tokumaru.org/"></iframe>'

後から追加したSQLの意味は,usermasterテーブルのusername列の内容の末尾に,「<iframe…」という内容を追加するものである。このようにして,SQLインジェクションによるWebサイトの改ざんは行われる。ただし,一連の手順が成立するにあたり,いくつか条件がある。

  • WebサイトにSQLインジェクションぜい弱性があること
  • クロスサイト・スクリプティングぜい弱性があること
  • DBのテーブル構造が取得可能であること
  • テーブルに対する更新権限があること
  • 利用しているDBがSQLの複文を許容していること

これらの条件から,以下のような対策が必要となる。