SQLインジェクションとは?仕組みや対策方法、被害事例について解説

コラム
#IT基礎知識
#セキュリティ
sqlインジェクション

SQLインジェクションは1990年代からある古いサイバー攻撃の手法ですが、近年でも猛威を振るっています。攻撃はWebサイトの脆弱性を狙い、不正なSQL文を使ってデータベースを操作する方法を用います。
セキュリティの欠陥が狙われるため、事前に対策することで被害を防げるでしょう。

今回は、SLQインジェクションについて攻撃の流れや仕組み、リスクや実際の事例などを紹介します。また、具体的な6つの対策も紹介するので、ぜひ参考にしてみてください。

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

SQLインジェクションとは、Webサイトの脆弱性を狙って不正なSQL文を使い、データベースにアクセスするサイバー攻撃の1種です。インターネット普及期の1990年後半からある攻撃手法で、現在でも多くの被害をもたらしています。

SQLとは、データベースを操作する言語で国際標準化されています。基本的に、PHPなどのプログラミング言語でWebサイトを作っても、裏でデータベースを操作するのはSQLです。データベースにはWebサイトの情報が格納されており、SLQインジェクション攻撃に遭うとサイト情報を丸ごと盗まれる可能性があります。

SQLインジェクション攻撃の流れや仕組み

SQLインジェクションは、Webサイトの脆弱性(セキュリティの欠陥)を狙って行われます。ここではSQLインジェクションの攻撃の流れと仕組みについて、詳しく解説します。

攻撃の流れ

SQLインジェクションを行う攻撃者は、脆弱性のあるWebサイトを事前に選び、以下のような流れで攻撃を行います。

  1. 攻撃者がWebサイトの入力フォーム(検索窓など)に不正なSQL文を入力し送信
  2. データベースが受け取った不正なSQL文に従って命令を実行
  3. データベースからWebサイト上に命令内容の結果を表示

不正なSQL文の例としては、Webサイトに登録されている会員情報を開示させるものやデータを削除してしまうものなどがあります。

攻撃の仕組み

SQL文で命令すれば、データベースに格納しているデータを全て抽出することが可能です。例えば、ユーザー名を指定することで指定ユーザー情報が閲覧できるように作られているシステムの場合、ユーザー名を入力すると、以下のようなSQL文で指示が出されます。

SELECT * FROM user WHERE name = ‘A山A太’

このSQL文は、userのテーブルに格納されている「name」の値から、「A山A太」と一致する情報を全て抽出するものです。

SQLインジェクション攻撃では、以下のSQL文を使用して全てのデータの抽出を行います。

SELECT * FROM user WHERE name = ‘A山A太’ or ‘1’=‘1’

前半までは先ほどのSQL文と同じですが、「or」以降に注目ください。この文では、「‘1’=‘1’」が追加されています。「‘1’=‘1’」は当然「TRUE」となり、データベースに存在する全てのデータが抽出条件に該当してしまい、情報の漏洩を引き起こしてしまいます。

SQLインジェクションによって起こり得るリスク

SQLインジェクションにより引き起こされるリスクは、以下の2つです。

  • 情報漏洩
  • Webサイトの改ざん・データ消去

詳しく解説します。

情報漏洩

SQLインジェクションの一番のリスクは、情報漏洩です。

ダークウェブアイのランディングページ

Webサイトのデータベースからデータを抽出できてしまうため、ユーザー情報やIDなどを盗むことが可能です。クレジットカード情報が入力されたWebサイトの場合はカード情報も漏洩する危険性があり、二次被害に遭う可能性もあります。クレジットカード情報が漏洩した事例は以下の通りです。

また、不正に抽出した個人情報によりサイトやアプリケーションへ不正アクセスされ、アカウントが乗っ取られるケースも考えられ、被害の拡大が懸念されています。

Webサイトの改ざん・データ消去

不正なSQL文を使って、Webサイト内のデータを改ざんする事例が多発しています。また、サイト内のデータが消去され、サイト運営ができなくなるケースも報告されています。他にも、Webサイトにウイルスを仕込まれてしまい、閲覧した人が感染し被害が広がる事例があります。

セキュリティ大全資料ダウンロード

サイバー攻撃は日々進化しています。最新の脅威動向や対策を1冊にまとめた「セキュリティ大全」をお配りしています。セキュリティ担当者様に役立つ情報が満載なので、ぜひチェックしてみてください。

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

SQLインジェクションは古くからある攻撃手法ですが、現在でも猛威を振るっています。ここでは、近年に起きた以下のSQLインジェクションの被害事例を3つ紹介します。

  • 会員制サイトの個人情報の漏洩:積水ハウス株式会社
  • メールアドレス流出:株式会社サンリオエンターテイメント
  • フリマアプリの個人情報漏洩:株式会社SODA

会員制サイトの個人情報の漏洩:積水ハウス株式会社

2024年5月に、積水ハウスの会員制サイトがSQLインジェクション攻撃を受けました。これにより、約10万人分の顧客情報、約18万人分の積水ハウスの従業員や協力会社のスタッフのメールアドレスとパスワード情報が漏洩しました。漏洩した可能性がある人数は、顧客・従業員合わせて50万人以上にのぼります。

攻撃を受けた会員サイトは当時は運用されておらず、メンテナンスを怠っていたため、セキュリティに穴が開いていたと考えられています。
参照:住宅オーナー様等向けの会員制サイトにサイバー攻撃を受けたことによるお客様情報等の外部漏えいについて

メールアドレス流出:株式会社サンリオエンターテイメント

2021年、サンリオエンターテイメントのWebサイトがSQLインジェクション攻撃を受け、ファンクラブの会員もしくは仮会員登録者のメールアドレスが約4万6,000件流出しました。こちらの事例では、氏名・住所・生年月日・クレジットカード情報は流出しておらず、メールアドレスのみが流出しました。
参照:ホームページへの不正アクセス被害についてお詫びとお知らせ

フリマアプリの個人情報漏洩:株式会社SODA

2022年6月、株式会社SODAが運営するスニーカーの通販サイト「SNKRDUNK」に、SQLインジェクション攻撃が行われ、会員登録した約275万件の顧客の個人情報が漏洩しました。速やかなセキュリティ対策の実行と発表をしています。
参照:不正アクセスによるお客さま情報漏洩に関するお詫びとご報告

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

SQLインジェクションには、以下の6つの対策が有効です。

  1. プレースホルダーを利用したSQL文の組み立て
  2. エスケープ処理を行う
  3. エラーメッセージ表示を詳細にしない
  4. 文字の入力制限
  5. OSやアプリケーションを常に最新バージョンに保つ
  6. WAFの導入

詳しく解説します。

1.プレースホルダーを利用したSQL文の組み立て

プレースホルダーとは、SQL文の中で「変動する部分」のことです。プレースホルダーを指定しておくと、その部分がただの文字列として認識され、SQL文としての命令にはなりません。SQL文には特殊文字を使いますが、プレースホルダーを利用することでどれも無効化されるため、不正なSQL文の送信ができなくなり、攻撃を防ぐことができます。

2.エスケープ処理を行う

エスケープ処理(サニタイジング)とは、特定の文字や記号を無効化することです。例えば、SQL文で特別な意味を持つ「’」を「”」に変換する処理をすることなどです。無意味な文字列に変換することでSQL文が成立せず、攻撃を防げます。
サニタイズ・サニタイジングとは?必要な理由や行わないリスク、実施方法を解説

エスケープ処理は、クロスサイトスクリプティングなど他のサイバー攻撃の予防策としても有効です。
クロスサイトスクリプティングとは?攻撃の仕組みや対策方法を解説

3.エラーメッセージ表示を詳細にしない

Webサイト上でエラーが発生した場合、エラーメッセージが表示されることがあります。エラーが発生した場合は、詳細な内容を記載しないようにしましょう。詳細なエラーが表示されると、攻撃者にエラーの理由を知られてしまい、セキュリティを突破される危険性があります。エラー表示を設定する際には、詳細な内容は表示しないのが無難です。

4.文字の入力制限

SQLインジェクションは、入力フォームに不正なSQL文を入力して送信する攻撃方法であるため、入力フォームに入力可能な文字の制限を設定すると効果的です。例えば、半角数字以外は入力できないなどの制限です。郵便番号のような半角数字だけの入力など、想定している文字以外は入力不可と設定すれば、SQL文の特殊文字を使えなくなるため、攻撃を予防できるでしょう。

5.OSやアプリケーションを常に最新バージョンに保つ

利用しているOSやアプリケーションなどを常に最新の状態にアップデートすることも予防策になります。OSやアプリケーションは日々進化するサイバー攻撃に対応するため、脆弱性を放置しないようにアップデートを繰り返しています。ユーザー側がアップデートを怠ると、脆弱性をそのままにしてしまい、そこから攻撃を受ける可能性があります。OSやアプリケーション側からアップデートの通知が来たら、自分の情報を守るためにもすぐに対応しましょう。

6.WAFの導入

WAF(Web Application Firewall)とは、通信を監視し、遮断するセキュリティツールです。SQLインジェクションによる不正なSQL文の通信を検知して、通信を遮断する機能があります。また、不正な通信の監視をしているため、他のサイバー攻撃に対しても効果があります。
Webサイト・サービス運営で欠かせないセキュリティ対策WAFとは

サイバー攻撃に対しての強い味方になってくれるセキュリティツールの1つなので、導入を検討すると良いでしょう。

まとめ

SQLインジェクションとは、脆弱性のあるWebサイトなどで不正なSQL文でデータベースを操作し、情報を抜き取るなどのサイバー攻撃の1種です。SQLインジェクション攻撃をされると、第三者によるデータベースに保管してある情報の操作が可能になり、情報が流出したり、Webサイトのデータ改ざんやデータ消去が起きたりなどの被害を受ける危険性があります。今回紹介した6つの対策を参考に、SQLインジェクションへの対策を行いましょう。

ただ、近年のサイバー攻撃は高度化・巧妙化しており、情報漏洩を100%防ぐことが困難なため、漏洩をいかに早く察知し、適切な対応を取れるかが重要です。情報漏洩監視ツール「ダークウェブアイ」は、会社のドメイン情報を入れるだけで「いつ」「どこから」「どんな情報が」漏れてしまったのか、一瞬で分かります。

ダークウェブアイ紹介資料ダウンロード

自社情報が漏洩していないか不安な方は、まずは自社の漏洩状況を確認してみてはいかがでしょうか?
メールアドレスを入れるだけ!自社の漏洩状況をチェック!

おすすめイベント・セミナー 一覧へ