目 次
改めて知っておきたい「SQLインジェクションとは?」
最新のSQLインジェクション発生件数や推移
SQLインジェクションには、どんな被害リスクがある?
SQLインジェクションに注意すべきWebサイトの特徴は?
SQLインジェクションの被害事例
SQLインジェクションの具体的な対策方法
SQLインジェクション対策なら「LANSCOPE プロフェッショナルサービス」にお任せください
SQLインジェクションに関するよくある質問とその答え
まとめ
SQLインジェクション攻撃とは、WebサイトやWebアプリケーションの脆弱性(=弱点)につけこみ「SQL(データベースを操作するための言語)」を用いて、不正なSQL文を「データベース」り、個人情報の窃取やデータ改ざんなどを行うサイバー攻撃手法です。
データベースとは「Webサイトで検索や保存を行うための、データの集合体」を指し、ほとんどのWebサイトはデータベースから情報を取得・表示することで稼働・成立しています。
またSQLとは、データベースを操作するための言語であり、Webサイトでデータベースからデータを抽出・表示するには、データベースへSQLによる命令文を送る必要があります。
「SQLインジェクション」は、このSQLを悪用し、不正なSQL文をWebサイトからデータベースへ送ることで、データベースに不正な操作を行います。
SQLインジェクションは1990年代後半より存在した、古くからあるサイバー攻撃手法でありながら、2023年現在においても変わらず猛威をふるっています。国内の「脆弱性を狙った攻撃手法」においても、クロスサイトスクリプティング(XSS)攻撃、SQLインジェクション攻撃の2つは、特に知っておくべき脅威と言えるでしょう。
この記事を読むと、今までピンと来なかった「SQLインジェクション」について、その概要や攻撃手法を理解することができます。
- SQLインジェクションの「攻撃の仕組み」
- SQLインジェクションの「被害リスク」
- 最新SQLインジェクション攻撃の「発生件数、推移」
- SQLインジェクションの「事例」
- SQLインジェクションの「対策方法」
今一度、自社サイトやサービスが「SQLインジェクションへの対策ができているか」を確認し、自社のセキュリティ対策を見直してみてはいかがでしょうか?
情シス1,000人に聞いた!
「クラウドサービスのセキュリティ対策」実態調査
情シス1,000人に「自社のクラウドサービスのセキュリティ対策」
についてお聞きしました。
クラウドを運用中・導入予定の情シス様は、必見のデータです!
改めて知っておきたい「SQLインジェクションとは?」
前文でもお伝えしましたが、改めて「SQLインジェクションとは何か」を、嚙み砕いてご紹介します。
そもそも、SQLインジェクションの「SQL」とは、データベースを操作するために使われる言語のことです。「会員情報」など、データの活用が必要なWebサイト・アプリケーションを動作させる際、SQL文を送信することで、データベースに蓄積されたデータをWebサイトへ呼び出します。
データベースに蓄積されたデータを、操作するための構文が「SQL文」です。
次に、SQLインジェクションの「インジェクション」とは、英語で「注入」を指す単語です。
SQLインジェクション(SQL Injection)とは、その名の通り、Webサイトやアプリケーションの脆弱性を狙って、検索する際の入力フィールドなどに不正なSQLコードを挿入(入力)する攻撃です。もう少し厳密に言うと、Webブラウザからサーバーに送信される入力値の部分に不正なSQLコードを挿入します。
攻撃者による不正な「SQL文」がデータベースへ送られ、実行されることで、Webサイトやアプリケーションのデータベースから、個人情報を盗み取ったり、改ざんや削除したりできるようになってしまいます。
SQLインジェクションの攻撃の一般的な流れ
SQLインジェクション攻撃の基本的な流れは、次の通りです。
1. 攻撃者が、脆弱性を含むWebアプリケーション・システムを「選定」する
2. Webアプリケーション上の入力フォームに「不正なSQL文」を入力し、送信する
3. 「データベース」へ不正なSQL文が送られ、実行される
4. データベースからWebサイトへ、SQLの実行結果が返却される
(例:会員すべての登録データを開示してください)
5. 実行結果を悪用し、攻撃者はデータベースに登録された会員情報を窃取をしたり、情報の改ざん・削除などを行うことができる
SQLインジェクション攻撃は、はじめに攻撃者が「ターゲットとなりそうな、脆弱性をもつWebサイトやアプリケーションを探す」ことからスタートします。
最近では個人情報の売買などを行う「ダークウェブマーケット」にて、「どこのWebサイトはセキュリティ上の欠陥があるか」などの情報が取り引きされているため、攻撃者は容易に標的を見つけることが可能です。
通常、私たちがWebアプリケーションの「入力フォーム」に個人情報を入力した場合、それらの情報はそのままサーバーへ送信され、データベースへと記録されます。
しかし、攻撃者がSQLインジェクションに対して脆弱なWebサイトにて、例えば上記のような検索フォームより、不正なSQL文(例:データベース内のすべての会員データを公開してください)を送信すると、その悪質な命令が実行され、画面上に会員の個人データが公開されてしまうのです。
SQLインジェクションの仕組み
少し難しい内容ですが、SQL文を用いて、SQLインジェクションの仕組みについてお話しします。
以下のSQL文は「データベースから、ユーザーの情報を検索する」という意味になります。Webサイト上で、ユーザーの情報を絞り込んだり、表示させたりする際に使用します。
SELECT * FROM users WHERE name = ‘エムオー太郎’; |
より具体的には「usersというテーブルから、nameという列の値が、入力値と一致するレコードを全て取得する」という意味です。例えば、入力値が「エムオー太郎」だった場合、usersテーブルからnameが「エムオー太郎」であるレコードが、全て抽出されます。
これに対し、SQLインジェクション攻撃によって、入力値に「MOTEX’ OR ‘MOTEX’ = ‘MOTEX」 という文字列を与えると、どうなるでしょう。SQL文は次のように変わります。
SELECT * FROM users WHERE name = ‘MOTEX’ OR ‘MOTEX’ = ‘MOTEX’; |
このSQL文では、条件が常に「真」となるため、データベースへ送られ命令が実行されると、データベースから全てのユーザー情報が抽出され閲覧できてしまいます。
このようにSQLインジェクションを悪用すると、本来見ることのできない情報をデータベースから盗み出したり、あるいは別のSQL文を注入して、データの改ざん・削除などを行うことができてしまいます。
最新のSQLインジェクション発生件数や推移
SQLインジェクションは、1990年代後半から確認されている古い脆弱性ですが、2023年現在も猛威を振るっています。
株式会社サイバーセキュリティクラウドが、2023年5月に公表した「Webアプリケーションを狙ったサイバー攻撃検知レポート」によれば、
- 2023年1〜3月のSQLインジェクションの攻撃総数は、2022年1~3月の5,481,900件から16,985,151件で+210%(約1,150万件)増加
- 1ホストあたりでは、485件から1,208件と、前年同期比でおよそ+150%で増加していること
が、それぞれ報告されています。
出典:PR TIMES|「SQLインジェクション」が前年同期比で+150%増加
またIPAのレポートによると、「Webサイトの脆弱性で被害の届け出」があったもののうち、「SQLインジェクション」は、「クロスサイト・スクリプティング」に次いで、2番目に届け出が多いことが報告されています。
出典:IPA|ソフトウェア等の 脆弱性関連情報に関する 届出状況 [2023年第2四半期(4月~6月)] (2023年 7月20日)
「SQLインジェクション」と頻繁に比較されるクロスサイトスクリプティング(XSS)攻撃ですが、ともにソフトウェア等の脆弱性を突くサイバー攻撃です。
SQLインジェクションがデータベースに対する攻撃であるのに対し、クロスサイト・スクリプティングでは、Webサイトを通じて被害者の端末上で悪意のあるスクリプトを実行させる点で、違いがあります。
クロスサイト・スクリプティングについて知りたい方は「よくある質問」項目をご覧ください。
SQLインジェクションには、どんな被害リスクがある?
SQLインジェクション攻撃を受けると、以下のような被害リスクを招く可能性があります。
1. 情報漏洩
2. データベースの改ざんや破壊
3. Webサイトの改ざんや消去
3つの被害リスクについて詳しく解説します。
1.情報漏洩
SQLインジェクションで、1つ目に想定されるリスクが「情報漏洩」です。
Webサイトから、不正なSQL文を送信することで、攻撃者はデータベースに蓄積された情報を閲覧し、重要なデータを盗み出せてしまいます。
SQLインジェクションによって情報漏洩することにより
- ID/パスワードが盗まれ、企業システムへ不正にアクセスされたり、アカウントが乗っ取られたりする
- クレジットカード情報が盗まれ、不正送金や購入が行われる
- 氏名やログイン情報といった個人情報を、ダークウェブなどで売買される
といった被害の危険性があります。
2.データベースの改ざんや破壊
2つ目の想定リスクは、データベースの改ざん・破壊・消去などです。
データベースには、組織の重要資産である、顧客の個人情報や商品の売上など、あらゆるデータが蓄積されています。
SQLインジェクションでは、このデータベースを不正に操作することが可能なため、蓄積したデータが勝手に改ざんされたり、破壊・消去されたりする危険があります。
データが改ざんされると、顧客の情報や注文情報など、業務に必要な情報が改ざんされてしまうことで、組織の業務に多大な影響が出ることが想定されます。
3.Webサイトの改ざん
3つ目の想定リスクは、Webサイトの改ざんです。
最近のWebサイトは、ほとんどのページがデータベースを参照して作られる、動的なサイトとなっています。Webサイトの改ざんを目的としたSQLインジェクションでは、不正なSQL文によりデータベースの内容を書き換え、改ざんしたWebページを表示させます。
データベースが改ざんされることで、Webサイトの内容が不正に書き換えられるため、訪問したユーザーに偽の情報が伝わってしまったり、偽のサイトに誘導されてしまったりすることがあります。
実際、情報処理推進機構(IPA)が2023年の報告によると、「脆弱性に関する被害届」で最も多かった被害が「本物サイト上への偽情報の表示(49件)」で、全体の57%を占めています。
出典:IPA|ソフトウェア等の 脆弱性関連情報に関する 届出状況 [2023年第2四半期(4月~6月)] (2023年 7月20日)
また、SQLインジェクションでWebサイトの管理用アカウント情報が盗み出されてしまうと、ユーザーがWebサイトを閲覧するだけでマルウェアに感染するよう、サイト内容を書き換えることもできてしまいます。
その他、SQL文を操作してサーバーにアップロード済みのHTMLファイルが全て消去された結果、Webサイトが消去されたという被害事例も報告されています。
SQLインジェクションに注意すべきWebサイトの特徴は?
ずばり、SQLインジェクション攻撃は、データベースを利用するWebアプリケーション・Webサイトに存在しうる問題です。
また、SQLインジェクションの標的となりやすいサイトの特徴として、会員情報やクレジットカード情報など、重要情報をデータベースに格納しているWebサイトが挙げられます。
実際に攻撃を受けてしまうWebサイトは、脆弱性が存在しているバージョンのフレームワークやソフトウェアを使用しているなど、脆弱性が放置されている点が挙げられます。
コーポレートサイト、ECサイトなど「運用形態」に関わらず、データベースを活用するサイトであれば、狙われる可能性があります。SQLインジェクションによる攻撃から身を守るためには、データベースのセキュリティ対策を十分に強化することが大切です。
有効な対策案については、以下段落の「SQLインジェクションの具体的な対策方法」より、ご覧ください。
参考:IPA |安全なウェブサイトの作り方 – 1.1 SQLインジェクション
SQLインジェクションの被害事例
日本国内で発生した「SQLインジェクション」の被害事例を、2件ご紹介します。
1.研究所サーバーがSQLインジェクション被害、メールアドレス5,527件が流出した事例
2023年、国内の大規模な研究施設にて、サーバーがSQLインジェクションの被害に遭い、研究者のメールアドレス5,527件が流出しました。
同機関がサーバーのログを確認したところ、2023年2から3月にかけて、複数回にわたり、データベースへの不正アクセスが行われていたとのことです。
企業 | 国内の研究機関 |
---|---|
被害時期 | 2023年2~3月 |
攻撃対象 | 協同研究データベースを運用しているサーバー |
被害内容 | 過去に採択された共同利用・共同研究課題に関連する、研究者のメールアドレス5,527件が流出 |
協同研究を行うデータベースのサーバーに、セキュリティ上の設定ミスがあり、その脆弱性を狙ってSQLインジェクション攻撃が仕掛けられた、とのことです。
被害の発覚後、同機関は直ちに被害を受けたサーバーの運用を停止し、ネットワークから切断・被害状況の確認を開始しました。調査の結果、メールアドレスの流出以外の被害は確認されず、研究施設を偽った不正メールに気を付けるよう、注意喚起を行っています。
2.マーケティング企業にて最大10万件以上の個人情報が流出した事例
2022年6月には、国内のマーケティング・リサーチ企業が、大規模なSQLインジェクションの被害に見舞われ、10万件超の個人情報が漏洩した可能性があると発表されました。
企業 | 国内のマーケティング・リサーチ企業 |
---|---|
被害時期 | 2022年6月 |
攻撃対象 | 同社が運営するWebサイト |
被害内容 | 最大10万1,988件のメールアドレスと暗号化されたパスワードが流出。クレジットカード情報は保存していないため漏洩していない。 |
2022年6月13日、取引先から「情報流出の可能性がある」との問い合わせを受け、外部のパートナー会社と調査を実施。結果的に所有する2つのサイトにて、SQLインジェクション攻撃を受けていたことが発覚しました。
この事件で流出したのは、同社が運営するメールサービス・調査資料閲覧サービスの会員における、メールアドレスと暗号化されたログインパスワード情報、約10万件です。
同社では、アカウントの乗っ取りによる不正ログインを防止するため
- 同サイトと関連サイトを閉鎖し、外部ネットワークから遮断
- ログインパスワードの初期化
- 再発防止策として、脆弱性防御ツール・脆弱性管理ツールの導入
といったセキュリティ対策を実行したとのことです。
これらの事件から伺えるように、「SQLインジェクション」の被害にあうと、Webサイトの削除やサービス停止に追い込まれたり、情報漏洩の賠償リスクを追ったりする可能性もあります。
Webサイトやアプリケーションの脆弱性は放置せず、定期的に診断や対策を実施することが重要です。
SQLインジェクションの具体的な対策方法
SQLインジェクションの具体的な対策方法として、以下の様な手段があげられます。
1. プレースホルダーを利用する
2. エスケープ処理(サニタイジング)を行う
3. 詳細なエラーを表示しない
4. Webアプリケーションを最新の状態に
5. Webサイトの脆弱性診断を行う
1つずつ嚙み砕いてご説明します。
1.プレースホルダの利用
1つ目に行いたいSQLインジェクション攻撃対策は「プレースホルダーを利用すること」です。
プレースホルダーとは、SQL文の中で「値が変動する部分」に用いる、文字列や記号です。「SQL文」とは先述の通り、データベースを操作するために、指示出しに使う言語を指します。
SQLインジェクションは、ユーザーからの入力内容に不正なSQL文を含めることで、データベースに、本来意図しない操作をさせる攻撃でした。
しかしプレースホルダーを使うことで、入力された値はあくまで「文字列」として扱われ、仮に不正な値が入力されても、SQL命令に関わる「特殊文字」は無効化(エスケープ処理)されます。結果的に、SQL文として不正な操作が実行されるのを防ぐことが可能です。
▼SQLの実行時に「プレースホルダー」を用いる例
元のSQL文($name の部分が変動)
$sql = “SELECT * FROM user WHERE name=‘$name’; |
↓ SQL文の中で値が変動する部分に、コロン(:)やクエスチョンマーク(?)などの記号を設置(=プレースホルダー)
「:name」がプレースホルダー
$sql = “SELECT * FROM user WHERE name=:name“; |
このように、プレースホルダーはSQL文の中で値が変動する部分に直接反映するのではなく、代替しているため、攻撃者の仕込んだ不正なデータベース操作を防止することができます。
後述のエスケープ処理と併用すると、さらに安全性を高められます。
2.エスケープ処理(サニタイジング)を行う
エスケープ処理とは、データベースが持つ特殊記号を無効化する処理のことです。「エスケープ処理」を行うことで、攻撃者がWebアプリケーション上で不正なSQL文を注入しても、命令の実行を防ぐことが可能となります。
エスケープ処理の例としては、「’」や「”」や「\」などの特殊記号を「”」「””」「\\」などとしてその記号の意味を無効化する処理を行います。ただし、特殊記号の取り扱いはデータベースによって異なるため、データベースに応じた対策が必要となります。
3.詳細なエラーを表示しない
3つ目の対策は「詳細なエラーを表示しない」ことです。
詳細なエラーとは、データベースに対するSQL文が不正なものであった場合、表示されるエラー情報のことです。
通常、データベースに対して対話型のコマンドでSQL文を送ると、SQL文が不正な場合は「エラー」が表示されます、しかし、詳細なエラー情報を表示することは、結果的に「攻撃者に不必要な情報を与えてしまうこと」になりかねません。
攻撃者が、意図した情報を取得できてしまう可能性もあるため、詳細なエラーを表示しないよう設定しておくことが必要です。
4.Webサイトで用いる、Webアプリケーションを最新の状態に
4つ目の対策は「Webサイトで利用するWebアプリケーションは、常に最新の状態にアップデートしておくこと」です。
WordPressやJoomla といったWebアプリケーションのアップデートを怠ると、脆弱性が放置され、SQLインジェクション攻撃の標的となりやすくなるためです。実際、過去にはこれらWebアプリケーション内のプラグインの中から、SQLインジェクションの対象となりうる、脆弱性が明らかになったケースも存在します。
メーカーからのアップデート通知をこまめに確認し、定期的なアップデートを心がけましょう。
5.脆弱性診断サービスで、Webサイトの脆弱性を明らかにする
5つ目の対策は、SQLインジェクションの対策を行いたい「Webアプリケーション・サイト」を対象に、脆弱性診断サービスを受けることです。
脆弱性診断とはその名の通り、セキュリティの専門家が、貴社のWebサイトにおける欠陥(=脆弱性)を調査するサービスです。SQLインジェクションなどサイバー攻撃に狙われる「脆弱性」の内容を洗い出すことで、効率的かつ確実に、課題への対策を打つことができます。
「運営中のWebサイトの脆弱性リスクを診てほしい」という企業様はもちろん、「リリース前のWebアプリケーションに脆弱性がないか確認したい」という企業様にもおすすめです。
情シス1,000人に聞いた!
「クラウドサービスのセキュリティ対策」実態調査
情シス1,000人に「自社のクラウドサービスのセキュリティ対策」
についてお聞きしました。
クラウドを運用中・導入予定の情シス様は、必見のデータです!
SQLインジェクション対策なら「LANSCOPE プロフェッショナルサービス」にお任せください
ここまで、「SQLインジェクション攻撃」に関して説明してきましたが、最後に少しだけ、弊社サービスの紹介をさせてください。
「SQLインジェクション攻撃」への対策であれば、過去12,000件以上のサービス提供実績・90%以上のリピート率を誇る「LANSCOPE プロフェッショナルサービス」に、どうぞお任せください。
LANSCOPE プロフェッショナルサービスでは「Webアプリケーション脆弱性診断」という診断メニューを提供しています。セキュリティの専門家がきめ細かい診断を行い、SQLインジェクション攻撃や、後述するクロスサイトスクリプティング(XSS)攻撃の発生要因となる、Webアプリケーションの脆弱性(課題)を暴き、有効な対策を提案します。
自サイトが抱える脆弱性リスクは、報告書にて「点数」で把握することができ、発見された脆弱性に有効なセキュリティ対策・修正内容を、ピンポイントで効率的に知ることが可能です。
また、診断内容を重要項目に絞り、より低価格でWebアプリケーションの脆弱性診断を受けていただける「セキュリティ健康診断パッケージ」も提供しております。
SQLインジェクションに関するよくある質問とその答え
最後に、SQLインジェクションに関するよくある質問とその答えをまとめました。
- クロスサイトスクリプティング(XSS)攻撃との違い
- SQLインジェクションを検知する方法
- SQLインジェクションの主な種類
上記の3つの質問についてお答えしていますので、今後のセキュリティ対策にぜひお役立てください。
Q. クロスサイトスクリプティング(XSS)攻撃との違いは何ですか?
今回のテーマである「SQLインジェクション攻撃」と、しばしば比較される「クロスサイトスクリプティング(XSS)攻撃」。
ともに「Webアプリケーションの脆弱性」を利用するサイバー攻撃であり、どちらも入力フォームや検索ボックスに不正な文字列を入力して攻撃を仕掛ける、という点で共通しています。
両者の違いは、ずばり「攻撃の対象と方法」です。
クロスサイトスクリプティング(XSS)攻撃では、Webサイトの脆弱性を狙って不正なスクリプトを埋め込み、サイトを訪れたユーザーのブラウザ上で、不正なスクリプトを実行させます。
一方、SQLインジェクションでも、同じくWebサイトの脆弱性につけこみ、データベースに悪質なSQL文(スクリプト)を送信することで、データベースを不正に操作します。
クロスサイトスクリプティング(XSS)攻撃とは?
クロスサイトスクリプティング(XSS/Cross Site Scripting)は、SQLインジェクションと同じく、Webサイトの脆弱性を突いて、HTMLに悪意のあるスクリプトを埋め込むサイバー攻撃です。
メールや攻撃者のサイトに、不正なスクリプトが埋め込まれたリンクやHTTPリクエストを設置し、そこに被害者がアクセスした場合、被害者のブラウザ上で不正なスクリプトが動作します。
結果、フィッシングサイトへ誘導されたり、Cookie情報が盗まれ「セッションやユーザーID」などの情報が盗まれたり、といった被害が発生します。
Q. SQLインジェクションはどのように検知できますか?
SQLインジェクションを検知するためには、データベースサーバーのログを定期的に監視する取り組みが有効です。ログの中に不正なSQL文やエラーメッセージが記録されていないかどうかをチェックすることで、第三者からの攻撃の有無をいち早く確認できます。
ログの定期監視のほかにも、脆弱性診断のサービスを利用し、Webアプリケーション上の脆弱性を発見・評価する方法もあります。
ログの定期監視が「攻撃に遭った後の初動対応を早めるための対策」なら、脆弱性診断サービスの利用は「SQLインジェクションによる被害を未然に防ぐための対策」といえるでしょう。
Q. SQLインジェクションの主な種類を教えてください。
よく使われるSQLインジェクションの手口には、主に以下の3種類があります。
- エラーベース型:Webアプリケーション上のフォームなどから不正なSQL文を送信してエラーメッセージを表示させ、データベースの構造や内容を推測する方法
- ブラインド型:エラーベース型を実施してもエラーメッセージが表示されない場合に、真偽値(TRUE or FALSE)や時間遅延などを利用して、データベースの内容を推測する方法
- セカンドオーダー型:Webアプリケーション上のフォームなどから正常なSQL文を送信した後、データベースに保存されている不正なSQL文を実行させる方法
まとめ
「SQLインジェクション」への理解は、深まりましたでしょうか?この記事のポイントは、以下の通りです。
- SQLインジェクション攻撃とは、Webアプリケーションの脆弱性を悪用し、不正なSQL文をデータベースに送ることで、データベースを不正操作するサイバー攻撃
- SQLインジェクションの被害に遭うと、Webサイトやデータベースの改ざんや消去、情報漏洩などの恐れがある
- SQLインジェクションに気を付けるべきWebサイトの特徴は「クレジットカード情報などの個人情報を取り扱っている」Webサイト。
- SQLインジェクションによるサイバー攻撃は、2023年現在も引き続き猛威を振るっている
- SQLインジェクションの具体的な対策方法は、SQL文を無効化するプレースホルダの利用やエスケープ処理の実施、Webアプリの脆弱性診断を受けること等が有効
いま一度、自社のWebサイトやWebアプリケーションの課題を見直し、必要なセキュリティ対策を行うことで、SQLインジェクション攻撃から、大切な情報資産やお客様からの信頼を守りましょう。
この記事が、皆さんの「SQLインジェクション」の理解に、少しでもお役に立てたら幸いです。
情シス1,000人に聞いた!
「クラウドサービスのセキュリティ対策」実態調査
情シス1,000人に「自社のクラウドサービスのセキュリティ対策」
についてお聞きしました。
クラウドを運用中・導入予定の情シス様は、必見のデータです!
関連する記事