HOME >> 情報セキュリティ >> 脆弱性対策 >> 知っていますか?脆弱性 (ぜいじゃくせい) >> 1. SQL インジェクション

1. SQL インジェクション

2007年7月12日 掲載

イントロダクション

A社Eコマース事業部ショッピング担当N氏は、今日も日課の自社コンテンツのメンテナンス中。
A社ではユーザ情報、履歴などをデータベースに保管していました。

善意の第三者 「お宅の会社の顧客情報がインターネットの掲示板で見られるようになっていますよ。」

N氏 「顧客情報が流出?」
「困ったな。研究所の博士に聞いてみよう。」
「どうして顧客情報が流出したんですか?」

博士 「ウェブアプリケーションの脆弱性を悪用されたようじゃな。」

“脆弱性”=ソフトウェア等におけるセキュリティ上の弱点

N氏 「脆弱性って…
不正アクセス等への対策はサーバホスティング業者でやってくれていますよね?」

博士
「サーバホスティング業者は、ウェブサイトのコンテンツをのせているウェブサーバを、管理・運用しているだけなんじゃ。」
「今回のように、あなたの会社自身で、開発したウェブアプリケーションは、あなたの会社が、アプリケーション開発段階で対策する必要があるんじゃな。」
「これは、SQLインジェクション攻撃をされてしまったようじゃな。」

“SQL”=Structured Query Language

N氏SQLインジェクション?」

“インジェクション”=“挿入する(injection)”の意味


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

博士
「SQLとは、データベースへの問合わせ(Query)命令文を、組立てて(Structured)、実行するためのコンピュータの言語(Language)のことじゃ。」
「データベースと連携したウェブアプリケーションに、問合わせ命令文の組み立て方法に問題があるとき、ウェブアプリケーションへ宛てた要求に、悪意を持って細工されたSQL文を埋め込まれて(Injection)しまうと、データベースを不正に操作されてしまう問題を、SQLインジェクションと呼ぶのじゃ。」
「これにより、ウェブサイトは個人情報などが盗まれたり、注文情報を書き換えられたりといった被害を受けてしまうのじゃ。」

N氏 「なぜこんなことが起きてしまうんですか?」


SQL インジェクションの具体的な攻撃例

博士 「例えば、SQL文で文字列を囲むための記号であるシングルクォート「’」に続いて、 「個人情報を表示」といった悪意を持って細工された問合わせ命令文が、ウェブサイトに送られたとしよう。」

攻撃者 「個人情報を盗んでやる!」

博士 「SQLインジェクションに対するセキュリティ実装が正しく行われている場合には、このシングルクォート「’」は、問合わせ命令文の中の普通の文字(「個」「人」・・・「示」)として処理されるんじゃな。」

攻撃のイメージ:問題のないウェブアプリケーション

攻撃者 「残念!」

博士 「ただし、セキュリティ実装が正しく行われていないと、シングルクォート「’」に続く「個人情報を表示」という問合わせ命令文がそのまま、データベースへの命令として実行されてしまうんじゃよ。」

攻撃のイメージ:問題のあるウェブアプリケーション

個人情報の漏洩以外の脅威も存在します。

博士 「つまり、ここにこういう入力をしてこういうことをすると…。」

情報漏洩のイメージ

N氏 「うわ、見られた!」

自身で管理していないウェブサイトに対する攻撃は、不正アクセス禁止法などの法律に触れる可能性があります。

博士 「対策は、IPAのウェブサイトの脆弱性ごとの対策ページを参照するのじゃ。」