SQLインジェクション攻撃に対抗する際に,最も重要なのは企業のWebサイトの対策だ。サイト開発時にWebアプリケーションにSQLインジェクションのぜい弱性を作らないことが第一である。

 そのためにはWebアプリケーションがデータベースに不正なSQLを渡さないよう,Webサイトの実装を工夫する必要がある。例えばデータベースでバインド機構を利用する,データベースに渡すSQLに適切なエスケープ処理を施すといった対策が有効だ(図1)。

図1●SQLインジェクション対策<br>対策としては,Webアプリケーション開発時の対策が最も重要となる。
図1●SQLインジェクション対策
対策としては,Webアプリケーション開発時の対策が最も重要となる。
[画像のクリックで拡大表示]

 こうした対策を実施するのは,技術的にはさほど難しくない。しかし,インターネット上にはSQLインジェクションのぜい弱性を残したWebサイトが今でも多数存在する。試しにSQLインジェクション攻撃を受けたWebサイトに特有の文字列をGoogleで検索してみると,改ざんされたWebサイトが多数検出できる(図2)。これは,対策の必要性や手法をすべての開発者に教育するのが非常に難しいことの現れだろう。現在ではWebの開発の需要が高まる一方で,開発者は日々,少ない予算や短い納期と闘いながらWeb開発に携わっている。

 こうした現状を考えると,開発者を教育するというアプローチには限界がある。開発環境からセキュアなものを導入した方が,対策として有効だろう。最新のプログラミング言語やフレームワークには,セキュリティを考慮して,ぜい弱なコードを生まない仕組みが組み込まれていることが多い。Web開発時に,これら新しい開発環境を採用して,開発者の負荷を軽減するのも手だ。

 SQLインジェクション対策として,IDS/IPS(侵入検知/防御システム)やWAF(Webアプリケーション・ファイアウォール)を導入している企業もあるかもしれない。しかし,これらは根本的な対策ではなく,効果も限定的だ。例えば,ごく最近に発見されたCookieを悪用する新手のSQLインジェクション攻撃は,IDS/IPSやWAFの防御をすり抜けてしまう(関連記事)。

 既に開発済みのWebサイトに関しては,SQLインジェクション攻撃を受けていないかどうか,Webサーバーのログを調べるところから始めてほしい。攻撃の痕跡が見つかった場合,Webサイトの開発者やセキュリティ・ベンダーに相談したうえで,Webサイトの実装を再検討するのが望ましいだろう。

 攻撃を受けた際,経営者としてはビジネスへの損害が最も気になるところだ。そのため攻撃を受けた事実がわかっても,最低限の被害調査とWebサイトの修復を済ませただけで,早期にWebサイトの運用を再開しようとする企業がある。特に,情報漏えいなどの被害が顕在化していない場合は,このような対応を取るケースが多い。

 しかし,「本当に情報漏えいはなかったのか」は,Webサイトを徹底的に再調査しないと分からない。さらに,一度SQLインジェクションの被害に遭ったWebサイトには,他にもぜい弱性が残っている可能性が高い。攻撃を受けた企業は,中途半端な対策に終始せず,自社サイトのセキュリティを,責任を持って検証すべきだろう。

 企業間でセキュリティ情報を共有することも有効だ。例えば企業内にインシデント・レスポンスを専門にする部隊「CSIRT」を組織し,他社のCSIRTと協力しながら脅威に対抗すれば,もっと有効な対策が取れるはずである。しかし,今のところCSIRTを組織している企業はほんのわずかなのが現状だ。

図2●改ざんされたWebサイトはまだ多数インターネットに残っている<br>SQLインジェクション攻撃を受けたWebサイトに特有の文字列でGoogle検索を実行した結果,多数のWebサイトが検出された。改ざんされたまま,管理者が気づかずに放置されているWebサイトがたくさんあることがわかる。
図2●改ざんされたWebサイトはまだ多数インターネットに残っている
SQLインジェクション攻撃を受けたWebサイトに特有の文字列でGoogle検索を実行した結果,多数のWebサイトが検出された。改ざんされたまま,管理者が気づかずに放置されているWebサイトがたくさんあることがわかる。
[画像のクリックで拡大表示]

 一般的なエンドユーザー側の対策としては,基本的なマルウエア対策の徹底が重要だ。まず,マルウエア対策ソフトやパーソナル・ファイアウォールを導入すること。そして,使用頻度の高いソフトウエアの修正プログラムを欠かさずに適用しておくことである。この時,OSやWebブラウザだけでなく,Web閲覧に必要な各種アドオンや,アプリケーション・ソフトウエアのぜい弱性にも気を付けよう。具体的にはActiveXやFlash,Officeソフトや圧縮・解凍ソフト,PDF関連ソフト,Media PlayerやQuickTimeなどのマルチメディア・ソフトである。

 WebブラウザでJavaScriptを無効にしておくのも良い。例えば,Firefoxには「NoScript」というエクステンションがある。これを使えば,WebサイトごとにJavaScriptを禁止することができる。

 オンライン・ゲーム・ユーザーの心得としては,まず規約で禁止されているRMT行為には関わらないことだ。そして,万が一アカウント盗難の被害に遭った場合は,泣き寝入りしないことも重要だろう。オンライン・ゲームのアカウントには明らかに金銭的価値があるにもかかわらず,被害者はゲーム運営事業者や警察など届けでないことが多いのだ。ゲームという仮想世界の盗難は,プレーヤにとっては現実の金銭的被害として認識しにくく,警察にとっては前例の少ない事件なので対処に困る。攻撃者はこうした人間心理を狙って,犯罪行為を追求されにくいオンライン・ゲームに敢えて照準を定めているのだろう。

 とはいえ,被害に遭ったユーザーの中には,Webサイトで事件のいきさつについて情報を公開している人もいる。被害者同士で情報を交換して事後対策を練るのも一つの手だ。それと同時に,オンライン・ゲーム事業者側でも警察と協力するなどして,被害に遭ったユーザーの救済策を改めて考える必要があるのではないだろうか。

松木 隆宏(まつき・たかひろ)
ラック サイバーリスク総合研究所 先端技術開発部
セキュリティ事業を手がけるラックの研究員。ぜい弱性検査,ネットワーク・セキュリティに関するコンサルティング業務を経て,現在ではマルウエア対策に関する研究開発に従事する。ソフトウエア開発者の視点からセキュリティを考え,安全なシステム開発手法を研究している。
この記事は,『日経コミュニケーション』2008年9月15日号 pp.50-55に掲載された内容に加筆・修正したものです。