スクリプトの断片化攻撃 - GentooJP Server / macaroni.gentoo.gr.jp
Download
Report
Transcript スクリプトの断片化攻撃 - GentooJP Server / macaroni.gentoo.gr.jp
スクリプトの断片化攻撃
PacSec 2008
Stephan Chenette, Security Researcher
Websense Security Labs
本日話したい事
エクスプロイトが成功するか否かは幾つかの条件に基づきます
脆弱なサービスやアプリケーションが
有効であり(Active)
アクセス可能である(Accessible)
そのエクスプロイトが
信頼でき(Reliable)
検知されない(Undetected)
2
本日話したい事
このプレゼンテーションは以下に焦点をあてています
エクスプトイト検知の回避
もう少し具体的に言うと
Webによるクライアントの侵害(ブラウザ、ActiveXコントロール
等のバグ)を検知されないようにする新しい回避テクニック
3
何故これが皆さんにとって重要か
皆さんは以下の人達であると仮定しています
–
–
–
–
レポータ
研究者
セキュリティ管理者
テクニカル・マネジャー
新しい攻撃や回避テクニックについて、また、組織をそれらか
ら防御することについて興味がある筈です
4
Webの脅威の基本
攻撃の傾向はここ数年で変っており、侵入者はWebに焦点を
当てていることが顕著になっています
殆どの企業・ユーザはファイアウォールでHTTPをブロックして
いません
クライアントに対する悪意のあるWeb攻撃はデスクトップやゲ
ートウェイでのアンチウィルス及びIDSにて防御することが期待
されています
5
本当はどうでしょう?
現在のデスクトップやゲートウェアでのアンチウィルスではスク
リプトの断片化攻撃を防ぐことはできません
6
HTTP client/server 間の通信
•GET / HTTP/1.1
•Client ブラウザ
•Web サーバ
7
HTTP client/server 間の通信
•GET / HTTP/1.1
•Client ブラウザ
•Web サーバ
8
現状のデスクトップ/ゲートウェイでの防御
コンテンツの内容を検査します
9
現状の回避テクニック
難読化された
JS code
10
回避の成功
ネットワークの通過する悪意のあるコンテンツは、正常な
トラフィックと見分けがつかないため、検知を回避できる
確率が高い
11
スクリプトの断片化
スクリプト
アクティブなコンテンツ 例えばJavaScript, VBscript等
断片化
細かく分割されたデータ
注記: AJAXの悪用については Toorcon 2007 で言及されたが,
ここで話すほど詳細については明らかにされていない。これか
らそれについて話そうと思う…
12
基本のレシピ
追加機能がなくても以下のみで動作します
ブラウザ
JavaScript
XMLHTTPRequest
以下のブラウザで問題なく動作します
Internet Explorer, Firefox, Safari, Opera, Konqeror
13
Example 1: Basic HTML document
<html>
<body>
<div id=“target” />
</body>
</html>
14
JavaScript によるDOMの操作
JavaScriptはDOMを変更する機能(欠点)を持つ
var d = document.getElementById(“target”);
var n = document.createElement(“script”);
n.text = “alert(‘test’);”
d.appendChild(n);
15
New DOM
<html>
<body>
<div id=“target”>
<script>
alert(‘test’);
</script>
</div>
</body>
</html>
16
Example 2: Basic HTML document
<html>
<body>
</body>
</html>
17
JavaScript によるDOMの操作
var text = “alert(‘test’);”
eval(text);
eval() は引数をスクリプトとして実行する
18
New DOM
<html>
<body>
</body>
</html>
19
スクリプトのパワー
JavaScriptでは複数文字列を連結することが可能です
そして、連結された文字列をコードとして実行します
例
var text = “ale” + “rt(“ + “‘te” + “st’” + “);”
eval(text);
20
データの動的な読み出し
<script>
xmlhttp.open(“GET”, “/index.php?q=2+2”, true);
var response = xmlhttp.responseText;
</script>
•GET /index.php?q=2+2
•Client ブラウザ
“4”
•Web サーバ
21
正しいことに使われるテクノロジ
JavaScript != 悪
XMLHTTPRequest != 悪
害のない JavaScript/HTTPXMLRequest テクノロジ
– ガジェット
– ウジェット
– マッシュアップ
Gmail, orkut, facebook, hi5.com, 等は JavaScript と
XMLHTTPRequest を使用しています
22
スクリプトの断片化の手順
–
サーバに悪意のあるコンテンツを保存する
–
サーバ:クライアントに対しWebページを断片化したスクリプトのデコードルー
チンと共に提供
–
クライアント: XMLHTTPRequest オブジェクトを用いて悪意のあるコンテンツ
の小さい断片のみをリクエスト
–
サーバ:リクエストされた悪意のあるコンテンツの断片を返信
–
クライアント: JavaScript変数にデータの断片を保存し、JavaScriptと
XMLHTTPRequestオブジェクを用いて新しいデータの断片をデータが
なくなるまで要求し続ける
–
クライアント:全てのデータを受信したら組み立てたコードの実行を行う
23
実行手順
ステップ 1) サーバへの悪意のあるコンテンツの保存
•Web サーバ
24
実行手順
ステップ 1) サーバへの悪意のあるコンテンツの保存
•Web サーバ
25
実行手順
ステップ 2) サーバ: クライアントに対し断片化したスクリプトのデコード
ルーチンを提供
•<DECODER>
•Client ブラウザ
•Web サーバ
26
断片化したスクリプトのデコードルーチン
27
実行手順
ステップ 2) クライアント: XMLHTTPRequest オブジェクトを用いて悪意
のあるコンテンツの小さい断片のみをリクエスト
•GET /index.cgi?o=0&rl=3
•Client ブラウザ
•Web サーバ
28
実行手順
ステップ 3) サーバ:リクエストされた悪意のあるコンテンツの断片を返信
•“var”
•Client ブラウザ
•Web サーバ
29
実行手順
ステップ 4) クライアント: 断片を保存しデータがなくなるまで断片を
要求し続ける
•GET /index.cgi?o=3&rl=3
•Client ブラウザ
•“ he”
•Web サーバ
•var text = “var he”;
30
実行手順
ステップ 4) クライアント: 断片を保存しデータがなくなるまで断片を要
求し続ける
•GET /index.cgi?o=6&rl=3
•Client ブラウザ
•“apS”
•Web サーバ
•var text = “var heapS”;
31
実行手順
ステップ 4) クライアント: 断片を保存しデータがなくなるまで断片を要
求し続ける
•GET /index.cgi?o=9&rl=3
•Client ブラウザ
•“pra”
•Web サーバ
•var text = “var heapSpra”;
32
実行手順
ステップ 4) クライアント: 断片を保存しデータがなくなるまで断片を要
求し続ける
•GET /index.cgi?o=12&rl=3
•Client ブラウザ
•“yTo ”
•Web サーバ
•var text = “var heapSprayTo”;
33
実行手順
ステップ 5) クライアント:全てのデータを受信したら組み立てたコードの
実行を行う
•Client ブラウザ
•// Method 1
•eval(text);
•// Method 2
•var div = GetElementById(‘target’);
var n = document.CreateElement(“script”);
n.text = text;
div.appendChild(n);
34
可能性
基本のスクリプト断片化攻撃の応用
オフセットをランダム化する
XOR/暗号化
複数のWebサーバにデータを分散させる(ボットネット)
最後の瞬間まで文字列をメモリ内に暗号化して保持する
35
データ転送のオプション
XMLHttpRequestは動的なHTTPリクエストを行うためのオ
ブジェクトですが、その他にもデータ転送に使用できる複
数のデータフォーマットがあります
RAW
XML
JSON
その他.…
36
RAW data フォーマット
•GET /index.cgi?o=0&rl=3&u=guid
•Client ブラウザ
“var”
•Web サーバ
37
XML dataフォーマット
•GET /index.cgi?o=0&rl=3
•Clientブラウザ
“<Data eof=“0” text=“var” />” •Webサーバ
38
JSON dataフォーマット
•GET /index.cgi?o=0&rl=3
•Clientブラウザ
// S = server resp.
var data = eval(S);
var text = data.text;
“{
eof : “0”,
text : “var”
•Webサーバ
}”
39
全ての主要なブラウザで問題なく動作
実証コードのデバック出力
40
アンチウィルスはスクリプトの断片化を検知できない
初期ページはスクリプトタグにデコードルーチンを持ちbodyは
ブランク
ディスク上のファイルは変更されない
メモリ内のDOMも変更されない
コンテンツは悪意のあるものとして検出されない!
41
実証ページ
42
ディスク上のHTMLファイル
ディスク上のファイルは前後で同じ
C:\Documents and Settings\<USER>\Local
Settings\Temporary Internet Files
43
メモリ内のDOM
メソッド 1: DOM は全く変更されない
44
メモリ内のDOM
メソッド 2: DOMのみ変更
45
勝利!
スクリプトの断片化は現状のデスクトップ・ゲートウェイ
でのアンチウィルスが検知するできない非常に有効な回避
攻撃です
46
結びの言葉
怖がらせましたか?
….ごめんなさい
この攻撃はまだ数年先のものでしょう
実際に使用されたことはまだありません
難読化は未だに最大の問題です
47
考えられる解決策
デコードルーチンの検知
ネットワークのアノーマリの検知
“feedback loop”の使用と遠隔地での実行
ブラウザへの防御策の追加? 恐らくセキュリティより機能性の
方が勝るのではないでしょうか
48
ありがとうございました
ご質問をどうぞ?
Stephan Chenette, Websense Security Labs
[email protected]
Webサイトとブログを参照下さい。
http://securitylabs.websense.com/content/blogs.aspx
http://securitylabs.websense.com/
49