セキュリティ 2019.11.05 2023.09.17
SQLインジェクションとは?仕組みや事例、7つの対策方法を解説
SQLインジェクションとは、脆弱性のあるWebアプリケーションに対して不正にSQLコマンドを注入(インジェクション)して実行させ、データベースにアクセスするサイバー攻撃の一種です。
SQLインジェクションを受けると、情報漏洩やデータの改ざん・削除が行われサイト管理者だけでなく利用しているユーザーにとっても大きな被害が出る恐れがあります。
本記事では、SQLインジェクションの仕組みと被害事例・対策方法を解説していきます。
目次
SQLインジェクションとは
SQLインジェクションとは、データベースを使用したアプリやサイトに対して行われるサイバー攻撃の一種です。
SQLはデータベースを操作するために用いられる言語で、データベース内にあるデータの登録・変更・削除を行うことができます。
攻撃者は、個人情報を登録しているWebサイトやアプリの脆弱性を狙い、SQL文を注入(インジェクション)することで、データを盗んだり改ざん・削除を行います。
クロスサイトスクリプティングとの違い
SQLインジェクションの他、Webサイトを狙ったサイバー攻撃としてクロスサイトスクリプティングがあります。
クロスサイトスクリプティングは、Webページに悪意のあるコードを仕掛け、ページ閲覧者の個人情報を盗むといった被害をもたらします。
SQLインジェクションとクロスサイトスクリプティングを比較すると、攻撃の仕組みと対象が異なることが分かります。
- SQLインジェクション:データベースを操作し、主にWebサイトの運営元を攻撃する
- クロスサイトスクリプティング:Webページを操作し、主に閲覧ユーザーを攻撃する
クロスサイトスクリプティングについては、こちらの記事で詳しく解説しています。
SQLインジェクションの仕組み
SQLインジェクションの仕組みは、攻撃者がWebサイトのログイン画面や検索バーにてSQL文を注入することによって起こります。
例えば、ECサイトなどで商品を検索する際ユーザーからの入力をサーバーで処理し、データベース内から検索結果に応じた内容をユーザーに対して返しています。
セキュリティ対策していないサーバーやエスケープ(後述)を施していないサイトでは、悪意あるSQL文を正常だと判断し、サーバーを介しデータベース内の情報を閲覧できてしまうということです。
悪意あるユーザーがSQLインジェクション行うと、場合によっては閲覧だけでなくデータの抽出や作成が可能となってしまいます。
抽出することができてしまえば情報漏洩につながり、作成することができれば権限変更や乗っ取り、マルウェアの混入など行うことができてしまいます。
個人的な被害ではなく、多くの人に対して被害が出てしまうので注意が必要です。
SQLインジェクションによって起こり得る被害
ここからは、SQLインジェクションによって起こり得る被害について具体的に解説します。
データベースにある個人情報の漏えい
データベースにある顧客の氏名や住所、メールアドレスなどの個人情報が盗まれ、悪用される恐れがあります。
これにより、迷惑メールによる被害の拡散などの二次被害にもつながります。
データベースにある情報の改ざんや消去
データベースにあるパスワードなどのログイン情報を勝手に変更したり、最悪の場合にはサービスを停止させたりします。
Webサイトの改ざん
Webサイトの内容を改ざんされるリスクもあります。
リンクを改ざんして悪意のあるサイトに誘導したり、ページ閲覧者へ攻撃を行うことも可能です。
SQLインジェクションによる被害事例
ここからは、過去に起きたSQLインジェクションによる被害事例を紹介します。
SQLインジェクションがあった時の対処法についても書いていますので、参考にしてください。
【リサーチ会社】会員情報の流出
リサーチ会社の公式サイトのサーバーに、SQLインジェクションによる不正アクセスがあったことが発覚しました。
これにより、会員のメールアドレスとログインパスワードが流出し、その件数は最大で10万1988件にも上りました。
なお、攻撃されたデータベースにはクレジットカード情報や調査に関する機密情報は保管されていなかったため、これらの流出被害を免れました。
この被害に対し、以下の対応が行われました。
- サイトの一時閉鎖
- ログインパスワードの初期化
- セキュリティ対策ツールの導入
【鉄道会社】Webページの改ざん
鉄道会社のホームページが、SQLインジェクションによって改ざんされた可能性があると発表されました。
アクセスすると悪意ある外部サイトへ誘導される状態にありましたが、個人情報の流出は確認されていないとのことです。
この被害に対し、以下の対応が行われました。
- サイトの一時閉鎖
- 改ざんされたサイトにアクセスした可能性のあるユーザーに対し、セキュリティ対策ソフトによるチェックを促す
【市役所】職員情報の流出と不正メールの送信
某市役所の情報共有システム「グループウェア」が、サイバー攻撃に遭った事例です。
その結果、職員のIDとパスワードがSQLインジェクションによって流出し、アカウントを乗っ取ってメールが送信されたとのことです。
プログラムに脆弱性がある状態で、グループウェアの機能の一部を外部公開したことが原因とされています。
この脆弱性は診断で検知されず、セキュリティ機器でも攻撃を防げなかったそうです。
被害に対し、以下の対応が行われました。
- プログラム上の脆弱性対策を徹底
- 攻撃の検知機能の強化見直し
WordPressはSQLインジェクションのターゲットになりやすい?
上記のように、SQLインジェクションの被害に遭う企業は決して少なくありません。
特に、WordPressはユーザー数が多くポピュラーなCMSであるため、SQLインジェクションの被害に遭うユーザーも相対的に多くいることは事実です。
しかし、だからと言って、WordPressが危険というわけではありません。
正しいセキュリティ対策を行っていれば、安全にWordPressを使用できます。
WordPressサイトを運営している方は、SQLインジェクションをはじめ、さまざまなサイバー攻撃に対処できるようしっかりセキュリティ対策を行いましょう。
SQLインジェクションへの対策方法は、次項で解説します。
SQLインジェクションへの6つの対策方法
SQLインジェクションを対策する方法を6つ紹介していきます。
Webサイトやアプリケーションを運用・開発している方は、対策されているか確認し、まだ対策していなければ下記の対策を行い安全な運用をしましょう。
エスケープ処理を行う
ユーザーが入力できる検索バーや入力フォームがある場合には、特定の文字をエスケープ処理する必要があります。
エスケープ処理によって、意味のあるSQL文の実行を防ぐことが可能です。
エスケープしていない場合、意味のある処理として実行されデータベース内を攻撃者の好きなようにできてしまうので注意しましょう。
SQLインジェクションだけでなく、クロスサイトスクリプティングなど他のサイバー攻撃に対しても有効な対策です。
プレースホルダを利用する
プレースホルダとは、データベースクエリ内で値を動的に挿入するための仕組みです。
変数の場所を表す記号を置き、後から実際の値を割り当てる処理を行います。
プレースホルダを利用すると、不正なSQLのコード文が単なる値として処理され、SQL文で使用する特殊文字を無効化できるため、SQL文による命令実行を防ぐことができます。
実際のSQL文を例に、もう少し分かりやすく解説します。
次のSQL文は、検索ボックスに入力された文字と一致するデータを「user」というテーブルから取り出すよう指示するものです。
‘$name’という変数には、検索ボックスに入力された文字がそのまま表示されます。
もし、検索ボックスに攻撃者が悪意あるコードを入力すると、コードがそのまま表示され実行されてしまいます。
そこで、プレースホルダを利用すると次のようになります。
bindValue(‘:name’, $name, PDO::PARAM_STR);
直接的なSQLの命令文については、「:name」というプレースホルダを利用し、「bindValue」というメソッドを使って具体的な値を後から割り当てる(バインド)ことで、SQLを安全に実行することができます。
万が一不正なコードが入力されても、用意された値と一致しなければバインドされず、単なる値として処理されます。
WAFを導入する
WAFとは、Web Application FireWallの略でWebアプリケーションに対応したファイアウォールのことです。
WAFでは、アクセス元とWebサーバー間の通信をチェックし、攻撃を検知すると通信を遮断してくれます。
事前に定義されたリストに基づいて該当した場合に通信を遮断する「ブラックリスト方式」と通信可能な許可リストを事前に定義しておき該当する通信以外は全て遮断する「ホワイトリスト方式」の2種類があります。
WAFを導入することによって、Webサーバーやデータベースに対してのアクセスや入力を調査し適正な通信のみを許可しているため、Webアプリケーションを正常に保つことができます。
エラーをそのまま表示しない
エラーをそのまま表示すると、攻撃者に侵入のヒントを与えてしまうかもしれません。
特に、SQLエラーをそのままエラーとして表示させてしまっている場合は非常に危険です。
SQLエラーが発生した際には、各エラーに対応したページをあらかじめ用意して、表示するようにしましょう。
定期的なスキャンを行う
Webサイトやアプリケーションには、定期的にスキャンをするように心がけましょう。
気づかないうちにハッキングが起き、不正なSQL文が実行され悪質なデータベースが改ざんされているというケースも考えられます。
定期的なスキャンを行うことで、不正な改ざんによって悪意のあるスクリプトが埋め込まれているページがないか確認することができます。
自分で作成した覚えのないアカウントの追加や不審なコードの追加などが行われていた場合には、SQLインジェクションによる攻撃が疑われます。
ひとまず、サイトにはメンテナンス画面等を表示し、利用者に対する二次被害を防止することを優先しましょう。
その後、被害規模・影響範囲の調査を行い、脆弱性が疑われる箇所に対策を行いましょう。
あるいは、セキュリティ対策を行う専門家に相談するのも有効です。
WordPress本体やプラグインを最新の状態にする
WordPress本体やプラグインのアップデートは、セキュリティの脆弱性を修正するために行われる場合もあります。
そのため、WordPress本体やプラグインを最新の状態に保つことも、セキュリティ対策の1つです。
ただし、アップデートが原因でWordPressサイトに不具合が生じることもあるため、アップデートは慎重に行いましょう。
まとめ
今回はSQLインジェクションについて解説しました。
今では様々な場面で、個人情報を登録したり利用する場面が増えています。
個人情報を管理する運営者は、他人の情報を預かっているということを忘れずに、対策・運営していくことが必要です。
対策が難しいとお考えの方、対策してみたけど被害にあってしまったといった方はセキュリティの専門家がいる企業やセキュリティソフトの導入など行うようにしましょう。
『WordPressサイトの保守運用・セキュリティ対策』のご相談はこちら
『WordPressサイトの制作・リニューアル』のご相談はこちら
WordPress保守・運用のパートナーなら「wp.support」にお任せ!
WordPressサイトを運用していて、以下のようなお悩みはありませんか?
- 管理画面を使いやすくしたいけれど、カスタマイズする時間や技術がない…
- サイトのUI/UXを改善したいけれど、自社内では難しい…
- WordPressサイトを高速化したいけれど、ノウハウがない…
- セキュリティ対策をしたいけれど、知識のある人材がいない…
- 日々の業務に追われて、バージョンアップなどの保守業務が放置気味…
- ちょっとしたトラブルを気軽に相談できる相手が欲しい…
「wp.support」は、WordPressのプロフェッショナル集団によるWordPress保守サービスです。
「セキュリティ対策」「バージョンアップ対応」「定期バックアップ」はもちろん、「電話サポートが無制限」なのでカスタマイズの方法やトラブル発生時にも気軽にプロに相談できます。
既に導入済みのお客様からも、
「些細なことでも気軽に相談できるパートナー的な存在」
「困ったら相談していいんだ、と気持ちが楽になった」
と大変ご好評をいただいています。
WordPress保守・運用のパートナーをお探しなら、ぜひお気軽にお問合せください。
バージョンアップが面倒だと思ったら WordPress保守・セキュリティ対策は『wp.support』にお任せ!
WordPressのバージョンアップやセキュリティ対策にお悩みではないですか?
面倒な保守・運用作業は全て任せて、コア事業に集中してください。
大手・上場企業100社以上のWebサイトの安全を守る、WordPressのプロフェッショナル集団が、あなたのWordPressサイトを守ります!
【対応範囲】
・WordPress、プラグインのバージョンアップ ・セキュリティ対策 ・継続的なバックアップ ・緊急時の復旧対応 ・技術サポート・電話/メールサポート無制限 etc...
WordPressに関することなら何でもご相談ください!