Webサイトを対象にしたサイバー攻撃は多数存在します。その中でも危険度が高いと言われているのが「SQLインジェクション(SQL Injection)」です。SQLインジェクションとはどのような攻撃なのか?どのような被害が発生するのか?正しいセキュリティ対策を実施するには、まず仕組みや対策を理解することが大切です。
本稿では、SQLインジェクションの基礎を解説し、セキュリティ対策として有効な「WAF(Web Application Firewall)」をご紹介します。Webサイトを保護し、ユーザーに被害を与えず、会社の信頼を守るためにもSQLインジェクションについて正しい知識を身につけましょう。
SQLインジェクションとはどのような攻撃か?
Webサイトを狙ったサイバー攻撃はWebアプリケーションの脆弱性を狙ったものが多く、その中でもSQLインジェクションの危険度は高いと言われています。
Webアプリケーションとは、検索エンジンやインターネットバンキング、ブログなど、Webを介したユーザーからのリクエストに応じて、さまざまなサービスを提供するためのアプリケーションのことで、脆弱性はセキュリティ上の欠点を指します。Webアプリケーションの開発では、セキュリティ対策を意識し、安全なサイトを構築するための「セキュアコーディング」が鉄則となりますが、人間がプログラムを作る限り脆弱性をゼロにすることは困難であると考えられます。
Webアプリケーションの役割の1つが、ユーザーから受けたリクエスト(情報入力)を受けて結果をユーザーに応答するというものです。たとえばECサイトにおいて「Apple Watch」と検索するとその結果が瞬時に返ってくるのは、Webアプリケーションがユーザーのリクエストを処理し、データベースからの応答を表示しているからです。
では、SQLインジェクションはどのように攻撃が実行されるのか?
「SQL」はデータベースの定義や操作を行うためのデータベース言語です。そして「インジェクション」は「注入」を意味します。ECサイトや会員制WebサイトではSQLサーバーを使用してデータベースを構築し、会員情報等のデータを記録し、必要に応じていつでも使用できるようになっています。
SQLインジェクションは、Webアプリケーションのセキュリティ上の不備、つまり脆弱性を意図的に悪用し、アプリケーションが想定しないSQL文を実行させることで
SQLインジェクションによる被害の事例
SQLインジェクションの被害として代表的なものが個人情報漏えいです。データベースを直接操作できることから、潜伏期間を必要とせず、攻撃が成功するとごく短期間で大量の個人情報が窃取される可能性があります。
個人情報漏えいの事例
フィッシング(釣り)専門番組を24時間365日配信するサービスを展開するT社では、2019年1月25日に同社Webサイト上にて、個人情報が流出した可能性があることを明らかにしています。
1月5日に同社がWebサーバーの保守管理を委託している会社から「異常を検知した」と連絡を受け、発覚しました。同社が調査したところ、通常ではありえない大量のアクセスを確認し、何者かが脆弱性診断ツールを悪用してSQLインジェクションを仕掛け、Webサーバー内に侵入した痕跡が発見されたとあります。流出したのは2006年以降のプレゼント応募や番組人気投票など、Webサイト上で入力された情報で、63,656名の個人情報が流出したと発表しています。
また、2021年4月5日にY社が運営する宅配クリーニングのサイトから、58,813名のカード情報が流出した可能性があることが分かりました。対象は、2020年11月16日までの間にカード情報を新規登録した顧客、登録済みのカード情報を変更した顧客、旧システムからの移行データとされており、2020年10月30日にクレジットカード会社からの情報流出の懸念から発覚しています。
調査の結果、SQLインジェクションの脆弱性が原因であることが判明しており、一部顧客のカード情報が不正利用された可能性も指摘されています。
2022年6月15日には、S社が運営するECサイトにおいて、SQLインジェクション攻撃により、2,753,400名の生年月日やメールアドレス、パスワードなどの個人情報が流出したと発表しています。この対応では、情報漏えいしたユーザーへ個別の案内や、特設窓口やサイトの設置、WAFの導入や脆弱性診断といった対策を行ったと報告されています。
このように、個人情報が流出してしまうと、原因の追究、顧客への連絡、特設窓口の設置、関係官庁への報告、セキュリティ対策の強化、再発防止策の実行など、すべての対応が完了するまで多くの時間と労力、莫大なコストがかかります。そして、信用を失うという大きな影響を受けることが考えられますので、しっかりと対策に取り組むようにしましょう。
SQLインジェクションの対策
SQLインジェクションの根本的対策は、セキュアなWebアプリケーションの開発・実装です。WebアプリケーションにSQLインジェクションの脆弱性がなければ、SQLインジェクションの攻撃を受けても影響はありません。
根本的対策として、SQL文の組み立てにバインド機構を使用するという方法があります。バインド機構とは、あらかじめSQL文のひな型を用意しておき、変動個所(プレースホルダ)に実際の値(バインド値)を割り当ててSQL文を生成するデータベースの機能で、アプリケーションが意図しないSQL文が注入されることを阻止することができます。
バインド機構を利用できない場合は、SQL文にとって特別な意味を持つ記号文字のエスケープ処理を行います。(たとえば、「’」→「”」のように変換し、「’or’1’=’1」を「”or”1”=”1」として無効な文字列にします。)エスケープ処理の必要がある文字列はデータベースサーバーによって異なるため、利用するデータベースに応じて対策する必要があります。
IPAが公開している「安全なウェブサイトの作り方 - 1.1 SQLインジェクション」などにも詳細な情報がありますので、参考にすると良いでしょう。
WAFによるSQLインジェクション対策
WAF(Web Application Firewall)は、Webアプリケーションの脆弱性を悪用する攻撃からWebサイトを保護するためのセキュリティ製品です。Webアプリケーションの脆弱性有無が把握できていない場合や、脆弱性を把握していても即座に対策ができない場合に、WAFを導入することで、リクエストの中身を検査し、SQLインジェクションを効率的に検出・防御することができます。
もちろん、前述の根本的な対策が理想ですが、繰り返されるWebアプリケーションの改良の中で対策漏れが生じてしまうこともあるかもしれません。Webアプリケーションの安全性を維持するには高いセキュリティ意識と知識、技術が必要となります。
このような実情から根本的な対策を基本としつつ、別のアプローチでの対策が求められるようになり、Webアプリケーションの脆弱性有無とは独立したかたちで攻撃を防御できるWAFの活用が急速に進んでいます。
WAFは、ユーザーからのリクエストを検査し、SQL文で特別な意味を持つ記号文字など、SQLインジェクション攻撃を検出・防御します。さらに、SQLインジェクション以外にもさまざまな攻撃に対応しています。以下のページでSQLインジェクション、ディレクトリトラバーサル、OSコマンドインジェクションによる攻撃とWAFによる防御の解説をしていますので、ぜひ参考にしてください。
いかがでしょうか?依然として危険性の高いSQLインジェクション。Webサイトのセキュリティ強化を検討されている場合は、ぜひWAFを活用してください。
- カテゴリ:
- WAF
- キーワード:
- セキュリティ
この記事に関する製品のご紹介
ホスト型WAF「SiteGuard Server Edition」
SiteGuard Server Editionは、ウェブサーバーのモジュールとして動作するホスト型WAF製品です。Webサーバー自体にインストールするため、専用ハードウェアが必要ありません。ネットワーク構成を変更せず、できるだけシンプルに導入したいお客様に最適な製品です。
詳細はこちら