Webアプリケーションの脆弱性を突くSQLインジェクションの仕組みとその対策

2017.12.14

Webセキュリティ

SQL-Injection

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インジェクション攻撃を実行させないようなアプリケーション開発を行いましょう。
ユーザーは万が一のことに備えてウイルス対策ソフトをインストールすることを忘れないようにし、ソフトウェアを最新の状態にしておくべきでしょう。

おススメのクラウド型WAF

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

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

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