「SQLインジェクション」脆弱性への対策方法とは?

2020.02.19

Webセキュリティ

「SQLインジェクション」脆弱性への対策方法とは?SQL-Injection

SQLインジェクションとはWebアプリケーションへのサイバー攻撃手法であり、また、代表的なサイバー攻撃のひとつです。SQLインジェクション攻撃は2005年頃から観測されており、昨今の攻撃被害の急増に対してIPAなどによる注意換気が度々行われてきました。しかし、2020年現在においても攻撃被害の増加は止まる気配がありません。

 

SQLインジェクション攻撃を受けた大手企業から、多くの個人情報やクレジットカード情報の漏えいが起きています。顧客や取引企業などの個人情報を扱う企業にとって、このサイバー攻撃は対岸の火事と見過ごすことができなくなっています。

 

それでは、このSQLインジェクション攻撃の仕組みと対策について解説します。

目次

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

SQLインジェクション攻撃とは、Webアプリケーションの脆弱性を悪用したサイバー攻撃のひとつです。

 

Webアプリケーションは、ユーザからの入力情報を受け付けてサーバ側に送信し、サーバが処理した結果をユーザに返します。サーバは、データベースにアクセスし、情報の参照・更新を行います。ユーザから想定外の情報が入力されると、入力値のチェックなどによりWebアプリケーションはその情報を受け付けずに、エラーとして処理する必要があります。

 

しかし、こうしたエラー処理を適切に行わない場合、攻撃者が入力したSQLと呼ばれるデータベース操作コマンドを含む内容をそのままサーバが受け付けます。

 

これにより、攻撃者は不正にSQLを実行してデータベース内の重要情報の窃取、コンテンツの改ざんなどを実行します。

 

SQLインジェクションによるコンテンツの改ざんとして、Web 閲覧者のパソコンにマルウェアの侵入を試みるプログラム (スクリプト) を書き込むケースがあり、図のような仕組みで攻撃を行います。

 

攻撃者はWebアプリケーションの入力フォームにデータベースの操作を行うSQL文を入力し、Webサーバを介してデータベースに不正なスクリプトを実行します。

 

不正なスクリプトであっても、Webアプリケーションは入力内容を受け付けて正常に処理するため、Webサーバのログでは一見問題のある内容と判別できません。ログに記載された処理内容の詳細を確認することで、不正な操作を受けたことが判別できます。

 

つまり、ログ監視の対象がWebサーバの処理ステータスの正常/異常だけであった場合、不正な操作を検知することは困難です。(図①→②)

 

図③の段階では、ユーザの閲覧操作で不正なスクリプトを実行するコンテンツがWebサーバ上に公開されています。

 

そして図④の段階で、標的Webサーバのコンテンツをユーザが閲覧すると、ユーザの端末上で不正なスクリプトが実行されます。

 

ユーザーにとっては普段から訪れているWebサイトなので、閲覧操作時に特に注意を払うようなことがないため、ウイルス対策ソフトで検知されない限り、マルウェアに感染したことに気が付かない可能性があります。ウイルス対策ソフトによる自衛以外ユーザには対策手段がないため、サービス提供者側がSQLインジェクションの対策を行う必要があります。

 

それでは、サービス提供者はどのような対策を行えばよいのでしょうか?

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

SQLインジェクションの対策方法として、以下4点が挙げられます。

①安全なWebアプリケーションを開発する

安全なWebアプリケーションを開発することは、SQLインジェクション攻撃への根本的な解決策となります。

 

1.プレースホルダを利用する

 

SQLには通常、プレースホルダを用いてSQL文を組み立てる仕組みがあります。SQL文の雛形の中に変数の場所を示す記号(プレースホルダ)を置いて、後に、そこに実際の値を機械的な処理で割り当てるものです。Webアプリケーションで直接、文字列連結処理によってSQL文を組み立てる方法に比べて、プレースホルダでは、機械的な処理でSQL文が組み立てられるので、SQLインジェクションの脆弱性を解消できます。(IPA「安全なウェブサイトの作り方 – 1.1 SQLインジェクション」参照)

 

プレースホルダにクエリ内のパラメータの値だけを変更してクエリを実行できるプリペアドステートメント機能を利用します。プレースホルダに実際の値を割り当てる処理をバインドと呼びます。

 

2.エスケープ処理を行う

 

エスケープ処理では、検索バーや入力フォームなどSQLインジェクション攻撃を受けやすい機能を実装しているWebサイトに対して、特定の文字が普通の文字として解釈されるよう処理します。エスケープ処理を行うことで、SQLインジェクションを受けた際に、攻撃コードの中の特定の文字列や記号を削除したり置き換え、攻撃を無効化できます。エスケープ処理の実施には専門的な知識が必要ですが、その分高い効果を期待できます。

 

3.アプリケーションに渡されるパラメータにSQL文を直接指定しない

 

Webアプリケーションに渡されるパラメータにSQL文を直接指定する実装は、そのパラメータ値の改変により、データベースの不正利用につながる可能性があります。IPAが提供する「安全なウェブサイトの作り方 – 1.1 SQLインジェクション」では避けるべき実装として挙げられています。

 

4.適切な権限管理を行う

 

これは、もしもSQLインジェクション攻撃を受けた場合に被害をなるべく小さく抑えるための方法です。Webアプリケーションがデータベースと接続した際、アカウントの権限が必要以上に高ければ、それだけ被害も大きくなります。そこで、あらかじめWebアプリケーションからデータベースに送信できる命令文を特定して制限をかけます。そうすれば攻撃者が不正なSQL文を入力した場合でも、情報漏洩などの被害を抑えることができます。

②WordPressといったCMSなど、システムとして導入されているWebアプリケーションを最新バージョンにする

コンテンツ管理システム(CMS)として代表的なWordPressは、脆弱性が発見されるとセキュリティパッチを適用したバージョンが公開されます。発見される脆弱性の中にはSQLインジェクションを引き起こす脆弱性もあるため、迅速なセキュリティアップデートが必要です。

 

積極的に脆弱性情報の収集を行うようにしましょう。

③定期的にWebアプリケーションの脆弱性診断を行う

外部の脆弱性診断サービスを利用し、第三者の目線でWebアプリケーションに脆弱性がないか定期的に確認しましょう。Webアプリケーションの改修時などにも脆弱性診断を行うことで、想定しない脆弱性の混入を防ぐことができます。

④WAFを導入する

WAF(Web Application Firewall)の導入により、SQLインジェクション攻撃を防御することが可能です。WAFには、アプライアンス型(ハードウェア)、ソフトウェア型、クラウド型の3種類があり、中でもクラウド型WAFへの注目が高まっています。

 

クラウド型WAFは、セキュリティの専門知識を有する担当者が不要な上、ネットワーク機器などのインフラ面での調達も不要なセキュリティ対策サービスです。加えて、初期費用や運用コストが安価であり、契約プランの選択における柔軟さを併せ持ちます。

 

このように、他のWAFに比べて利用者側の負担が小さいというメリットは、一方で、サービスの品質をWAFベンダーに依存することを意味し、場合によってはデメリットとなり得ます。利用者は、それぞれのWAFサービスがどのような攻撃に対応しているかなどの情報を収集し、慎重に自社に合ったサービスを選定する必要があります。

SQLインジェクション攻撃を受けて個人情報が流出した被害事例

ここまではSQLインジェクションの仕組みと対策について解説していきました。それでは、SQLインジェクションによってどんな被害が発生したのでしょうか?

 

SQLインジェクション攻撃による被害事例を紹介します。

①史上最大規模のSQLインジェクション攻撃

2011年ソニーグループに対する標的型と考えられるSQLインジェクション攻撃が発生しました。これはSQLインジェクション攻撃による情報漏えいの中でも最大規模のものでした。

 

2011年4月、ソニーのPlayStation関連のネットワークサービス「PlayStation Network」(PSN)で約7700万人の個人情報漏えいが発生

 

漏えいした情報は、氏名、住所、Eメールアドレス、生年月日、PlayStation®︎Network/Qriocity™パスワード、PlayStation®NetworkオンラインID購入履歴、請求先住所、パスワード再設定用の質問への回答等のプロフィールデータ、サブアカウントに関する情報とのことです。

 

http://cdn.jp.playstation.com/msg/sp_20110427_psn.html

 

https://jp.reuters.com/article/idJPJAPAN-20830920110427

②日販グループ会社SQLインジェクション攻撃で最大13万件の顧客情報が流出

現代の社会において、多くの情報がネット上に保管されています。保管されている情報は、場合によっては盗まれてしまうと、現金盗難以上に大きな騒ぎとなります。

 

2017年2月に日販グループの日販アイ・ピー・エスのWebサーバが不正アクセスを受け、クレジットカード情報など顧客の個人情報が流出していたことがわかりました。2016年12月23日から27日にかけて、Webサーバの脆弱性を悪用したSQLインジェクション攻撃により、同社が運営する「CLUB JAPAN」「MagDeli」で最大13万1936件分の顧客情報が流出。流出情報の大半は会員のメールアドレスやIDでしたが、約30件のカード名義・カード番号などのクレジットカード情報も同時に流出しました。

 

参考リンク:「SQLi攻撃」で最大13万件の顧客情報が流出 – 日販グループ会社

 

よく知られたサイバー攻撃のひとつであるSQLインジェクション攻撃について、その手法や対策方法、被害事例を紹介しました。

 

SQLインジェクション攻撃への対策後もWebサーバのログを監視し、攻撃を受けて被害に遭っていないかチェックすることで、万が一の場合でも被害を最小限の範囲に留めることができます。個人情報漏えいなどの被害は、企業の利益損失や信用失落などの経営課題に直結します。Webアプリケーションを利用したサービスを提供する企業にとってSQLインジェクションなどのサイバー攻撃への対策は喫緊の課題なのではないでしょうか。ぜひこの機会にWebアプリケーションのセキュリティ対策を見直し、WAFの導入をご検討ください。

SQLインジェクション対策におすすめのクラウド型WAF

WAFを選定する際には、サポート体制なども重視して、自社に最適なサービスを選びましょう。

 

選択肢が多いクラウド型WAFですが、導入のしやすさでおすすめ製品のひとつとして「攻撃遮断くん」が挙げられます。利用者側のシステム自体への変更が不要のため、最短では翌営業日での導入が可能です。また、ユーザー側がWAFのチューニングなどの運用を行う必要がないため、導入と運用の費用を抑えて簡単に高度なセキュリティ環境を実現することができます。

 

「攻撃遮断くん」の詳細資料は、こちらからダウンロード頂けます。

クラウド型WAF 攻撃遮断くん Web Application Firewall
https://www.shadan-kun.com/

 

(2017/12/14執筆、2020/2/19修正・加筆)

  • 国内商用Webサイトが受けやすいサイバー攻撃とは?|サイバー攻撃の統計データから傾向を読み解く|今すぐ無料で資料をダウンロード
  • 御社のセキュリティ対策は本当に大丈夫ですか?約80%の企業が対策不足と言われています。Webセキュリティをいますぐ確認!3つのチェックポイント。今すぐ無料で資料ダウンロード