SQLインジェクションとは?仕組みと対策方法を解説

 2020.05.18  株式会社ジェイピー・セキュア

私たちは日頃からインターネットを通じて、Webアプリケーションやサービスを利用し、その恩恵を受けています。その一方でWebサイトの改ざんや情報漏えいといった事件・事故が後を絶たないという実情もあり、Webサイトの運営者はセキュリティに対する正しい知識を身に付ける必要があります。

本稿では、データベースを不正に操作することで機密情報の窃取などを行うSQLインジェクションについて解説します。安心・安全なWebサイトを運営するために様々な攻撃手法についての知識を身に付けるようにしましょう。

データベースとSQL

情報化社会の中、企業はなんらかのかたちでWebサイトを活用することが当たり前となり、Webサイトはビジネスの成長に欠かせない存在となっています。Webの利用者である私たちが日頃から利用している検索サービスやオンラインショッピングなどでは、データベース(Database)が活用されており、重要な役割を果たしています。データベースは、検索や追加、更新、削除などを容易に且つ再利用可能な情報の集まりを指し、略して「DB」とも呼ばれます。データの基地といった意味合いから書類として纏められた電話帳などもデータベースと呼べますが、コンピュータシステムで実現された情報の集まりを指すことが多くなっています。

データベース

Microsoft社のExcelで作成され、条件抽出などが行える顧客リストなども立派なデータベースであり、AccessのようにMicrosoft Windows向けのデータベースの管理を目的とした専用ソフトウェアもあります。先述の検索サービスやオンラインショッピングなどにおける情報の活用では、データベース管理システムが活用されており、膨大な情報の中から目的の情報を探し出したり、必要なときにその情報を使用したり更新できるようになっています。

データベースの操作は、SQLというデータベースを操作する言語で行います。データベース管理システムに対して、情報の検索(SELECT文)や追加(INSERT文)、更新(UPDATE文)、削除(DELETE文)といった命令をすることで、データベース上の情報を活用します。

Webを通じた私たち利用者からの入力(要求)に応じて情報を引き出したり、編集するためにデータベースが活用されており、さまざまなサービスを提供するWebアプリケーションが私たちの日常生活に欠かせない存在となっているのです。

SQLインジェクションとは

先ほど、データベースの操作はSQLによって行うという話をしました。セキュリティを考えたときに、この時点で「不正にデータベースを操作されたらどうなるのだろうか?」とお気付きの方もいらっしゃるかもしれません。そうです、意図していない情報の検索や更新が生じると、機密情報が漏えいしたり、改ざんされるといった事態に陥る恐れがあります。

インジェクションは「注入」を意味し、外部からSQL文を含んだリクエストを送信して不正にデータベースを操作する攻撃、またはその脆弱性がSQLインジェクションです。SQLインジェクションは、Webアプリケーションの実装の不備を悪用し、アプリケーションが想定しないSQL文を実行させることでデータベースを不正に操作するのです。データベースを直接操作されてしまうことから大規模な情報漏えいにつながる可能性があるなど、対策を怠るととても深刻な被害を受ける恐れがあります。

SQLインジェクション
  • データベースの情報が攻撃者によって盗まれる
  • データベースの情報が攻撃者によって改ざんされる
  • 攻撃者によって会員サイト等の認証を回避される など

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

「SQL(Structured Query Language)」は、データベースの定義や操作を行うためのデータベース言語です。ECサイトや会員制Webサイトでは、RDBMS(関係データベース管理システム)を使用して、データベースを構築し、会員情報等のデータを記録します。登録したデータは、必要に応じていつでも使用できます。SQLインジェクションは、Webアプリケーションのセキュリティ上の不備、つまり脆弱性を意図的に悪用し、アプリケーションが想定しないSQL文を実行させることで、データベースを不正に操作する攻撃のことです。ユーザーIDやパスワードを入力するフォームに不正にデータベースを操作するSQL文を入力することで、認証を回避されたり、会員情報等が窃取されるなど、深刻な被害を受ける恐れがあります。

関連動画:攻撃デモ~WAFによる防御(SQLインジェクション攻撃)

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

被害事例① ゲーム向けサービスで7,700万人分の個人情報が流出

2011年4月、家庭用ゲーム機などを提供するS社が運営しているゲーム向けのサービスにおいて、SQLインジェクションにより、7,700万人分の個人情報という大規模な情報流出がありました。同サービスは、情報流出に伴う対応のため、サービスの復旧まで1か月以上の期間を要することとなりました。

被害事例② 出版、映像企画会社が運営するサイトからの情報流出

2020年4月、出版や映像企画などを行うK社が、同社の運営するウェブサイトについて、不正アクセスによる情報流出の可能性が判明したと発表しました。SQLインジェクションにより、カード情報が含まれない、会員情報の一部が窃取されたものとみられますが、同社では再発防止策として、WAF(Web Application Firewall)を導入されています。

被害事例③ テーマパーク運営会社のサイトから会員情報4万6千件以上が流出

2021年6月、テーマパーク運営を事業とするS社は、同社のウェブサイトへの不正アクセスにより、会員制サービスに登録されている会員情報4万6,421件が流出した可能性があることを発表しました。SQLインジェクションによる外部からの不正アクセスであるとみられ、調査の結果、メールアドレスのみが、情報流出の対象であることがわかりました。

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

SQLインジェクションの根本的な対策としては、Webアプリケーションにおいて脆弱性の原因を作らない実装(セキュアコーディング)を行うことが挙げられます。SQLを呼び出してデータベース上の情報を扱うWebアプリケーション内部で、バインド機構やエスケープ処理の実装を行うなど、サイト運営者、アプリケーション開発者は、SQLインジェクションの脆弱性のない徹底したプログラミングが求められます。

また、保険的な対策として、データベースアカウントの権限見直し、データベースに関わるエラーページの非表示やWAF(Web Application Firewall)を導入することなどが有効な対策となります。

WAF導入によるSQLインジェクション対策

WAF(Web Application Firewall)は、Webアプリケーションの脆弱性を悪用する攻撃からWebサイトを保護するためのセキュリティ製品です。Webサイトのセキュリティ対策として、Webサーバーにインストールしたり、ゲートウェイ型としてネットワークに設置することでユーザーからのリクエストを検査し、SQLインジェクションを効率的に検出・防御することができます。

WAF

SQLインジェクションやOSコマンドインジェクションをはじめ、Webアプリケーションの脆弱性を悪用した攻撃への包括的なセキュリティ対策には、JP-Secureが提供するソフトウェア型WAF「SiteGuardシリーズ」が有効です。インジェクション対策として数百パターンへの攻撃に備えた、防御性能には定評がある標準搭載のトラステッド・シグネチャにより、様々なインジェクション攻撃を防御することができます。

SQLインジェクションについてよくある質問

質問① クロスサイトスクリプティングとは違うものですか?

回答① クロスサイトスクリプティングは、攻撃者が用意した罠サイトに誘導され、クライアント上で不正なスクリプトが実行されてしまうことで被害が生じます。一方で、SQLインジェクションはWebサイト上で稼働しているデータベースの不正操作を目的に直接的な攻撃が仕掛けられます。

どちらもWebアプリケーションの脆弱性を悪用した攻撃手法となりますが、攻撃の仕組みと受ける被害は異なります。

質問② WordPressを利用していますが、SQLインジェクションの対象となりますか?

回答② WordPressをはじめとしたCMS(Content Management System)では、データベースが利用されており、SQLインジェクションの被害にあう可能性があります。CMS本体だけでなく、プラグインやテーマなどの拡張機能でSQLインジェクションの脆弱性が発見される事例も相次いでいます。

CMSを利用している場合は、脆弱性対策のためにも古いバージョンや管理不足を放置せずに、最新バージョンの利用と管理を徹底するようにしましょう。

質問③ SQLインジェクションを受けてしまった場合、どのような被害がありますか?

回答③ 前述の被害事例にあるように、利用者のアカウント、住所、氏名、メールアドレス、クレジットカード情報といった個人情報の流出やデータベースの改ざんなど、深刻な被害が生じる可能性があります。巨額の損害賠償や信用失墜など、企業の存続に影響を及ぼすリスクとなることが考えられます。

質問④ SQLインジェクションの対策には、どのような方法がありますか?

回答④ セキュアコーディングによる安全なWebアプリケーション、サイト構築が根本的な対策となるほか、WAFの導入が有効です。また、脆弱性診断サービスなどを利用して、Webサイトの問題点を洗い出すことも、適切なセキュリティ対策を講じる上で有効な手段となります。

質問⑤ WAFを導入することで、SQLインジェクションは防げますか?

回答⑤ WAF製品には、SQLインジェクションに対応する機能が実装されています。WAFの導入は、SQLインジェクションなど、Webアプリケーションの脆弱性を悪用した様々な攻撃への対策に有効です。

関連記事:WAFによるSQLインジェクション攻撃の防御

CTA

RECENT POST「Webセキュリティ」の最新記事


Webセキュリティ

WAFによるSQLインジェクション攻撃の防御

Webセキュリティ

Webサイトのセキュリティ対策

Webセキュリティ

OSコマンドインジェクションとは

Webセキュリティ

アプリケーションのセキュリティリスクとは?被害を未然に防ぐ対策方法

SQLインジェクションとは?仕組みと対策方法を解説