都心のビルの谷間にあるセキュリティ相談室は底冷えする。室長の四谷博士と市谷君は,Webアクセスしながら相談が来るのを待っていた。

市谷:南国ハワイの旅ですって。暖かそうですよねえ。

室長:旅行会社のツアー申し込みページじゃな。Webで空き状況が確認できて申し込みもできる。ううむ…。

市谷:何うなってるんですか?

室長:…。このような便利なWebサイトは,往々にしてセキュリティ上の問題を抱えていることがあるのじゃよ。

 今どきのWebサイトは,あらかじめ作っておいたHTML文書をWebページとしてWebブラウザに送ってくるとは限らない。ちょっと気の利いたWebサイトは,最新の状況やユーザーの入力に応じて,その時点で最新のWebページを作り上げて送信する。空席などの最新状況を表示したり,商品を注文したり,書き込んだ内容をWebページに反映したりする。

 このようなWebサイトでアクセスのたびにWebページを生成するのがWebアプリケーション。Webアプリケーションの多くは,データベースと連携して,データベースの内容を表示したり更新する。

連携するデータベースの情報が流れる

 Webアプリケーションは,流出したり改ざんされたりしては困る情報を扱うことが増えている。例えば,発注に伴う顧客情報,商品の価格や在庫といった,悪意を持つクラッカにとっては,狙いがいがある情報だ。

 一方でWebアプリケーションには,往々にして攻撃されやすい弱点が存在する図1)。深刻なのは,情報を流出させたり改ざんされたりする「SQLインジェクション」攻撃に対する脆弱性だ。SQLインジェクションとは,Webアプリケーションに連携しているデータベースを勝手に操作する攻撃である。この脆弱性があると,大切に保管しなければならない個人情報や業務に直結する秘密情報が取り出されたり,改ざんされてしまったりする。

図1●Webアプリケーションへの攻撃は被害が深刻
図1●Webアプリケーションへの攻撃は被害が深刻
ここ2年ほどの流行はSQLインクジェクション。簡単に攻撃できるようになっているのに、対策は思ったほど進んでいない。いったん被害に逢うとWebサーバーと連携するデータベースが操作されてしまうので深刻だ。 [画像のクリックで拡大表示]

 一方で,誰でもSQLインジェクションが簡単にできる「SQLインジェクション・ツール」というものが出回っている。攻撃する側のハードルは下がっているのに対策は進まない。これが現状なのである。

室長:というわけなんじゃ。

市谷:だといって,この旅行会社のサイトが危ないとは言えませんよね。

室長:そう思うじゃろうが…。

市谷:ちょっと待ってください。お客様が見えたみたいです。

桃谷:ごめんください,ニコニコ旅行社の桃谷と申します。あ!

市谷:どうしました?

桃谷:これウチのWebサイトなんですよ…。このWebサイトに個人情報流出の危険があると,メールで指摘されたんです。Webアプリが危ないとか…。それで相談にきたわけです。

市谷:そのメール,真に受けていいんですかねえ。

室長:…う,うむ。ちょっと実験してみてもいいかな?

桃谷:どうぞ。

室長:この入力欄にほいほい,と。で,クリックすると…。

桃谷:えっ! お客様情報がずらりと!

市谷:これ,まずくありません?

桃谷:どうしてこんなことが起こるんでしょうか?

室長:それはじゃ…。

 データベースと連携するWebサイトは,Webブラウザからのアクセスを受け付けるHTTPサーバーと,Webアクセスからの入力内容を処理するWebアプリケーション,情報を保存するデータベースから成るのが一般的だ(図2)。

図2●SQLインジェクションはデータベース操作コマンドを送り込む攻撃
図2●SQLインジェクションはデータベース操作コマンドを送り込む攻撃
WebアプリケーションのほとんどはWebブラウザからの文字列をデータベース操作にそのまま使う。そのことを利用してデータベースを勝手に操作する。 [画像のクリックで拡大表示]