【レポート】
Mpackから探るWeb経由の攻撃
2 難読化でIDS/IPSを回避
2007/08/06
特徴 2
Webサイト経由の攻撃では、攻撃コードがJavaScriptで書かれており、そのコードは難読化されていることが多い。難読化とは、ぱっと見てどんな処理がされるか分からないようにコードを複雑にすることである。JavaScriptはユーザのブラウザ上で実行されるため、コードそのものをユーザが見ることができる。そのため、コードを読まれたくない開発者は、コードを複雑にして読みにくくするのだ。下記に難読化の例を紹介しよう。
function inputFunction(){
var Str1 = "funcA";
var Str2 = " Done.";
var Str3 = Str1 + Str2;
alertFunction(Str3);
}
function alertFunction(str){
alert(str);
}
inputFunction();
上記のような簡単な関数があったとする。これをJavaScript難読化ツールの一つ、ObfuscateJSで難読化すると、下記のように変換される。空白、タブといった削除可能な文字を削除し、変数名が単純なものに置換されている。このツールでは、関数名が置換されていないが、実際には関数名も変数名と同様に置換されることが多い。
function inputFunction(){var aa="funcA";var ba=" Done.";var
ca=aa+ba;alertFunction(ca);}
function alertFunction(da){alert(da);}
Mpackの事例では、JavaScriptの各オブジェクトが持つ、eval(), unescape()といった関数を利用して、一見するとどんな処理を実施しているか分からないように攻撃コードを作成しておく。
<script language=javascript>document.write(unescape("%3Cscript%20language%3DJavaScript%3Efunction%20dc%28x%29%7Bvar%20l%3Dx.length%2Ci%2Cj%2Cr%2Cb%3D%282048/2%29%2Cp%3D0%2Cs%3D0%2Cw%3D0%2C%20t%3D
(割愛)
x1bYjkaLxDnH%22%29%3C/script%3E"))</script>
攻撃コードの難読化には、解析を難しくする以外にIntrusion Detection System (IDS)/ Intrusion Prevention System (IPS) に検知・遮断を回避するという利点がある。難読化されたJavaScriptコードは、ユーザのブラウザで解析され、実行される。IDS/IPSでは難読化されたまま、パターンマッチングして、攻撃であるかを精査する。難読化された攻撃コードは不特定の文字列でできており、検査パターンを作れない。JavaScriptの関数を検知するシグネチャを作ると誤検知が多くなってしまう。IDS/IPSではWebサイト経由の攻撃を検知するのが難しいのが現状である。
では次に、Webサイト経由の攻撃で悪用されるブラウザ関連コンポーネントの脆弱性を見ていこう。
ヘッドライン
- 米Sun、ブレードサーバ向けストレージモジュールなど3製品を発表[15:56 10/22]サーバとストレージ
- マカフィー、仮想イメージの安全性を確保する企業向けウィルス対策製品[15:02 10/22]セキュリティ
- 【ハウツー】Transact-SQLの関数を理解しよう - 文字列編[09:00 10/22]Database
- 「Gears Geolocation API」がWi-Fi信号サポート、ノートPC対応を強化[05:25 10/22]Web2.0
- ARMとIBM、32nm LPプロセス向けARM IPを10月中に提供することを発表[20:54 10/21]エレクトロニクス
- ジュニパー、サービスプロバイダ向け新製品群を発表[19:50 10/21]
- 日本NI、Mac対応USB型GPIBコントローラを発売[19:08 10/21]エレクトロニクス
- セキュリティのコモデティ化が始まった - フォーティネット、UTM新製品発表[19:04 10/21]セキュリティ
- NECエレ、ローエンド車体制御用マイコン36品種を発売[13:10 10/21]エレクトロニクス
- Googleに最適化されたLinux「gOS」がMoblinをサポート[07:51 10/21]Web2.0