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)。
(次ページ、「SQLインジェクションへの対策」に続く)
この連載の記事
-
第11回
TECH
今どきのウイルスに対抗する方法を教えてください -
第10回
TECH
ユーザー認証でなにができるのですか? -
第10回
TECH
指紋や顔型でユーザー認証をする理由とは? -
第9回
TECH
電子証明書がなぜ必要か知っていますか? -
第8回
TECH
ファイアウォールはどのように動くのですか? -
第7回
TECH
共通鍵暗号のメリットってなに? -
第6回
TECH
IP電話にはどのような危険がありますか? -
第5回
TECH
無線LANって本当に安全なの? -
第3回
TECH
Winnyは使ってはいけないのですか? -
第2回
TECH
不審なメールはなぜ開いてはいけない? - この連載の一覧へ