サイト内の現在位置
SQLインジェクションとは?対策方法や手口・脅威、
具体的な対策方針例まで分かりやすく解説

SQLインジェクションとは、Webアプリケーションのデータベースを不正に攻撃するサイバー攻撃のひとつです。今回は、攻撃の仕組みや手口、SQLインジェクションの種類、攻撃を受けたときの被害・脅威について解説します。その上で、SQLインジェクションに有効な対策を考えていきます。
脆弱性のチェックはこちら
https://www.fielding.co.jp/service/security/websecurity_check/
近年、サイバー攻撃のターゲットは大企業だけではありません。
攻撃の対象範囲は中小企業に拡大しています。
サイバー攻撃から企業の情報資産を守るためには感染原因を確認し、多層防御を意識した対策が必要です。

ランサムウェア対策ならNECフィールディング
SQLインジェクションとは?
「SQLインジェクション」は、Webアプリケーションのデータベースを不正に操作する攻撃手法です。SQLインジェクションを行うときにはSQL文を注入することから、このような名前が付けられています。会員登録が必要なWebサイトやECサイトなどの多くは、データベースで会員情報を管理しており、SQLインジェクションによって会員情報を盗み出したり、ログインを阻止したりすることができます。
SQLインジェクションによる攻撃は近年増えてきており、注意が必要です。
クロスサイトスクリプティングとの違い
クロスサイトスクリプティングは、入力フォームや掲示板など、ユーザがアクセスしたい際にWebページが生成される、いわゆる「動的Webページ」に脆弱性があった場合、罠を仕掛けユーザを意図しない悪質なサイトへ誘導し、個人情報などを盗み出す攻撃です。 クロスサイトスクリプティングもSQLインジェクションと似た攻撃ですが、手法や目的が異なります。
SQLインジェクションは不正なコードを作成してデータの消去・改ざんなどを行うことが目的です。クロスサイトスクリプティングは、サイトの脆弱性を利用して個人情報を奪取したり、フィッシング詐欺を目的としています。
手法や目的は異なりますが、どちらの攻撃も悪意あるものには違いありませんので、攻撃されないように対処することが重要です。
SQLインジェクションの被害件数は近年増加傾向
SQLインジェクションの被害件数は増加傾向にあります。
ハッカー対策サービスを展開するグローバルセキュリティメーカーの株式会社サイバー セキュリティクラウドの調査では、前年同期比で被害件数が150%にも増加しているという結果も出ています。(*)
SQLインジェクション攻撃が増えている背景には、比較的簡単に攻撃ができることと、アプリケーション等の脆弱性の増加・放置が考えられます。SQLインジェクション攻撃がどのように仕組みで行われているのかなどを理解したうえで、早急に対策を進めるようにしましょう。
*:株式会社サイバー セキュリティクラウドのプレスリリース
https://www.cscloud.co.jp/news/press/202305235946/ ※外部サイトへ移動します
SQLインジェクションの仕組みについて
SQLインジェクションは、ウェブサイトやWebアプリケーションに脆弱性があるところに攻撃します。たとえば、ユーザIDやパスワードを入力するログイン画面で、Webアプリケーションが入力値を適切に処理できないエラーが発生している場合、SQL文を含む文字列を入力フォームに入力すると、その不正なSQLを命令として受け取り、データベースの操作が可能となってしまうのです。
簡単にかみ砕いて説明すると、SQL攻撃は次のような流れになります。
ECサイトのログイン画面において通常は、入力フォームへ自分のログインIDとパスワードを入力し、会員画面へ移動する、という流れになるはずです。
悪意を持っている者は、このECサイトの入力フォームへログインID・パスワードを入力する際に、設計者が意図していない文字列(SQL文)を入力します。
SQLインジェクションの対策をしていない場合や、対策をしていても穴をついたSQL文になっている場合、データベースなどに対して不正な操作ができてしまう可能性があるのです。そのため、攻撃者は脆弱性のあるECサイトやWebサイトを探して攻撃をしてきます。

SQLインジェクションによる被害・脅威
SQLインジェクションによって、具体的にどのような被害を受けることになるでしょうか。
サイト運営者への被害
サイトの改ざん
近年SQLインジェクションの被害で多くなっているのが、Webサイトの改ざんです。情報処理推進機構(IPA)の最新の報告によると、届出された被害について、57%ともっとも多いのが「サイト上への偽情報の表示」でした。Webサイトの内容を勝手に書き換えられたり、一部を削除されたりする被害が起きています。
Webサイトの改ざんが行われると、そのWebサイトを訪れたユーザは偽の情報を受け取ることになり、利用者までをも巻き込む被害を受けることになります。
参考:ソフトウェア等の 脆弱性関連情報に関する 届出状況 [2022年第 四半期](IPA)
個人情報や機密情報の漏洩
情報漏洩はSQLインジェクションの被害でも一般的です。データベースに保存されている個人情報や機密情報は高値で取引されるもののため、攻撃のターゲットになりやすいです。また、特にECサイトではクレジットカード情報が蓄積されているので、クレジットカード番号や名義などが漏洩すれば、金銭的な被害を生み出すことも考えられます。過去には、SQLインジェクションの攻撃を受けたECサイトが、クレジットカード情報を含む10万件以上の顧客情報が流出する被害を受けたこともあります。
また、現在開発している新商品の情報や内部資料など、企業にとって大切な情報が漏洩する可能性も考えられます。どの企業にも取引先や競合他社には知られたくない企業秘密があるものです。そのような大切な情報が漏洩すれば、企業としての信用を失うばかりでなく、今後のビジネスにも大きなダメージを受けることになりかねません。
データベースの全消去・破壊・乗っ取り
SQLインジェクションではデータベースを不正に操作できるため、データベースを全て消去・破壊したり、乗っ取りをすることも可能になります。
データベースは企業が蓄積してきた財産のひとつです。それを一気に消去されたり、破壊されたりすることも考えらえます。また、システム自体が乗っ取られる可能性もあります。仮に、それが金融機関のサービスであれば、不正な送金などが行われかねません。
マルウェアの拡散に利用される
SQLインジェクションによって、企業が保有しているメールアカウントが不正に操作され、それらのメールアドレス宛に、マルウェアの拡散を目的とした大量のメールを送りつけることも考えられます。SQLインジェクションによる被害には、企業が不正行為に利用されてしまうことも含まれます。
サイト利用ユーザへの被害
個人情報漏えいによる二次被害
ユーザの被害としてわかりやすいのが、個人情報漏えいによる二次被害です。SQLインジェクション攻撃により、クレジットカード番号などの個人情報が漏えいしてしまい、不正利用される、といったパターンがよく挙げられます。漏えいした個人情報は、不正利用されるだけでなく、第三者向けに販売されるなどの危険性もあり、二次被害も見過ごせないものになっています。
マルウェアへの感染
SQLインジェクションでWebサイトの管理用アカウント情報が盗み出されてしまった場合、Webサイトを閲覧するだけでマルウェア感染するように書き換えられる可能性もあります。この場合、大きな被害を受けるのはサイト利用ユーザです。
興味をもってサイトに訪問してきてくれた結果マルウェアに感染してしまった、となるとユーザからの信頼が大きく下がってしまうでしょう。
SQLインジェクションの攻撃手口
SQLインジェクションの脆弱性を狙う攻撃では、主に次で紹介する3つのリクエストメッセージで攻撃を仕掛けてきます。
HTTPリクエストライン
HTTPリクエストラインは、何をどうしたいのかが書かれている場所です。
URLの末尾に「?」を付けた後ろに付与されるパラメータ部分を改ざんしたり、フォーム入力の場合でも入力フォームの値を改ざんすることで攻撃を仕掛けられる場合があります。
通常のWebサーバのログでコードの記録ができるため、ログの監視を行っていればどういった攻撃を仕掛けられたかの把握を比較的簡単に特定することができます。
HTTPヘッダ
HTTPヘッダには、Cookieや汎用ヘッダ・リクエストヘッダなどがあります。このHTTPヘッダの値をWebアプリケーション側で取り出しSQL文の生成に利用している場合は、SQLインジェクションの攻撃対象になる場合があります。
Webアプリケーションで値を取り出しSQL文を生成する場合、Cookieに攻撃コードを仕掛けることで攻撃されます。
HTTPサーバの標準のログ設定では、HTTPヘッダの内容が全て記録できていない場合があるので注意しましょう。
HTTPメッセージボディ
HTTPメッセージボディは、HTTPリクエストラインより大容量のデータをサーバに送信することができます。HTTPメッセージボディに含まれる値をWebアプリケーションが取り出して、SQL文の生成に使用している場合も、HTTPヘッダと同様に攻撃の対象になる可能性があります。
HTTPメッセージボディは大容量のデータが送信できるため、利便性が高いですが、HTTPサーバの標準ログ記録機能ではコードの内容を記録できないため、攻撃者の行動を追跡しにくい欠点があります。
SQLインジェクションの攻撃手口のまとめ
今回紹介した3つの攻撃は、HTTPサーバの標準ログ以外でのログ監視が有効です。攻撃されないように対策をすることも重要ですが、万が一攻撃された場合に追跡ができるよう、標準以外でのログ監視も導入しておくと良いでしょう。
SQLインジェクションの有効な対策方針は?

SQLインジェクションの対策方法は多岐に渡ります。対策方法やその対策でどういった対応ができるのかは次の通りになります。

表で紹介した各対策方法の詳細を確認してみましょう。
入力値を制限する
先に紹介したようにSQLインジェクションは、Webサイトの入力フォームなどの入力画面にSQL文を注入することで攻撃を仕掛けます。そのため、Webサイトの入力画面で入力値を制限することが、有効な対策として挙げられます。 例えば、英数字しか入力できないようになっている入力フォームでは、文字列がWebサイトの仕様に沿って入力されているか判断する機能があるといいでしょう。そして、規定した文字以外が入力されたらエラーメッセージを表示させて、再入力を促すような仕組みが必要になります。
プレースホルダーを利用して入力値を変数にして格納する
SQLインジェクションの対策として有効なのが「プレースホルダー」と呼ばれる仕組みです。これは、SQL文の中でなんらかの値を入れたい部分に「?」などの記号を置いて、後からその部分に数字を当てはめる処理をいいます。SQL文で変動する箇所にプレースホルダーを使っておくと、SQL命令となる文が無効化され、データベースに命令を出せない状態となります。
動作環境を更新して常に最新の状態に保つ
各種の動作環境を常に最新のバージョンにアップデートしておくことも大切です。これはSQLインジェクションに限らず、あらゆるサイバー攻撃やマルウェア対策でも共通することとして、改めて認識しておくことをおすすめします。 例えばWebサイトでよく使われるWordPressや各種プラグインなどは、発見された脆弱性を修正したものが常にアップデートされています。Webサイトをいつも最新のバージョンにして利用することで、SQLインジェクションのような攻撃のリスクを減らすことができます。
エスケープ処理・サニタイジングを行う
エスケープ処理は、プログラム言語のなかで使う特殊記号を、記号としてではなくただの文字として扱いたいときに行う処理のことを指します。例えば、「”」の記号はプログラミング言語でも使われますが、Webサイト上で文字のひとつとしてこれを表示したいときは、このままでは正しく指示できないため、代わりに「¥」のマークを使います。このようにして、SQL文に悪用される文字を別の無害な文字に書き換えてしまい、命令を出せないようにします。
「サニタイジング」は、プログラムにとって意味を持つ文字や文字列を検知し、それを無害な表記に置き換えることを指し、エスケープ処理と同じように無害化できるメリットがあります。
WAFの導入を検討する
WAFとはWeb Application Firewallの略で、Webサイト上のアプリケーションに特化したファイアウォール(Firewall)のことを言い、SQLインジェクション対策としてよく知られています。 一般的なファイアウォールでは難しい場合でも、WAFならアプリケーションレベルで不正な攻撃から守るように作られています。
セキュリティの脆弱性を診断する
これまでにも紹介したように、SQLインジェクションの攻撃者は脆弱性のあるWebサイトを探してターゲットにしていきます。そのため、企業が運営するWebサイトやECサイトに脆弱性がないのかを常にチェックすることが大切です。
脆弱性は自分で判断することは難しいため、専門家に任せる必要があるでしょう。そこでおすすめなのが、NECフィールディングの「Webセキュリティ診断サービス」。稼働中のサーバを停止することなく、セキュリティエンジニアが診断用PC・携帯端末を通してWebサイトの安全性についてチェックを行います。その後は、リスクや対処法も含めた検出結果を報告書としてまとめます。 実際に利用した方からは、「思わぬ脆弱性が見つかった」「スマホ向けコンテンツでも、的確な診断を得られた」などの声を受けています。企業の社会的信用を失わないためにも、脆弱性のチェックから始めてみることを検討してはいかがでしょうか。
詳しくはこちら>>
https://www.fielding.co.jp/service/security/websecurity_check/
不正なSQLインジェクションから守ろう
データベースに不正な攻撃を仕掛けてくるSQLインジェクションについて解説しました。年々多様化し、被害数が増えているサイバー攻撃のなかでも、SQLインジェクションは大切な顧客情報を漏洩させたり、機密情報を損失させたりすることにつながりかねません。SQLインジェクションの被害で個人情報を大量に漏洩させ、多大な損害を受けた企業もあります。
顧客や取引先に迷惑をかけたり、これまで築いてきた企業としての信用を失わないためにも、SQLインジェクションの手口や仕組み、有効な対策について改めて考えてみてはいかがでしょうか。
関連記事

クロスサイトスクリプティング(XSS)とは、サイトの脆弱性を悪用し、個人情報などを盗み出すセキュリティ攻撃のことです。インターネットが生活インフラ、ビジネスインフラとなっている今、セキュリティ対策は企業にとって最重要課題です。
ここではクロスサイトスクリプティングの基礎知識、種類、仕組み、リスク、さらにはクロスサイトスクリプティングを防ぐ対策を紹介します。

Webアプリケーションファイアウォール(WAF:ワフ)は、Webアプリケーションの脆弱性を狙った攻撃を防ぐための専用ツールです。この記事では、WAFの概要や役割、仕組みや必要性といったWAFについての基本を解説。さらにWAFの機能やWAF導入を検討すべき組織、WAFで対応できる攻撃、WAFの種類や検知ロジック、導入前に検討したい注意点などを取り上げます。

脆弱性診断(セキュリティ診断)とは、ネットワークやOSなどに脆弱性がないか診断することであり、システムを安全に運用するために定期的に行うプロセスです。主な脆弱性の種類とセキュリティ事故の例について確認しながら、脆弱性診断(セキュリティ診断)の重要性について確認しましょう。脆弱性診断(セキュリティ診断)の具体的な種類と方法、費用についても詳しく解説します。
発行元:NECフィールディング
お客さま事業・業務にお役立ていただける情報をお届けします。
ご相談はお問い合わせフォームよりご連絡ください。
※当社は法人向けサービスを提供しているため、個人のお客さまに対してはサービス提供できません。あらかじめご了承ください。