SQLインジェクション攻撃が現在も続いている中、その防止策は何か?

SQLインジェクションは古くから存在する攻撃手法であるにもかかわらず、現在も多数の被害が発生している。機密情報や個人情報を扱うWebサイト管理者には、SQLインジェクションへの適切な対策が求められている。本記事では、被害事例を交えつつ、その防止策について詳しく解説する。

SQLインジェクションによる被害とは?

デジタル時代の現在、ほぼすべての情報システムにおいてデータベースが活用されている。会員制サイトやECサイト、投稿機能を持つWebサービスなど、さまざまなWebサイトにデータベースが組み込まれている。たとえば、ECサイトでは顧客情報や商品情報、注文情報などの重要なデータがデータベースに保存されている。Webサイトのデータベースへのアクセスや操作は、主にSQLで記述されたプログラムによって行われている。

SQLインジェクションとは、このSQLというデータベース言語を悪用し、Webサイトのデータベースを不正に操作する攻撃手法を指す。これにより、次のような被害が発生する可能性がある。

1)情報漏えい

データベースに保存された企業の機密情報やクレジットカード番号などの個人情報が、意図しない形で外部に公開される恐れがある。盗まれた情報は、不正利用されたり、第三者に売られたりするリスクも存在する。

2)データの改ざん、破壊

SQLインジェクションは、データベースの内容を読み取るだけでなく、データを改ざんしたり破壊したりすることもある。データベース内の情報が不正に変更されると、業務に大きな影響を及ぼす可能性がある。

3)不正アクセス、システムの乗っ取り

企業のシステムやWebサービスが不正にアクセスされると、機密情報や個人情報の流出、新たな攻撃を仕掛けるための踏み台の設置、さらには不正操作が行われる可能性がある。たとえば、メールアカウントに不正アクセスされると、送受信履歴から個人情報が盗まれたり、マルウェアの拡散を助長したりする危険がある。金融サービスにアクセスされた場合には、不正な送金や商品購入が行われるリスクも存在する。

さらに、不正アクセスによってサーバーが乗っ取られ、深刻な被害をもたらすケースもある。サーバーの設定が変更され、バックドアが仕込まれると、痕跡を残さずに次の攻撃の踏み台にされ、他のサーバーへの被害が広がる恐れがある。

SQLインジェクション攻撃は、ユーザーが入力するWebサイトの検索フォームなどを経由して行われることが多い。このフォームは、入力されたデータを基にSQLを生成し、データベースから情報を取得する仕組みだ。そのため、WebサイトにSQLインジェクションの脆弱性が存在する場合、攻撃者はデータを不正に読み取ったり、改ざんや破壊を行うことができる。適切な対策が取られていない場合、これらの不正操作によって情報漏えいが発生する危険性がある。

SQLインジェクションによる被害事例

IPAの調査「ソフトウェア等の脆弱性関連情報に関する届出状況[2020年第1四半期(1月~3月)]」によると、報告されたWebサイトの脆弱性の中で、SQLインジェクションは11%を占めていた。また、この調査では被害として「データの改ざん・消去」が11%、「サーバ内ファイルの漏洩」が4%であったことからも、SQLインジェクションによる影響の深刻さが伺える。

前述の通り、Webサイトの運営には多くのリスクが伴い、実際に多くの被害が発生している。個人情報や機密情報を扱うWebサイトの管理者は、SQLインジェクション対策を適切に講じる義務がある。以下では、過去の具体的な事例を紹介する。

1)大手ゲーム会社で7,700万人の個人情報流出

2011年4月、大手ゲーム会社が提供するオンラインサービスが不正アクセスを受け、7,700万件の個人情報が流出。アプリケーションサーバーの脆弱性が原因の一つとされ、SQLインジェクション攻撃が関与していたと推測されている。

2)Ubuntuフォーラムにおける200万アカウント情報流出

2016年7月、LinuxベースのOS「Ubuntu」のフォーラムが、プラグインの脆弱性を狙ったSQLインジェクション攻撃に遭い、200万件のアカウント情報が流出した。影響はユーザー情報に限定された。

3)大手玩具メーカーのグループ会社でメールアドレス流出

2021年6月、大手玩具メーカーグループの会員制サイトから、4万件超のメールアドレスが流出。氏名やクレジットカード情報は流出しなかったものの、原因はSQLインジェクション攻撃と報じられた。

大規模な被害は目立つが、中小企業にも影響が及んでいる。WordPressなどオープンソースのCMSが脆弱性を突かれ、SQLインジェクションの標的となるケースが見られ、ブログ記事の改ざんや会員情報の漏洩が報告されている。

近年は、中小企業や個人事業主でも簡単にWebサイトを構築できるが、適切なセキュリティ対策が取られていない場合、SQLインジェクションのリスクが高まるため注意が必要だ。

SQLインジェクションへの5つの対策

SQLインジェクションの脅威を減らすためには、Webサイトの構築時からネットワーク全体にわたって、包括的な対策を実施する必要がある。以下に、その具体的な方法を説明する。

1)セキュアプログラミング

セキュアプログラミングやセキュアコーディングと呼ばれる手法は、セキュリティを重視した開発方法を指す。Webサイトを開発する際、運用者はエンジニアにこれらの手法が実践されているかを確認することが重要で、SQLインジェクションの対策も含まれている。

・プレースホルダーの利用

ユーザーからの入力を受け取る検索フォームなどでは、事前にプレースホルダーとしてSQL文を用意し、入力された値を正しく処理することで、不正なSQL文の実行を防止する。

・エスケープ処理

不正なSQL文が実行されるのを防ぐために、特別な意味を持つ記号を通常の文字列として処理する。

・入力値の検証

入力時に悪意のある処理につながるような文字列を検証し、異常値と見なされた場合にはエラーメッセージを出力する。

・詳細なエラーメッセージの非表示

SQLの実行時に発生したエラーメッセージをユーザーに表示することにより、データベースのテーブル名やカラム名などの情報が悪意のある第三者に知られてしまう危険性がある。SQLインジェクションに悪用されないよう、不要なエラーメッセージは表示しないことが重要だ。

2)サーバーやソフトウェアの更新

WordPressで運営されるWebサイトでは、WordPress本体だけでなく、プラグインの脆弱性もSQLインジェクションの対象になる可能性がある。また、データベースを使用するシステムにおいても、常にその脆弱性に気を付ける必要がある。サーバーに導入されたソフトウェアを含むシステムを最新の状態に保ち、脆弱性を放置しない運用が重要だ。

3)サーバー、データベースの設定・監視

SQLインジェクションでは、データの一括削除など、影響の大きいSQL文が不正に実行されるリスクがある。そのため、Webサイト上でのユーザー入力からこのようなSQL文が実行されないよう、データベースを適切に設定し、致命的な被害を回避する必要がある。

4)WAFの導入

WAF(Web Application Firewall)は、Webサイトを保護するためのセキュリティ製品として広く知られている。一般的なファイアウォールでは防ぎきれないSQLインジェクションなどの攻撃に対しても、WAFを使用することで検知と防御が可能となる。WAFは、Webサーバーにインストールするタイプや、クラウド上で利用できる製品が存在する。

5)脆弱性診断の実施

巧妙化するサイバー攻撃から身を守るためには、セキュリティ対策に関する情報を客観的に評価してもらうことが重要です。脆弱性診断を簡単に行えるツールや、専門家による診断サービスが提供されており、これらを活用することが望ましいです。また、Webサイトを更新し続けることで、知らぬ間に脆弱性が発生する可能性もあるため、定期的な診断が推奨されます。SQLインジェクションは古くからの脆弱性ですが、今なお被害が発生し続けています。この背景には、攻撃者にとってSQLインジェクション攻撃から得られる利益が増加していることがあります。デジタル化が進展する中で、Webサイトの重要性が高まり、その影響範囲も拡大しています。また、盗まれた情報が換金される可能性も増大しています。今後もWebサイトは企業の重要な資産であり、攻撃者はその標的であり続けるでしょう。適切な防御策を講じることは、企業経営にとって今後も必要不可欠な取り組みとなるでしょう。