お問い合わせはこちら

【初心者向け】SQLインジェクションの概要と対策方法

公開
更新

SQLインジェクションとは、Webサイトが利用するデータベースを狙った攻撃手法です。ただ、この名前を知っていても、その特徴やどのような被害が生じるか分からない方も多いのではないでしょうか。

この記事では、初心者の方でもわかるようにSQLインジェクションの特徴や仕組み、被害内容、実際の被害事例を紹介します。その上で対策の代表例も紹介するので、自社でSQLインジェクション対策をする際の参考にして下さい。

SQLインジェクションとは

「SQL(エス・キュー・エル)」は、広く知られているデータベース言語です。Webアプリケーションがデータベースと連携する場合、SQL文が使われることが多くなっています。

その上でSQLインジェクションとは、Webアプリケーションのデータベースを不正に操作する攻撃手法です。この攻撃では、Webアプリケーションに対し不正なSQL文を注入(=インジェクション)することから、「SQLインジェクション」と呼ばれています。

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

SQLインジェクションの主な攻撃対象は、脆弱性があるECサイトや会員制Webサイトです。これらのWebサイトでは多くの場合、データベースを使って会員情報を管理しています。

攻撃者は、ユーザーID・パスワードを入力するフォームなどに不正なSQL文を注入するのです。これによってデータベースに登録された会員情報が盗まれたり、認証を回避してシステムにログインされたりすると言った被害が生じます。

<SQLインジェクションの攻撃例>

  • 攻撃者が脆弱性のあるECサイトを発見する
  • 攻撃者はECサイトに設置されたユーザーID入力欄経由で、不正なSQL文※を送信する※一例として「データベース上の全会員情報を表示する」という内容のSQL文を送信するとします
  • 画面上に氏名やID・パスワードなど全ての会員情報が表示されてしまう(クレジットカード情報が表示されてしまうこともある)

SQLインジェクションの主な種類

一口にSQLインジェクションといっても、複数の種類があります。なかでも代表的な種類は以下の通りです。

  • インバンドSQLインジェクション
    Webアプリケーションへの入力に対するレスポンスを収集し、脆弱性の有無などを分析する攻撃手法です。発見した脆弱性をもとに、WebサイトへSQL文を注入します。インバンドSQLインジェクションは他の種類と比べ、攻撃者にとって簡単に実行可能です。そのためインバンドSQLインジェクションによる被害は数多く報告されています。
  • エラーベースSQLインジェクション
    Webアプリケーションに対し意図的にエラーメッセージを出力させ、その内容からデータベースの脆弱性を探る攻撃手法です。
  • UNIONインジェクション
    「UNION」とは、データベースにおける複数の検索結果を1つにまとめるSQL文です。UNIONインジェクションはUNIONを悪用し、不正にデータベースの情報を取得する攻撃手法を指します。
  • ブラインドSQLインジェクション
    Webサーバーへ複数のデータを送信した際のレスポンスや動作の違いから、データベースの情報を分析する攻撃手法です。データベースから攻撃者に対し直接データが送信されるわけでないことから、「ブラインドSQLインジェクション」と呼ばれます。
  • マルチプルステートメント
    セミコロンによって複数のSQL文をまとめる、「マルチプルステートメント」機能を悪用した攻撃手法です。攻撃者はマルチプルステートメントにより、不正なSQL文を紛れ込ませて攻撃を行います。

クロスサイトスクリプティングとは何が違うの?

SQLインジェクションと同じように、Webサイトを狙った攻撃手法として名前があがるのがクロスサイトスクリプティングです。SQLインジェクションとクロスサイトスクリプティングはよく似ていますが、攻撃の仕組みや対象が異なります。

SQLインジェクションはWebサイトのデータベースに不正なSQL文を注入し、主にWebサイトの運営企業に被害をもたらす攻撃です。SQLインジェクションによって、その運営元企業の顧客情報が盗まれるなどの被害が生じます。

一方のクロスサイトスクリプティングは脆弱性のあるWebサイトに罠を仕掛け、訪れたユーザーを攻撃する手法です。仕掛けられた罠によって、攻撃者が用意したWebサイトのスクリプトが実行されます。その結果、訪れたユーザーの個人情報が盗まれるなどの被害が生じるのです。

クロスサイトスクリプティングという名前はWebサイトを踏み台とし、攻撃者のWebサイトへ誘導(クロスサイト)されることが由来とされます。なお現在はクロスサイトスクリプティングも進化しており、必ずしも攻撃用のWebサイトが別に用意されるわけではありません。脆弱性のあるWebサイト上で直接、攻撃者の用意したスクリプトが実行されるパターンも多いです。そういった攻撃も含めクロスサイトスクリプティングと呼んでいます。

【SQLインジェクション/クロスサイトスクリプティングの比較・違い】

SQLインジェクションクロスサイトスクリプティング
攻撃の仕組みWebサイトのデータベースに不正なSQL文を注入する脆弱性のあるWebサイトに罠(悪意のあるスクリプト)を仕掛ける
主な攻撃の対象主にWebサイトの運営元企業など※主にWebサイトを訪れたユーザー
代表的な被害事例データベースに登録された顧客情報が漏えいするなど※Webサイトを訪れたユーザーの個人情報が漏えいするなど

※詳細は「個人情報・機密情報の漏洩」の項で紹介しますが、SQLインジェクションでもサイトの訪問者が攻撃対象となることがあります。

SQLインジェクション攻撃で想定される被害

SQLインジェクション攻撃によって生じる被害は、主に以下にあげる種類があります。どのような被害が生じる可能性があるかあらかじめ把握しておき、攻撃を受けないように対策を検討しましょう。

個人情報・機密情報の漏洩

SQLインジェクションの攻撃対象となるのは、企業の機密情報・個人情報がつまったデータベースです。攻撃が成功するとデータベースからこれら情報の一部、あるいは全部が盗まれてしまう可能性があります。たとえば顧客の氏名や住所、クレジットカード情報といった個人情報が盗まれ、悪用されてしまう危険性もあるのです。

Webサイトの改ざん

SQLインジェクションによって、Webサイトが改ざんされる例も少なくありません。この場合、クロスサイトスクリプティングと同様に攻撃対象のWebサイトに罠(悪意のあるスクリプト)が仕掛けられることもあります。その結果、Webサイトを訪れたユーザーがマルウェアに感染するなどの被害を受けるのです。

アカウントの不正利用

SQLインジェクションの攻撃を受け、データベースに登録されたアカウントのID・パスワードが盗まれる例もあります。その結果、悪意のある第三者にアカウントが不正利用され、さらなる被害につながるのです。

データ改ざん、破壊、システムの乗っ取りなど

SQLインジェクションでは、データベース上のデータが盗まれるだけではありません。データベースが不正に操作され、データが改ざんされたり読みだせないように破壊されたりする可能性もあります。サーバーが乗っ取られ、別のサーバーを攻撃するための踏み台にされる例も多いです。

SQLインジェクションによる被害事例

SQLインジェクションによって大きな被害が発生したという事例は、かなり以前から現在に至るまで数多く報告されてます。多くの大企業も標的とされており、企業の大小問わずにサーバーの管理者にとって他人事とはいえません。ここでは、中でも大きなニュースになった被害事例をピックアップして紹介します。

年月企業名/サイト名被害内容
2005年3月クラブツーリズム最大9万300名分の会員ID・パスワード・氏名・住所・電話番号・メールアドレス・生年月日などが流出した。 ※ 同じ攻撃者による被害は、価格.comやアデコなど他企業にも広がっています。
2008年3月トレンドマイクロ「ウィルスデータベース」ページの一部が改ざんされ、ユーザーが訪問した際にウイルスをダウンロードさせるスクリプトが埋め込まれる。
2011年4月PlayStation Networkソニーのオンラインサービス「PlayStation Network」から、約7,700万アカウント全員の個人情報が盗まれる。漏えいした情報のなかには、氏名や住所、メールアドレスの他、クレジットカードの情報も含まれていた。
2013年4月エクスコムグローバル同社は海外旅行者向けのモバイルルーターをレンタルしている企業。クレジットカード情報・セキュリティコードを含む約11万件分の個人情報が流出。
2016年7月Ubuntu ForumUbuntuのコミュニティフォーラム「Ubuntu Forum」から、約200万人分の個人情報が流出する。
2016年12月日販アイ・ピー・エス同社が運営する通販サイトから、約13万件の個人情報が流出。漏えいした情報のなかにはクレジットカード情報も一部含まれている。
2019年1月釣りビジョン同社が運営するWebサイトから約6.4万件分の個人情報が流出。※クレジットカード情報は含まれていません。
2020年10月頃せんたく便約6万人分のクレジットカード情報が流出。一部は不正に利用されたことも確認されている。
2021年6月サンリオ同社が運営するWebサイトから、約4.6万件会員メールアドレスが流出。漏えいした情報はメールアドレスのみであり、クレジットカード情報や氏名などは流出していない。
2021年12月西宮市同市のグループウェアが攻撃を受け、職員のユーザー情報が流出。その情報が悪用され、グループウェアのメールシステムから不正にメールが送信される。(庁外向け4件、庁内向け730件)

ここで紹介した事例は、SQLインジェクションによる被害のほんの一部です。公開されていない情報を含めると、数多くの企業がSQLインジェクションの攻撃により被害を受けていると考えられます。情報漏えいの件数も数万件~数千万件までにのぼる事例があり、決して被害の規模が小さくないことは言うまでもありません。

SQLインジェクションの被害を受けないための対策6つ+α

SQLインジェクションによって、多くの企業が被害を受けているのは紹介した通りです。それではSQLインジェクションの被害を受けないようにするためには、どのような対策をとればよいのでしょうか。ここでは主な対策6つ+αを紹介します。

1) エスケープ処理

エスケープ処理は、SQLインジェクション向けの対策として最も基本的かつ効果的な方法です。エスケープ処理では、不正なSQL文に悪用される特殊な文字を無害な文字へ書き換えます。これによって攻撃者が特殊な文字を利用し、SQL文をWebサイトへ注入しようとしてもその攻撃を無効化できるわけです。

2) プレースホルダを利用する

プレースホルダとは、プログラミングにおいて外部から指定された要素を格納しておく場所のことです。プレースホルダを使うと、攻撃者がWebサイトへ注入しようとした不正なSQL文が単なる値として判断されます。その結果、SQL文として実行されてしまうのを防げるわけです。

3) 入力値を制限する

Webフォームでは、入力値を制限することができます。たとえばWebフォームに入力可能な文字列を英数字のみに制限するのです。これによって不正なSQL文で使われる特殊文字が入力されても、受け付けないようにすることができます。

4) 最新の状態に保つ

WordPressをはじめ、Webサイトで利用するWebアプリケーションを常に最新の状態に保すことで、SQLインジェクションを受けるリスクを軽減可能です。過去にはWordPressのプラグインの中に、SQLインジェクションの攻撃の標的になるような脆弱性が発見されたこともあります。

5) WAFの導入

WAFとは「Web Application Firewall」の略で、Webサイトをアプリケーションレベルで防御するファイアウォールを指します。一般的なファイアウォールは、ネットワークレベルで不正なアクセスを防御可能です。しかしSQLインジェクションのように、「ネットワーク的には」正常なアクセスと判断される攻撃を防ぐことはできません。

一方、WAFであれば、アプリケーションレベルで不正な動作を検知し防御できます。SQLインジェクションも、WAFによって対処可能なサイバー攻撃の1つです。


カゴヤの共有サーバーサービスでは、WAFが標準搭載されています。詳細は以下URLで確認ください。

カゴヤのWAFオプション
https://www.kagoya.jp/rentalserver/option/security/waf.html

6) 脆弱性診断サービスでチェック

脆弱性診断とは、攻撃者の視点でシステムやネットワークを調査し脆弱性を洗い出すサービスです。「システムの人間ドックのようなもの」と言えば分かりやすいでしょうか。脆弱性診断では、本記事で紹介したSQLインジェクションをはじめ様々なサイバー攻撃の標的となる脆弱性の有無を調べられます。


カゴヤの「脆弱性診断 WebSiteScan」では、お客様Webサイトに脆弱性が存在しないかリモートから調査します。一般的な脆弱性診断と比べ、安価な価格で利用可能です。詳細につきましては、以下URLでご確認ください。

脆弱性診断 WebSiteScan
https://www.kagoya.jp/wss/

7)そのほかの対策方法

代表的な対策方法を紹介しましたが、さらに安全性を高めるため以下にあげるような対策も有効です。

  • データベースのアカウント権限を最小限にとどめる
  • エラーメッセージをそのまま表示させないようにする

データベースのアカウント権限を最小限にとどめることで、仮に攻撃者に不正なSQL文を送信されても、その被害をおさえることができます。またシステムのエラーメッセージをそのまま表示すると、攻撃者に対しシステムに関するヒントを与えてしまうことになるので注意して下さい。

まとめ

SQLインジェクションとは、Webアプリケーションが使うデータベースに不正なSQL文を送信(注入)する攻撃手法です。攻撃が成功すると、不正なSQL文に指定された内容が実行されデータベース上のデータが漏えいするなどの被害が発生します。実際、SQLインジェクションによって数万~数千万件もの個人情報が漏えいした事例が少なくありません。WAFを導入するなど適切な対策をおこなっておき、SQLインジェクションの被害を予防しましょう。