SQLインジェクション攻撃とWAFによる対策方法

2017.07.27

WAF

php-security-measures

Webサイトへのサイバー攻撃のなかで、有名な攻撃の一つがSQLインジェクション攻撃です。SQLインジェクション攻撃は2005年頃から観測され、そこから急増し今でも被害が出続けているサイバー攻撃の手法です。2017年には「ヤマサちくわオンラインショップ」や日販アイ・ピー・エスの「CLUB JAPAN」といった大手企業がSQLインジェクション攻撃を受け、多くの個人情報やクレジットカード情報が漏えいする事態となりました。顧客や取引企業など多くの個人情報を抱える企業にとって見過ごせないSQLインジェクション攻撃についてご紹介します。

目次

SQLインジェクション攻撃とはどのようなものか

SQLインジェクションはWebサイトの代表的な脆弱性の一つです。脆弱性とはプログラム作成時のミスやバグ、他のシステムとの連動に発生するエラーのようなものです。情報を守るセキュリティシステムにとっては、脆弱性は悪質なウイルスや不正侵入を許す綻びとなります。SQLインジェクション攻撃とはこの脆弱性を悪用したもので、Webサイトの背後にあるデータベースへアプリケーションが想定しないSQL文を送り込み実行させるものです。想定しないSQL文を送り込まれたことで、システムは脆弱性を無理やり引き起こされる形になります。不正侵入を許し、攻撃者によりデータベースを不正に操作されると、重要情報の漏えいやWebサイトが改ざんされる被害がでます。

重要情報の流出

SQLインジェクション攻撃を受けた場合の被害として代表的なものが、情報の漏えいです。企業が一般公開していない機密情報や個人情報などが漏えいする被害。クレジットカード情報を蓄積している場合は、クレジットカード番号や名義も漏えいすることがあります。

Webサイト改ざん

SQLインジェクション攻撃の被害で最近多くなっているものが、企業や政治団体などのWebサイト改ざんです。攻撃者によってWebサイトの内容が書き換え、削除される被害。昨今はWebサイトにウイルスが埋め込まれ閲覧者がウイルスに感染するという被害が増加しています。この他にも、システムへ不正ログインや乗っ取りといった被害が出ます。不正ログインの手法も年々高度になり、対策を立てることが困難になってきています。

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

日販グループ会社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文が送り込まれることを防ぐ必要があります。以前にも書いていますが、SQLインジェクション攻撃の対策をご紹介します。

SQLインジェクションが発生する原因は、本来実行されるべきSQLの構文が変更されるためなので、対策としてはSQLの構文の変更を防ぐことが必要となります。
代表的な対策は、「プレースホルダ」の利用です。
プレースホルダを利用することで、SQLの構文が事前に確定し、ユーザーからの入力値等によって不正なSQLが実行されることを防ぐことができます。
※厳密には、プレースホルダには静的プレースホルダと動的プレースホルダの2種類があります。ここでは、より安全な静的プレースホルダを利用する想定で記載しています。
この場合、「攻撃手法」で記載したように、攻撃者がパスワードに「’ OR ‘a’ = ‘a」に入力したとしても、「’ OR ‘a’ = ‘a」は単純な文字列として扱われるため、SQLの構文が変わることはありません。

抑えておきたい基本的なセキュリティ対策

この他にも、サイバー攻撃を防ぐために以下のような基本的なセキュリティ対策をすることが大切です。単独のセキュリティ対策よりも、いくつかの対策を併用するスタイルが安心・安全のセキュリティ対策に繋がります。

安全なWebサイトを制作

根本的なSQLインジェクション攻撃の対策としては、安全なWebアプリケーションを開発することです。セキュアプログラミングでSQLインジェクションの脆弱性が存在しないWebサイトを制作することで対策可能です。
また、独立行政法人情報処理機構(IPA)が公開している「別冊: 安全なSQLの呼び出し方」に基づいてWeb制作することで安全なWebサイト構築ができます。なお、Webサイト制作を外注する場合は、Webアプリケーションの脆弱性の責任は発注者側にあると判断されることが多いため、発注者は要求仕様にセキュリティ要件を盛り込んでおくべきです。制作・納品までの日数に余裕を持たせておくことで、システムチェックにも十分な時間を割くことができます。

Webアプリケーションを常に最新バージョンに保つ

SQLインジェクション攻撃を受けないためには、OSやアプリケーションに最新のバージョンが公開されたら、最新のバージョンへ更新、またはWebアプリケーションの改修が必要です。OSやアプリケーションのバージョンアップの中身は、脆弱性対策と言っても大げさではないでしょう。実行することで現段階に起こりうるリスクを下げることができます。例えば、人気CMS(コンテンツ管理システム)のWordPressは、バージョン4.7.1以前にSQLインジェクションに対する脆弱性が存在しますが、最新バージョンへアップデートすることで対応できます。このように、脆弱性にまつわる最新情報をこまめにチェックすることも大切になります。

すぐに導入できるクラウド型WAFで簡単に対策

WAF(Web Application Firewall)を導入してSQLインジェクション攻撃の対策をする方法もあります。
WAFはファイアーウォールやIPS/IDSでは防ぐことができない、Webアプリケーションの脆弱性を悪用したサイバー攻撃を防ぎます。SQLインジェクション以外の攻撃にも対応しているため、より安全にWebサイトを運用できるようになります。リソース不足によりWebアプリケーションを最新バージョンへ更新できない場合や、すぐにセキュリティパッチを適用できない状況でも、WAFを導入することでSQLインジェクション攻撃への対応が可能です。
なかでもクラウド型WAFは初期・運用コストが小さいため、手軽に対策できます。

クラウド型WAF「攻撃遮断くん」はシステム変更不要で最短翌営業日で導入可能です。新たな脆弱性にも自動で対応するため、サイバー攻撃の被害を未然に防ぐことができます。ユーザー側での運用は一切必要ないため、低価格かつ簡単に高セキュリティを実現します。

まとめ

今回は有名なサイバー攻撃であるSQLインジェクションと、その手法について紹介しました。SQLインジェクション攻撃対策後もWebサーバのログを監視し、被害を受けていないかチェックすることで、万が一の場合も被害を最小限に食い止めることができます。個人情報漏えいなどの被害は、企業の利益損失や信用失落など経営課題に直結するため、Webサイト運営者にとってはセキュリティ対策が急務な状況です。ぜひこの機会にWebサイトのセキュリティ対策を見直し、WAFの導入を検討してみてください。

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

 

安価で高セキュリティなサービスを提供するクラウド型WAF「攻撃遮断くん」の詳細資料は、こちらからダウンロード頂けます。

この記事と一緒に読まれています