スクリプトの断片化攻撃 - 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
schenette@websense.com
Webサイトとブログを参照下さい。
http://securitylabs.websense.com/content/blogs.aspx
http://securitylabs.websense.com/
49