SQL インジェクション攻撃とその対策
公開日: 2008年4月30日 | 最終更新日: 2008年6月25日
昨今、Web サーバー上のコンテンツが不正に改ざんされ、改ざんされたコンテンツを閲覧した利用者がマルウェア感染等の二次的な被害を受ける事案が継続的に発生しています。
この攻撃は、Web サーバーを狙ったものではなく、Web サーバー上で動作する、お客様が開発または導入した Web アプリケーションを狙って行われており、**"SQL インジェクション攻撃"**と呼ばれています。SQL インジェクション攻撃は Internet Information Services (IIS) や ASP (Active Server Pages) の脆弱性ではなく、SQL インジェクションという Web アプリケーションの脆弱性を悪用したもので、被害を防ぐためには、お客様のサイト レベルでの対策が必要となります。ここでは、現在発生している事象のご説明と対応策をご紹介します。
2008 年 6 月 25 日にマイクロソフト セキュリティ アドバイザリ 954462 を公開し、管理者を支援するツールをいくつか特定しました。 これらのツールは、検出、防御および攻撃者が悪用する可能性のあるコーディングを特定します。
|
"SQL インジェクション攻撃" とは
SQL インジェクションは悪意のある SQL 文やその一部を入力することで、データベースに不正にアクセスする攻撃です。
攻撃の仕組み:
SQL インジェクション攻撃の手法は、Web コンテンツ (Web サーバー) から接続しているデータベース サーバーに、管理者・開発者の意図しない特別な細工を施した SQL 文を処理させる事でコンテンツの改ざんを行います。多くの場合、Web 閲覧者にマルウエアの侵入を試みるプログラム (スクリプト) が書き込まれます。
SQL インジェクション攻撃の例:
SQL インジェクションが発生する仕組みを簡単な例を使って解説します。
例えば、以下のスクリプトを使って都市名を Web 利用者から受け取るケースを考えてみます。
var Shipcity; Shipcity = Request.form ("ShipCity"); var sql = "select * from OrdersTable where ShipCity = '" + Shipcity + "'";
利用者が、"Tokyo” と入力した場合、以下の SQL 文が生成されます。
SELECT * FROM OrdersTable WHERE ShipCity = 'Tokyo'
しかし、利用者が "Tokyo'; drop table OrdersTable--" と入力した場合は、以下の SQL 文が生成されます。
SELECT * FROM OrdersTable WHERE ShipCity = 'Tokyo';drop table OrdersTable--'
この SQL 文は、OrdersTable 中から ShipCity 中に Tokyo を含むレコードを検索するという、設計者が意図した動作を行った後、OrdersTable を削除するという設計者が意図しない動作を行います。 このような、Web アプリケーションが意図していない SQL 構文を構築し、実行する攻撃が SQL インジェクションと呼ばれています。
影響を受ける可能性のある Web コンテンツ:
以下の特徴をすべて備えるコンテンツは、Web サーバーの種類を問わず、攻撃の影響を受ける可能性があります。
データベースと連携してページを生成しているもの
動的コンテンツで、何らかのデータを入力できるもの
Active Server Pages (ASP), .NET Framework, CGI, Perl, PHP 等
明示的なフォームを利用していない場合でも、ページ遷移管理等に利用している非表示の項目のあるフォームも影響を受ける
URI クエリ文字列
その他、外部入力を受信する仕組み
対象となるシステム:
弊社製 Web サーバー システム上に構築された Web アプリケーション
Internet Information Services (IIS) 5.0 (Windows 2000 Server)
Internet Information Services 6.0 (Windows Server 2003)
Internet Information Services 7.0 (Windows Server 2008, Windows Vista)
Internet Information Services 5.1 (Windows XP)
サポートを終了している IIS 4.0 以前のバージョン
他社製 Web サーバー システム上に構築された Web アプリケーション
"SQL インジェクション攻撃"に対する対策方法
"SQL インジェクション攻撃" の対策方法には、お客様が開発・導入した Web アプリケーション、またはデータベース上のストアドプロシージャ等を改修し、意図しない SQL 文を受け入れないようにする必要があります。
参考資料
その他の資料
独立行政法人 情報処理機構 (IPA)
JPCERT/CC
更新履歴:
2008/05/13: このページを更新し、SQL インジェクション攻撃の具体例を追加しました。
2008/06/25: このページを更新し、SQL インジェクション攻撃に関連するセキュリティ アドバイザリ 954462 を公開し、検出、防御および攻撃者が悪用する可能性のあるコーディングを特定するのに役立つツールをお知らせしました。