全1382文字

 Webサーバーの脆弱性としては、「SQLインジェクション」脆弱性が代表的だ。Webサーバー上で動作するWebアプリケーションの脆弱性である。

 Webサーバーの多くはデータベースサーバーと連携している。Webページの表示に必要な情報はデータベースに格納しておき、ユーザーの要求に応じて必要な情報をその都度検索して取り出す。それを基に動的にWebページを生成してユーザーに送信する。このデータベースは、SQLという言語で記述された命令文で制御される。

悪質なSQL命令を送り込む

 SQLインジェクションの脆弱性を悪用する攻撃では、Webサーバーと連携しているデータベースに、通常送られるデータに見せかけて、悪質なSQL命令を送り込む(図1(1))。

図1●SQLインジェクション脆弱性を悪用した攻撃のイメージ図
図1●SQLインジェクション脆弱性を悪用した攻撃のイメージ図
Webサーバー(Webアプリケーション)にSQLインジェクション脆弱性があると、本来は許可しないようなSQL命令をデータベースに送信してしまう。その結果、データベースに保存されている重要なデータを盗み見されたり、改ざんされたりする。

 通常のWebアプリケーションは、悪質なSQL命令を送られてもデータベースに渡さない。だが、脆弱性がある(チェックが不十分な)Webアプリケーションは、そのままデータベースに渡してしまう(同(2))。

 SQLインジェクションを突く攻撃による被害は様々だ。まず、情報漏洩が考えられる。本人以外はアクセスできないはずの登録情報に、攻撃者がアクセスできてしまう。登録情報には、氏名や住所、電話番号だけでなく、クレジットカード番号といった重要な情報が含まれる可能性がある。

 データベースに保存された、Webページの「部品」を書き換えて、Webページを改ざんすることもできる。この手法を使って近年増えているのが、ユーザーを特定のウイルス配布サイトに誘導するスクリプトコードを仕込む改ざんだ。ウイルス配布サイトに誘導されると、Webブラウザーやプラグインの脆弱性を悪用するウイルスがダウンロードされて、感染する恐れがある。

チェックの不備を突く

 SQLインジェクション脆弱性を突いたWebページ改ざんを詳しく見てみよう。ここでは、ユーザーが入力したユーザーIDを基にユーザーの名前を表示する、動的なWebページを想定する。また、ユーザーのデータだけではなく、WebページのテンプレートとなるHTMLファイルもデータベースに保存されているとする。