SQLインジェクションによる個人情報漏洩

(1/1)
SQLインジェクション
SQL インジェクション(SQL injection)による Web サイトからの個人情報の漏洩事故が増えています。
その背景には、SQL インジェクションという言葉は知っていても、具体的な対策を知らないサイト運営者や Web 技術者がいるためと考えられています。
御社のサイトは大丈夫ですか?

【事例】SQLインジェクションによる個人情報漏洩事件

2005 年(平成 17 年)5 月から 6 月にかけ、SQL インジェクションによる個人情報漏洩事件が発生し、社会問題となりました。
その後、対策がとられ、2009 年(平成 21 年)4 月の段階では 21 件と減少していましたが、その後増加に転じ、7 月には 534 件とわずか 4 カ月で 25 倍まで膨れあがりました。
価格.com 価格比較サイト
2005 年(平成 17 年)5 月、ホームページが改竄され、一時閉鎖に追い込まれた。製品情報などを管理するデータベースが、SQL インジェクションによって乗っ取られたことが原因。また、22,511 件のメールアドレスが盗まれていた。

アデコ 大手人材派遣会社
2005 年(平成 17 年)1 月 18 日~6 月 2 日にサイトから仕事の申し込みなどをした約 6 万 1000 人の個人情報が流出した恐れがあると発表した。

@SOLA ショップ オンラインショップ
2007 年(平成 19 年)7 月、2 年にわたり外部より不正アクセスを受け、個人情報約 1 万 3000 件が流出していたことを発表。SQL インジェクション対策は実施されていたものの、脆弱性が存在したという。@SOLA ショップは閉鎖され、再開の目処は立っていない。

サウンドハウス オンラインショップ
2007 年(平成 19 年)3 月 11 日から 22 日まで、中国から SQL インジェクションによる攻撃を受け、顧客の個人情報が 9 万 7500 件流出した可能性がある。流出したデータは、氏名や性別、生年月日、メールアドレス、パスワードだが、そのうち 2 万 7743 件については、カード名義やカード番号、有効期限など含まれていた。

ナチュラム・イーコマース オンラインショップ
2008 年(平成 20 年)8 月 6 日、SQL インジェクションによる攻撃を受け、65 万 3423 件の個人情報(ID、パスワード、氏名、メール・アドレス、住所、電話番号など)が流出した可能性があると発表した。漏洩した顧客マスター・データベースには 8 万 6169 件のクレジットカード情報が登録されていたが、下 4 桁は登録されないようになっていたという。

ゴルフダイジェスト・オンライン
2008 年(平成 20 年)9 月、SQL インジェクション攻撃を受け、10 日間にわたってサイトを閉鎖した。個人情報漏洩はなかったとされるが、メールマガジンに不正な URL が埋め込まれ、URL をクリックしたユーザーはマルウエアに感染する危険性があった。

SQLインジェクションとは何か

データベースはSQL文と呼ばれる命令を受け、登録/検索/閲覧を行い、その結果を呼び出したシステムに返します。
SQL インジェクションとは、特殊な SQL 文を与え、データベースを不正に操作する攻撃、またはその攻撃を可能にする入力値の未チェックの脆弱性を指します。ダイレクト SQL コマンド・インジェクションと呼ばれることもあります。

たとえば、会員 ID とパスワードによるログイン処理では、データベースが SQL 文によって入力された ID とパスワードを検索し、両方が一致するレコードが存在するかどうかを調べます。
ここで、会員 ID を変数 $id、パスワードを変数 $pwdに入力し、以下の SQL 文によって、テーブル USER_LIST を検索する場合を考えます。

$login = select * from USER_LIST where user='$id' and password='$pwd'


ここで、$idが pahoo、$pwdが pass ならば、この SQL 文は、以下のようになります。

$login = select * from USER_LIST where user='pahoo' AND password='pass'


ところが、$idを空にし、$pwdに ';delete from USER_LIST where '0'='0 と入力された場合、SQL 文は以下のようになり、データベースの全レコードが選択、削除されてしまいます。(delete は削除する命令)

$login = select * from USER_LIST where user='' and password='';delete from USER_LIST where '0'='0'


また、そのサイトが利用しているデータベースの種類が明らかになれば、そのデータベースに固有のコマンドを使って、ID とパスワードをすべてダウンロードすることもできてしまいます。

SQLインジェクションへの対策は

多くの商用サイトは、データベースを利用したサービスを提供しています。とくにオンラインショップでは、会員や商品の情報を管理するために、データベースが必要不可欠です。
このため、事例で示したように、オンラインショップを狙う SQL インジェクションが増えています。オンラインショップが保有する個人情報の中にはクレジットカード番号が含まれている場合もあるので、犯罪者にとっては格好のターゲットなのです。

SQL インジェクションは、2004 年(平成 16 年)秋ごろから急増しています。
これは、2004 年(平成 16 年)10 月ごろに、中国でSQL インジェクションを用いた攻撃用ツールが出回ったためです。SQL インジェクション攻撃が可能な、脆弱性を抱えたサイトを調べるツールや、そういったサイトを簡単に攻撃できるツールなどが公開されたのです。
ツールの使い方さえ分かれば、誰でもSQL インジェクションが実行できるようになってしまったのです。
裏を返せば、こうしたツールの攻撃パターンを防ぐ対策をとればよいことになります。

まずは、入力された SQL 文を実行する前に、その内容をチェックすることが基本です。
具体的には、SQL 文として解釈される可能性がある特殊文字(シングルクォート、バックスラッシュ、等々)を他の文字に置換(エスケープ)することが必要最低限の対策となります。

さらに、入力値の性質に応じてチェックをかけましょう。
たとえば英数字のみからなるパスワード入力なら、正規表現 /[0-9|a-z|A-Z]+/ とマッチするかどうかチェックするのです。これ以外は不正な文字として再入力を促します。

また、Web サイトで他のスクリプト(Perl, PHP, VBScript など)を利用している場合、そのスクリプトとして実行される可能性がある文字列もエスケープさせておきましょう。クロスサイトスクリプティングの防止になります。

なぜSQLインジェクションを防げなかったのか

SQL インジェクションだけでなく Web アプリケーション全体に言えることなのですが、最近の Web アプリケーションは、C++や Java ではなくスクリプトで簡単に記述できるようになったため、経験の少ないプログラマが要件定義や設計も行わず「とりあえず動くプログラム」を書いてしまうケースが増えています。大手開発ベンダに発注したからといって安心はできません。
これは発注側にも問題があります。他社に先んじようと、安く早くサイトを立ち上げようとするあまり、セキュリティ対策が疎かになることが多いのです。

IPA の「ソフトウェア等の脆弱性関連情報に関する届出状況」(2009 年 4 月~6 月)によれば、SQL インジェクションは脆弱性報告の 12.5%を占め、3番目に多いことが明らかになりました。ちなみに、一番多いのはクロスサイト・スクリプティングの 44%、二番目は DNS 情報の設定不備で 28%でした。
また、脆弱性の原因として最も多いものは Web アプリケーションで、全体の 67%と突出しています。また、任意のスクリプトが実行できるものは全体の 49%もありました。

全体的な対策

SQL インジェクションをはじめとするセキュリティホールを防ぐには、セキュリティ設計とセキュリティ・テストに費用を惜しまないことです。できれば、プログラム製造会社に任せるのではなく、別のセキュリティ専門会社にセキュリティ・テストを依頼しましょう。
もしそれだけの予算がないなら、もう一度、2004 年(平成 16 年)秋以降のアクセスログを検査してください。Web サーバや DB サーバのログを調べることで、SQL インジェクションの兆候がつかめることがあります。
SQL インジェクションがあると、SQL関連のアクセス量が一気に跳ね上がります。データベース名やテーブル名を直接指定したアクセスも急増しているはずです。有効な対策を取ることができないなら、データベースを利用した Web サイトは作らないことです。

会員登録が目的なら、Web フォームからメールで御社の担当者へ送信するようにすれば済む話です。
この際、フォームからはメール・アドレスだけ入力してもらい、後日、担当者からメールで連絡を取るようにすれば、相手の存在確認もできてスマートです。

前述の価格.com 不正アクセス事件では、SQL インジェクションによって個人情報を抜き取られたため、警視庁は「利用者を特定の人に限り、部外者の侵入を防ぐ『アクセス制御機能』が不十分だった疑いが強いことが判明。不正アクセス禁止法の要件を満たさない可能性が高いと判断した」としています。このように、セキュリティが甘いと判断されると犯人の告訴は難しく、すべて会社の責任になります。くれぐれも注意してください。

参考サイト

(この項おわり)
header