SQLインジェクションとは?被害事例と対策方法5つ!

SQLインジェクションとは?被害事例と対策方法5つ!
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SQLインジェクションとは、データベース使用しているアプリやサイトに対して行われるサイバー攻撃の一種です。

SQLインジェクション攻撃をされしまうと、情報漏洩やデータの改ざん・削除が行われサイト管理者だけでなく、利用しているユーザーにとっても大きな被害がでる恐れがあります。

本記事では、SQLインジェクションの仕組みと被害事例・対策方法を解説していきます。

SQLインジェクションとは

SQLインジェクションとは、データベースを使用したアプリやサイトに対して行われるアイバー攻撃の一種です。

SQLはデータベースを操作するために用いられる言語で、データベース内にあるデータの登録・変更・削除を行うことができます。
攻撃者は、個人情報を登録しているWebサイトやアプリの脆弱性を狙い、SQL文を注入(インジェクション)することで、データを盗んだり改ざん・削除を行います。

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

SQLインジェクションの仕組みは、攻撃者がWebサイトのログイン画面や検索バーにてSQL文を注入することによって起こります。

例えば、ECサイトなどで商品を検索する際ユーザーからの入力をサーバーで処理し、データベース内から検索結果に応じた内容をユーザーに対して返しています。
通常ユーザーの場合

セキュリティ対策していないサーバーやエスケープを施していないサイトでは、悪意あるSQL文を正常だと判断し、サーバーを介しデータベース内の情報を閲覧することができるということです。

悪意あるユーザーがSQLインジェクション行うと、場合によっては閲覧だけでなくデータの抽出や作成が可能となってしまいます。

悪意あるユーザーの場合

抽出することができてしまえば情報漏洩につながり、作成することができれば権限変更や乗っ取り、マルウェアの混入など行うことができてしまいます。

個人的な被害ではなく、多くの人に対して被害が出てしまうので注意が必要です。

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

SQLインジェクションの被害事例を紹介します。
SQLインジェクションが行われた後の対処もどのようなことが行われているかも書いていますので参考にしてみてください。

事前に対策することで、攻撃の可能性を低くすることができます。

WordPressがSQLインジェクションに利用される可能性

2016年7月15日にUbuntuはフォーラムサイトが悪用され、200万人の情報が流出したと報告しています。

攻撃者はフォーラムのデータベースサーバー上にあるデータベースにフォーマットされた特定のSQLを挿入することができ、全てのテーブルの読み込みが可能という非常に危険な状態でした。
攻撃者はこのアクセス方法を利用し、200万人のユーザー名・メールアドレス・IPアドレスを含むユーザーテーブルのデータを一部ダウンロードしています。

Ubuntuは以下の対処を行いました。

  • vBulletinで実行しているサーバーのバックアップ
  • 最新パッチの適用
  • データーベースの再構築
  • ユーザー名・パスワードのリセット
  • WAFの導入
  • vBulletinの監視改善

被害額等は公表されておらず、もしユーザーデータの悪用が行われていた場合、より大きな損害になっていたことが考えられます。

参考:Ubuntuフォーラムから200万人の情報流出

釣りビジョン、お客様情報流出

株式会社釣りビジョンが運営している、Webサイトに対してSQLインジェクションが行われたことにより、プレゼント応募や人気投票に使われていたデータベースから63,656人の個人情報が流出したと報告しています。
流出した情報は、メールアドレス・氏名・住所の流出が確認されておりクレジット等の決済情報に関しては流出していません。
委託会社からのサーバー異常検知の報告を受けアクセスログの調査を行い、脆弱性診断ツールの脆弱性を利用したSQLインジェクションが行われていたことを確認しています。

釣りビジョンは以下の対処を行いました。

  • 特定のIPブロック・脆弱性の除去
  • お客様窓口の設置
  • 関係官庁への報告
  • 不正アクセスにあったデータベースの削除
  • 個人情報を取得するフォームの一部閉鎖
  • 個人情報マネジメントシステムの実施
  • 情報セキュリティ管理体制・インフラ整備と強化

こちらも、被害額などは公表されていません。

本来、セキュリティリスクを下げるためのツールである脆弱性診断ツールに脆弱性が存在し、攻撃に利用されたケースです。
このように、悪意あるハッカーはあらゆるものを利用して攻撃をしかけてきます。不正アクセス等の攻撃を防ぐためには、サイトの定期的なセキュリティチェックを行うことが重要です。

参考:釣りビジョン:不正アクセスによるお客様情報流出に関するお詫びとご報告

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

SQLインジェクションを対策する方法を5つ紹介していきます。
Webサイトやアプリケーションを運用・開発している方は、対策されているか確認し、まだ対策していなければ下記の対策を行い安全な運用をしましょう。

エスケープ処理

ユーザーが入力できる検索バーや入力フォームがある場合には特定の文字はエスケープ処理する必要があります。

エスケープ処理することによって、意味のあるSQL文の実行を防ぐことが可能です。
エスケープしていない場合、意味のある処理として実行されデータベース内を攻撃者の好きなようにできてしまうので注意しましょう。

SQLインジェクションだけでなく、他のサイバー攻撃に対しても有効な対策です。

WordPressでも起きている!クロスサイトスクリプティングとは?

データベースにアクセス制限をかける

データベースに対して、アクセス権限をかけることができます。
ユーザーを作成した際に管理権限やIPアドレスの指定を行うことにより、

不特定多数のユーザーのアクセスを制限することが可能です。

ユーザー作成時にアクセスを制限することができますので、忘れずに設定しましょう。

6.3.4 アカウントリソース制限の設定

WAFを導入する

WAFとは、Web Application FireWallの略でWebアプリケーションに対応したファイアウォールのことです。

WAFを導入することで、不正なアクセスや処理を遮断することができます。
WAFがなければ、アクセスされる際の調査が行われないため、不正アクセスが通ってしまったり、不正な入力が正常なものとして処理される可能性があるため危険です。

WAFを導入することによって、Webサーバーやデータベースに対してのアクセスや入力を調査し適正な通信のみを許可しているため、Webアプリケーションを正常に保つことができます。

エラーをそのまま表示しない

エラーをそのまま表示してしまうと、攻撃者にヒントを与えてしまっている状態になっている可能性があります。

例えば、ログイン画面にてユーザーを検索するような不正なSQL文を実行していたとします。
検索したユーザーが見つからなかったことによって、「そのユーザーはいません」「その番号の方はいません」といったような不該当情報をエラーとして出力していた場合、攻撃者に対してヒントを与えてしまっています。
特に、SQLエラーをそのままエラーとして表示させてしまっている場合は非常に危険です。

エラー表示は適切な番号や文言、エラーページが存在しますので、各エラーごとに適切な処理を行うようにしましょう。

定期的なスキャン

使用しているWebサイトやアプリケーションには定期的なスキャンをするように心がけましょう。

いつハッキングが起き、不正なSQL文が実行されデータを格納されているかわかりません。
定期的なスキャンを行うことで、不正なコードやファイルが追加されているか確認することができます。

自分で作成した覚えのないファイルやフォルダ、アカウントの追加などが行われていた場合には注意が必要です。

まとめ

今回はSQLインジェクションについて解説しました。

今では様々な場面で、個人情報を登録したり利用する場面が増えています。
個人情報を管理する運営者は、他人の情報を預かっているということを忘れずに、対策・運営していくことが必要です。

対策が難しいとお考えの方、対策してみたけど被害にあってしまったといった方はセキュリティの専門家がいる企業やセキュリティソフトの導入など行うようにしましょう。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

記事が気に入ったら
wp.supportを "いいね!"
Facebookで更新情報をお届け。

WordPressの保守・セキュリティ対策なら「wp.support」