第1回ではSQLインジェクションの仕組みについて、第2回ではSQLインジェクション攻撃が多発している背景について解説してきたが、現在でも多くのサイトがSQLインジェクション攻撃にさらされている状況は変わっていない。
こうしたSQLインジェクションの被害に、ユーザーが巻き込まれないようにする方法について考えてみよう。
● 不正なスクリプトの実行を防ぐには、修正パッチを忘れずに適用
SQLインジェクションはサーバー側の問題である以上、まずはサービスを提供している会社の側が脆弱性を修正しなければ、問題は解決しない。
では、ユーザー側で取れる対策にはどのようなものがあるだろう。SQLインジェクションでユーザーが受ける被害としては、「Webサイト経由で悪意のスクリプトを読み込まされる」「個人情報が流出する」の2つが主なので、この2つを防ぐ方法を考えてみる。
まず、悪意のスクリプトを読み込まされる被害に関して、最も確実な対策は「OSやアプリケーションの脆弱性をふさいでおくこと」だ。OSやWebブラウザなどには、悪意のあるスクリプトが実行されないための制限が設けられているが、仕掛けられるスクリプトはこうした制限を回避するために、OSやアプリケーションの脆弱性を利用するからだ。
最近ではOSやWebブラウザだけでなく、各種のアプリケーションの脆弱性が悪用されている。中には、こんなマイナーなソフトの脆弱性を、と思うようなソフトの脆弱性までが駆使されて、悪意のスクリプトが作られている。マイクロソフトやアップル、アドビといったメジャーな企業の製品だけでなく、使用しているソフトはすべてをできるだけタイムリーに最新のものにすることが必要だ。
また、OSやメジャーなソフトに関しては、最近では情報が公開されてから短期間で、その脆弱性を突いた悪意のプログラムが出回ることがあるので、アップデートはできるだけ迅速に行なうことが重要だ。
ウイルス対策ソフトをPCにインストールしておくことも忘れないようにしたい。不正なスクリプトの実行を防ぐには、ウイルス対策ソフトは間違いなく効果的だ。SQLインジェクションによって仕掛けられた悪意のスクリプトが読み込まれたとしても、その先のスクリプトの実行は防ぐことができる。
|
制限付きサイトにアクセスを禁止したいサーバーの一覧を登録することで、不用意に悪意のサーバーにアクセスしてしまうことを防ぐことができる
|
また、スクリプトの配布などに特定のサーバーが使われていることがわかっている場合には、そのサイトへのアクセスを制限するといった手法もある。例えば、Internet Explorerの場合には、「制限付きサイト」にそのサイトを設定するといった方法だ。あるいは、企業などでプロキシサーバーやアクセス制限を行なえる製品を導入している場合には、そうしたサイトをアクセス禁止に指定することもできる。
SQLインジェクションに限らず、一度こうした攻撃に使われたサイトは、他の悪意の攻撃に使われることが多い。例えば、4月のSQLインジェクション攻撃に使われた悪意のツールを配布するサーバーは、過去にもオンラインゲームのアカウント詐欺に使われたサーバーが使用されていたといった報告もある。ニュースサイトなどで悪意のツールを配布しているサーバーの情報を入手したら、こうした措置を検討してみよう。
● 個人情報の流出を防ぐための決定打はない
では、個人情報が流出するのを避けるにはどうすればいいだろうか。例えば、なるべく個人情報はサイトに登録しないという方法もあるだろう。オンラインショッピングでの買い物時に、氏名や住所(配達先)、クレジットカードの情報を登録しておけば、次からは入力しないで良いといったサービスが提供されている場合があるが、できるだけそのようなサイトでの登録を控えるといった手段を取るわけだ。
ただし、SQLインジェクション攻撃を受けた場合には、データベースサーバー上にあるすべてのデータを悪意のユーザーに閲覧される危険がある。たとえユーザー登録をしていなくても、一度買い物をすればそのときに入力した氏名、配送先、カード情報などがログとして記録されているケースも考えられるため、それほど効果的な対策方法とは言えない。また、既にサービスの会員情報として登録されている氏名や住所などは、退会したとしてもデータベースから物理的に削除されない限りは、漏洩の危険性は残る。
結局のところ、SQLインジェクションによる被害、特にユーザー情報漏洩を防ぎたいと思っても、個人情報を入力する以上は確実な方法は存在しない。
あえて言えば、SQLインジェクション攻撃の被害に遭ったサイトは、しばらく利用しないということが用心としてはあるだろう。SQLインジェクション攻撃を行なうツールは、自動的に多くの脆弱性を試行するため、攻撃を受けた脆弱性とは別の脆弱性が発見される可能性もあるからだ。もちろん、被害に遭ったサイトの側では、サービスを止めて調査を行なうなど、徹底的な脆弱性対策を実施するはずだが、そうした調査の結果や実施した対策などを公表せず、すぐにサービスを再開するようなサイトの利用は避けた方がいいだろう。
● 根本的な解決のためには、サービス提供側が対策を
|
過去にSQLインジェクションによる被害を受けたサイトの例。このサイトでは、URLに不正なSQL文を埋め込むと詳細なエラーレポートを吐き出し、具体的にどのプログラムのどの部分でどんなエラーが起こったを表示していた。これではSQLインジェクション攻撃の手助けをしているも同然だ
|
冒頭でも述べた通り、SQLインジェクションはサービスを提供する側が対策しなければ、問題は解決しない。サービスを提供する企業などが、Webでのサービスに使用しているプログラムを見直し、SQLインジェクションの脆弱性をつぶしていくことが、最も必要な対策だ。
提供しているサービスで、そうした脆弱性が存在する可能性があるかどうかを、簡易的にチェックする方法がある。
これは手軽な方法だが、サイトのテキストエリアやURLに、シングルクオーテーション(')やセミコロン(;)を書いてみるというものだ。これらの記号は、SQL言語において特別な意味を持つ記号で、これらの処理が正しくできていない場合は、SQLインジェクション攻撃に対して非常に危険な状態になっていることを意味している。
例えば、「http://example.com/?userID=20'」のようにURLに記号を加えてみて、SQLサーバーのエラー文などが表示されるようであれば、非常に危険な状態だと言える。今すぐに対策を検討すべきだ。また、こうしたURLでアクセスした場合に、エラーメッセージとして「500 Internal Server Error」が表示される場合も、サーバーがこうした記号を正しく処理できていないことが考えられる。
もちろん、こうした簡易的な方法だけでなく、サービスを提供している企業はSQLインジェクション対策を徹底すべきだ。現在、SQLインジェクションによる改竄や情報流出が多いサーバーとしては、マイクロソフトのIISとSQL Serverという組み合わせが挙げられる。ただし、これはIISやマイクロソフトのSQL Server自体の脆弱性ではなく、その上で構築しているアプリケーションの脆弱性が狙われている。一度成功した手口が別のサイトにも利用されていることや、攻撃ツールの標的となっているといった側面が大きいと思われる。
マイクロソフトでも、「SQLインジェクション攻撃とその対策」というWebを公開して、管理者・開発者らに注意を喚起している。また、IPAでもSQLインジェクションへの注意喚起を行なっており、SQLインジェクション対策の資料を公開している。SQLインジェクション攻撃は依然として続いており、サービスを提供する企業にはこうした情報を活用するなどして、徹底的な対策を行なってほしい。
関連情報
■関連記事
・ マイクロソフト、SQLインジェクション攻撃への対策ページを公開(2008/04/30)
・ IPA、SQLインジェクション攻撃の急増をWeb管理者に注意喚起(2008/05/15)
( 大和 哲 )
2008/05/16 11:08
- ページの先頭へ-
|