今週のSecurity Check 第202回

 2008年3月11日,不特定多数のWebサイトに対する大規模なSQLインジェクション攻撃が発生した。本攻撃はターゲットとなるWebサイトのソースコードを改ざんし,攻撃者が用意した不正なWebサイトへのリンクを挿入するものである。セキュリティオペレーションセンター(SOC)でも,2008年3月11日~13日の間に,このSQLインジェクション攻撃を試行する通信を多数検知した。今回の攻撃はIIS(Internet Information Services),Microsoft SQL Server,ASP(Active Server Pages)を利用するWebサイトを対象としたものだった。

 大規模なSQLインジェクション攻撃は3月後半から4月後半にかけても度々発生しており,世界的な被害の発生が報告されている 。いずれも,攻撃の方法およびその対象は3月11日に発生したものと同様であり,引き続き注意が必要である。本稿では,発端となった攻撃について全体の流れを整理するとともに,WebサイトへのSQLインジェクション攻撃の対策について解説する。

不特定多数のサイトを一斉攻撃

 今回の攻撃の流れは図1のようになる。攻撃者はまず,不特定多数のWebサイトに対してSQLインジェクション攻撃を試行する。成功すると,ターゲットのWebサイトには不正なWebサイトのURLが挿入される。

図1●SQLインジェクションに始まる一連の攻撃の流れ
図1●SQLインジェクションに始まる一連の攻撃の流れ
[画像のクリックで拡大表示]
■修正履歴
当初,図1にある(5)の矢印がクライアント・パソコンからサーバーに向いたものになっていましたが,両方向の矢印に修正しました。 [2008/05/26 17:15]

 SOCでは,図2のような文字列をHTTP POST要求として送信し,SQLサーバー上のテーブルを改ざんしていたことを確認している。

図2●SQLインジェクションで送り付けられる文字列
図2●SQLインジェクションで送り付けられる文字列
*****は任意のファイル名。

 ユーザーは,改ざんされたWebサイトにアクセスすると,Webページに挿入されたURLにリダイレクト(転送)される。そして複数のぜい弱性を利用した,クライアントへのウイルスのダウンロードと感染が試行される。同時にクライアントのプラットフォームや使用言語などの情報が取得され,攻撃者が用意したサーバーへ送信される。

 図2に示した文字列のうち赤字部分を見ると,攻撃用コードがCAST関数を使って隠ぺいされている。CAST関数とは明示的に文字列を変換する関数である。CAST関数の中に記述された数列をデコードすると,不正サイトのURLを挿入するコードが現れる(図3)。Webサイト側では,このコードをEXEC関数で実行する(動的プロシージャ実行)。ここまでの攻撃が成功するとデータベース内のテーブルが書き換えられ,その書き換えられた内容を基に動的にWebページが生成される。

図3●URLを挿入するループ(デコード結果の一部)
図3●URLを挿入するループ(デコード結果の一部)