サイバー攻撃の1つ「SQLインジェクション」への対策方法とは?

2019.06.24

Webセキュリティ

SQL-Injection

SQLインジェクションとは、数あるサイバー攻撃の中でも有名なサイバー攻撃の一つです。SQLインジェクション攻撃は2005年頃から観測され、そこから急増し2019年現在でも被害が増え続けてているサイバー攻撃の手法です。
大手企業がSQLインジェクションを受け、多くの個人情報やクレジットカード情報が漏えいする事態となっており、顧客や取引企業など多くの個人情報を抱える企業にとって見過ごせないSQLインジェクションとは一体どんな仕組みで実行され、その対策はどうするべきなのか解説していきます。

目次

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

SQLインジェクションとは、Webアプリケーションの脆弱性を突くサイバー攻撃の一つです。
Webアプリケーションはユーザからの各種情報入力を受けてサーバ側で処理し、結果をユーザに返すという処理があります。サーバの処理には、サーバやデータベースにアクセスし、情報参照・更新するという処理があります。
このような処理の過程では、Webアプリケーションは、ユーザから想定外の情報が入力されてもそのまま処理せず、正しくエラー処理を実施する必要があります。

しかし、こうした処理に不備があると、攻撃者から、SQLと呼ばれるデータベース処理をするためのコマンドを含む情報が入力された後、その内容でサーバが処理することで、サーバ上で攻撃者の思いのままにSQLが実行されてしまいます。
これにより、攻撃者は、不正なSQLを実行することによりデータベース内の重要情報の漏えい、コンテンツの改ざんといった攻撃を実行することができます。

SQLインジェクションによって行われるコンテンツの改ざんでは、多くの場合、Web 閲覧者にマルウェアの侵入を試みるプログラム (スクリプト) が書き込まれます。その場合の攻撃の仕組みを図で示します。


攻撃者はWebサーバを介してデータベースを攻撃します。Webサーバ上のアプリケーションのユーザが入力できる項目に対して、データベースの改ざんを行うSQL文を入力することで不正なスクリプト実行します。
なお、入力値は不正ですが、アプリケーションは正常に処理するので、Webサーバのログでは正常終了というステータスになるため、Webサーバのログを詳細に見ない限り不正な動作かは判明しません。
したがって、Webサーバのログ監視だけでは不正な動作を検知することは困難です。(①→②)
この段階で閲覧するとインターネット上で不正なスクリプトが実行されるコンテンツがWebサーバで公開された状態となっています。(③)
そして、この状態でユーザが標的Webサーバのコンテンツを閲覧すると、ユーザ端末上で不正なスクリプトが実行されます。(④)

ユーザーにとっては普段から訪れているサイトと変わらないので、注意深く閲覧するということはありません。そのため、ウイルス対策ソフトでの検知が出ない限り、知らない間にマルウェアに感染してしまう可能性があります。
ユーザ側での対処方法はウイルス対策ソフトを利用することしかないため、SQLインジェクションを実行させないための対処をサービス提供者側が行わなければなりません。
それでは、サービス提供者はどのような対策方法を行えばよいのでしょうか?

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

SQLインジェクションの対策方法としては、以下の4点があります。

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

サービス提供者がまず行うべき事柄は、Webアプリケーションの開発の段階で、安全な開発を行うことです。
ユーザーから想定外の情報の入力や悪意ある不正な情報が入力された場合も、正しくエラー処理を実施できるようにすることが重要となります。
Webアプリケーションを外注で開発する場合も、最終的な責任は発注者側にあると見られてしまう可能性が高いので、発注者は自衛のために要求仕様にセキュリティ要件を盛り込んでおく必要があります。

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

コンテンツ管理システム(CMS)として代表的なWordPressは、定期的に脆弱性が発見されセキュリティパッチが適用されたバージョンがその都度発表されます。中にはSQLインジェクションを引き起こす脆弱性もあるため、セキュリティアップデートが発表された場合は迅速なアップデートをする必要があるでしょう。
迅速な対応をするためにも、積極的に情報を集めておきましょう。

③Webサイトへのアクセスを監視する

サイバー攻撃が発生しても被害を最小限にするため、Webサイトへのアクセスを監視して、普段の正常なアクセス状態を把握しておきます。
その上で、万一SQLインジェクションが起きた場合、アクセス状態が明らかに異なることが多いので、異常に気づくことができます。そうすれば、Webサイトの公開を一時停止するなどの早めの対処が可能となります。

④WAFを導入する

WAF(Web Application Firewall)を導入すると、手間をかけずにSQLインジェクションによる攻撃を防止できます。この製品のタイプとして、アプライアンス型(ハードウェア)、ソフトウェア型、クラウド型の3種類があります。この中でも最近は、クラウド型WAFが注目されています。
これは、専門知識・専門家が不要、インフラの調達が不要、初期費用・運用コストが低い、柔軟なプラン契約というメリットがあるためです。
一方、WAFとしての性能はサービス提供者の品質に左右されるというデメリットがあるため、利用者は慎重にサービス提供者を選定しなければならない点には注意が必要です。

SQLインジェクションによって個人情報が流出したり、ウイルス感染を助長させてしまう可能性もあるため、サービス提供者はSQLインジェクション攻撃を実行させないようなアプリケーション開発を行いましょう。
ユーザーは万が一のことに備えてウイルス対策ソフトをインストールすることを忘れないようにし、ソフトウェアを最新の状態にしておくべきでしょう。

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サイト運営者にとってはセキュリティ対策が急務な状況です。ぜひこの機会にWebサイトのセキュリティ対策を見直し、WAFの導入を検討してみてください。

参考リンク:IPA「安全なウェブサイトの作り方」

おススメのクラウド型WAF

WAFを選定する時には、サポート体制や導入実績なども重視して、自社に最適なものを選びましょう。

クラウド型WAFも選択肢が多いですが、導入しやすいものとしておすすめするものに「攻撃遮断くん」があります。システム変更不要のため最短翌営業日で導入でき、ユーザー側での運用は一切必要ないため低価格かつ簡単に高セキュリティを実現できます。

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

 

(2017/12/14執筆、2019/7/24修正・加筆)