このページの本文へ

前へ 1 2 次へ

セキュリティの素朴な疑問を解く 第4回

Q&A形式でセキュリティの基礎を学ぼう

SQLインジェクションやXSSって何されるの?

2009年06月03日 09時00分更新

文● 伊藤玄蕃

  • この記事をはてなブックマークに追加
  • 本文印刷

Q.SQLインジェクションはどのような攻撃ですか?

A.Webアプリケーションが持つ欠陥や仕様上の問題点を利用した攻撃です。

狙われるWebサイト

 「SQLインジェクション」は、日本では2005年ごろからWebサイトの攻撃手段として使用されはじめた。ワコールオンラインショップの個人情報漏えい(2005年11月)などのWebサイト攻撃事件にも使用され、情報セキュリティの専門家だけでなく、一般にも名前を知られるようになった。

 SQLインジェクションを簡単に説明すると、Webアプリケーションの脆弱性を利用して、外部からデータベースの内容を不正に操作する攻撃である。具体的には、Webサイトにウイルスを埋め込んで閲覧したユーザーのPCに感染させたり、他のユーザーのクレジットカード番号といった個人情報を表示させて盗み出してしまう。

 そして、2008年3月頃から世界中でこのSQLインジェクション攻撃によるWebサイトの改ざんが多発している。日本国内でも、インターネットを介して発生するセキュリティ情報を発信しているJPCERT/CCから、「SQLインジェクションによるWebサイト改ざんに関する注意喚起」が出されたにもかかわらず、トレンドマイクロのWebサイトの改ざんやネットショップのサウンドハウスの個人情報漏えいなど、多数のWebサイトが被害に遭っている。

 また、SQLインジェクション攻撃によってWebサイトを改ざんし、閲覧者をウイルスに感染させてしまうスクリプトを埋め込むワームも確認されている。

SQLインジェクションとは?

 そもそも、SQLインジェクションのSQL(Structured Query Language)とは、データベースを操作するためのコンピュータ言語である。ショッピングサイトなどの多くは、これを利用して登録者の情報をやり取りしている。具体的にはWebサーバのWebアプリケーションは、ユーザーが入力した情報を基にSQL文を組み立てる。そして、そのSQL文によりデータベースにデータを追加したり、検索やテーブルの更新などを行なっている。このとき、Webアプリケーションがセキュリティ的に無防備であると、ブラウザから入力された「悪意のあるSQL文」をそのままデータベース操作の一部に注入(Injection)する可能性がある。

 具体例を見てみよう。ブラウザから入力された「ユーザーID」に該当するユーザーの情報を、顧客テーブルから取り出して表示するWebアプリケーションを考えてみる。このWebアプリケーションは次のようなSQL文を生成する。

SELECT * FROM 顧客テーブル WHERE userID = '(入力値)';

 通常のユーザーは『0001』などの値を入力する。しかし、悪意のあるユーザーが『'0001' OR '1' = '1'』という文字列を入力してきた場合、Webアプリケーションが生成するSQL文は以下のようになる。

SELECT * FROM 顧客テーブル WHERE userID = '0001' OR '1' = '1';

 このSQL文の意味は、『「userID=0001」または「1=1」の条件が成立するユーザーの情報をよこせ』である。しかし、「1=1」はつねに正しいため、この条件は全ユーザーに対して成立してしまう。そこで、このSQL文の結果を受けた脆弱なWebアプリケーションは、顧客テーブルのすべての情報を表示してしまう(図1)。

図1 SQLインジェクション

(次ページ、「SQLインジェクションへの対策」に続く)


 

前へ 1 2 次へ

カテゴリートップへ

この連載の記事