2023.04.27

セキュリティ対策

SQLインジェクション対策を初心者向けにわかりやすく解説!被害事例や対策法をチェック

Webサービスに対する攻撃手法の一つに「SQLインジェクション」があります。言葉では聞いたことがあるけれど、具体的にどういうものを指すのか、どのような対策が必要なのか、あまり詳しく理解できていない人も多いのではないでしょうか。そこで本記事では、SQLインジェクションとは何か、SQLインジェクションによって発生しうる被害事例や対策方法について解説していきます。また、SQLインジェクションと混同しやすいクロスサイトスクリプティングとの違いについても解説しています。ぜひ参考にしてください。

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

「SQLインジェクション」とは、プログラムの命令言語の一つである「SQL」の一部に不正な文字列を注入(インジェクション)することで、本来とは異なる命令をプログラムに実行させてしまう攻撃のことです。多くのWebアプリケーションでは、SQLを利用してデータベースの操作や定義を行っています。例えば、ユーザーが入力した情報をデータベースから照会してサイトにログインすることや、データの追加や削除などが行えます。ところがWebアプリケーションのセキュリティ上に不備がある場合、第三者によって意図的に本来想定していないSQL文を入力されてしまう可能性があります。その結果、個人情報の漏洩や重要データの改ざんなどの重大な被害に遭ってしまうのです。このようなWebアプリケーションの脆弱性や、脆弱性を利用する攻撃をSQLインジェクションと呼びます。

クロスサイトスクリプティングとの違い

SQLインジェクションと同様に、Webアプリケーションの脆弱性を利用した攻撃方法として「クロスサイトスクリプティング(XSS)」があります。クロスサイトスクリプティングとは、Webアプリケーションに不正なスクリプトコードを入力することで、不正な動作を実行させたり、ユーザーから情報を抜き取ったりすることを目的とした攻撃です。

悪意を持った攻撃者が脆弱性のあるWebアプリケーションに罠を仕掛け、Webアプリケーションを訪問した利用者を別のサイトに遷移(クロスサイト)させて、悪質なスクリプトを実行させることからこの名前で呼ばれるようになりました。しかし現在では、クロスサイトスクリプティングの手口も進化しており、必ずしも別のサイトに誘導させるわけではなく、元のサイトから直接攻撃を仕掛けて利用者から情報を抜き取る場合もあります。

SQLインジェクションは、Webアプリケーション内のデータベース自体を操作して情報を抜き取ろうとする攻撃であるのに対し、クロスサイトスクリプティングはWebアプリケーションを利用したユーザーの端末上で不正な動作を実行させる攻撃です。どちらもWebアプリケーションの運営者が複数のセキュリティ対策を講じることで、リスクを減らす必用があります。

SQLインジェクションの仕組み

それでは、SQLインジェクションはどのような仕組みで発生するのでしょうか。具体的に解説していきます。

前述したとおり、多くのWebアプリケーションではデータベースの操作や定義にSQL文を使用しています。例えば会員制Webサイトのログイン画面では、ユーザーが入力したログインIDやパスワードなどの情報から、一致するデータがあればログインに成功し、一致するデータがなければログインに失敗するといったSQL命令を組み立てています。また、ECサイトなどではユーザーが入力した注文番号を元に、データベースから注文情報を取得するための命令が実行されているのです。

このシステムを利用して、悪意のある攻撃者が入力欄に不正な命令を実行するSQL文を入力して送信します。すると、本来実行するはずだったSQL命令が改変され、意図していない別の命令が実行されてしまうのです。例えば第三者が意図的に、パスワードなしでのログインや、全ての注文データの閲覧・削除などを行うことができてしまいます。

SQLインジェクションの被害事例

SQLインジェクションの攻撃によって、具体的にどのような被害が生じるのでしょうか。被害の事例を把握しておけば、事前に対策を講じやすくなります。ここでは、SQLインジェクションによる被害事例を4つ紹介します。

Webページの改ざん

SQLインジェクションによって管理者用のログイン情報が盗み出されると、Webページ自体が悪意のある攻撃者によって改ざんされてしまう恐れがあります。その結果、マルウェアに感染するようなデータが仕込まれたり、悪質なサイトに誘導するよう仕向けられたり、サイト自体が悪質な罠にはめるための踏み台として利用されてしまうのです。こうした被害に遭うと、サイトを一時閉鎖せざるを得ないだけではなく、サイトを利用したユーザーまでウイルスの危険性にさらしてしまうことになります。

個人情報、機密情報の漏えい

企業のデータベースで管理している顧客の個人情報や、会社の機密情報を狙った事例も多く見られます。SQLインジェクションによる不正な操作で、本来は公開されるはずのないデータが第三者によって読み出されてしまいます。これにより、企業の重要な機密情報や個人情報が盗み見られ、流出されてしまう恐れがあるのです。

アカウント情報の流出

データベースに登録されているアカウント情報が流出されてしまった事例もあります。SQLインジェクションによって、アカウントに不正ログインするだけではなく、データベース自体に登録されている顧客のアカウントリストを抜き取ることも可能です。その結果、複数人分のメールアドレスやパスワードなどの個人情報が流出し、第三者によってアカウントが不正利用されてしまう被害があります。

クレジットカード情報の漏えい

ECサイトなどに登録されている顧客のクレジットカード情報を狙った被害も増加傾向です。ECサイトでは、顧客の氏名や住所、クレジットカードなどの個人情報をデータベース上で管理しています。SQLインジェクションの攻撃を受けると、こうしたデータベースに不正にアクセスされ、情報を抜き取られてしまいます。これによって顧客のクレジットカード情報が漏えいし、悪用される被害につながるのです。

SQLインジェクションの対策法

SQLインジェクションによる具体的な被害がわかったところで、こうした被害を受けないためにはどのような対策をすればよいのでしょうか。最後に、SQLインジェクションの具体的な対策方法について解説していきます。

入力値の制限

SQLインジェクションは、検索ボックスやフォームに本来意図していない命令を持ったSQL文が入力されることで発生します。そのため、検索ボックスやフォームに入力する文字が「数字のみ」というように限定されている場合は、規定する文字以外を入力できないようにあらかじめ制限することで対策が可能です。例えば、規定されている以外の文字を入力できないようにしたり、規定外の文字が使用されていた場合は処理を実行せず再入力を促すメッセージを表示したりすることで、不正な命令の実行を事前に防げます。

エスケープ処理やサニタイジングの実施

エスケープ処理やサニタイジングとは、特別な意味を持つ記号や文字列を別のものに置き換える処理のことです。これらの処理を行うことで、第三者が意図的に改ざんしようとして入力したSQL命令文を意味のない記号や文字列に変換し、攻撃を無効化することができます。また、エスケープ処理やサニタイジングは、クロスサイトスクリプティングなどの他の入力フォームを利用した攻撃への対策にも繋がります。そのため、入力操作を必要とするWebアプリケーションを運用する上では必須の対策ともいえるでしょう。

データベースのアカウント権限制限

実際にSQLインジェクションによる攻撃を受けてしまった際に、被害を最小限に抑える対策としてアカウントの権限を必要最低限に制限しておくこともおすすめします。なぜなら必要以上のことができるようになっていると、それだけで悪用されるリスクが高まるためです。例えば情報の漏洩やデータの全削除など、本来実行する予定のないSQL命令文をあらかじめ処理しないように制限をかけておくことで、もしも第三者に攻撃を仕掛けられた場合でも攻撃を実行させないことが可能です。

データベースのログ監視・解析の実施

被害を最小限に抑える対策として、データベースサーバーのログを監視・解析することも有効です。定期的にデータベースサーバーを監視・解析することで、普段使用していないSQL文が送信されていないか、データが書き換えられたりしていないか、第三者による不正な操作をいち早く察知することができます。そのため、被害が広がる前に素早い対策を講じることに役立ちます。

セキュリティソフトWAFの導入

Webアプリケーション用のファイアウォールであるWAFを導入した対策方法もおすすめです。WAFは、SQLインジェクションやクロスサイトスクリプティングを含む、Webアプリケーションの脆弱性を狙った様々な攻撃から総合的に守ってくれるセキュリティ対策ソフトです。WAFではWebアプリケーションへのアクセスのパターンを集めたシグネチャを用いて、ユーザーが入力した内容に攻撃パターンが含まれていないか、ユーザーへのレスポンスに本来流出しないはずのデータが含まれていないか、などの検知を行ってくれます。近年ではクラウド型のWAFサービスも登場し、手間やコストを抑えながら最新のセキュリティ対策を導入できるようになっています。

まとめ

SQLインジェクションとは、Webアプリケーションのデータベースに不正なSQL文を注入することで、本来予期していない操作を実行させる攻撃手法です。Webアプリケーションのセキュリティに問題があると、SQLインジェクションによる攻撃を受けて、会社の機密情報や顧客情報の流出、Webページの改ざんやデータの書き換えが行われてしまうリスクがあります。こうしたリスクを負わないためにも、入力値やアカウント権限の制限や、エスケープ処理などのセキュリティ対策を行って不正なSQL命令を実行させないことが大切です。また、WAFなどのセキュリティソフトの導入も検討してみるとよいでしょう。

SQLインジェクションによって重要なデータが抜き取られたり書き換えられたりすると、自社だけではなく、取引先や顧客までも巻き込む重大な被害に及ぶ危険性があります。ぜひ、この記事で正しい知識を身に着けて、被害に遭わないための対策を練ってください。

Facebook