370 likes | 457 Views
JavaScript 難読化解析エンジン – JDOE JavaScript の難読化解読を自動化する新しいアプローチ. Nick Guo , Ulysses Wang. 内容. 難読化とは アンチ難読化解除 ブラウザに関する知識 一般的な難読化解読手法 JDOE デモ 課題と改善点. 難読化とは. Phase I Review. 難読化. コードを複雑にすることで、人間によるコードの分析と検知からコードの意図を隠蔽 著作権保護 情報の秘匿 ( 例えばメールアドレス ) 検知からの回避. 難読化の種類. 3 種類の難読化
E N D
JavaScript 難読化解析エンジン – JDOE JavaScriptの難読化解読を自動化する新しいアプローチ Nick Guo, Ulysses Wang
内容 • 難読化とは • アンチ難読化解除 • ブラウザに関する知識 • 一般的な難読化解読手法 • JDOE • デモ • 課題と改善点
難読化とは Phase I Review
難読化 • コードを複雑にすることで、人間によるコードの分析と検知からコードの意図を隠蔽 • 著作権保護 • 情報の秘匿 (例えばメールアドレス) • 検知からの回避
難読化の種類 • 3種類の難読化 • インジェクション型の難読化 • パブリックなパッカーによる難読化 • Exploit Kit による難読化
難読化の種類 • “2007年の時点で、検出された悪意あるコードの80%が難読化” • ほとんどの難読化コードは単純 • インジェクション: 83%, exploit kit: <1% • 複雑な難読化コードの割合は少ない • 難読化の手法はより複雑化
アンチ難読化解除 JDOE Prototype
断片化 • 重要なコードをJavaScriptコード、HTML、外部スクリプトのなかに分割して挿入 • 文字列の連結 • Var temp=“get”+”Elem”+”ent”+”ById” • タグの連結 • <div>,<p>,<textarea>の中に配置 • オープンソースの Exploit kit
断片化 • ファイルの連結 • 重要な関数やデータを他のファイルに配置 • Phoenix Exploit Kit 2.5 • 転送による連結 • サーバにデータを保存し、クライアントはリクエストを発行
外部へのアクセス • 外部アクセスのフェッチと接続状態の確認 • Ajaxで日付をフェッチ • ツイッタートレンド • 接続状態の確認 • Neosploit exploit kit
コンディションの確認 • ブラウザの検出 uas=navigator.userAgent; while(uai<uas.length) {xor+=uas.charCodeAt(uai++);} • IE6 • Firefox
コンディションの確認 • 時間のチェック • getUTCFullYear() • getUTCMonth() • getUTCDate() • プラグインのチェック • newActiveXObject('ShockwaveFlash.ShockwaveFlash'); (IE) • navigator.plugins を確認(IE以外)
関数の呼び出し • 指定秒後に関数を呼び出す • setTimeout("alert(Hello!')",3000) • setInterval("clock()",1000) • イベントにより関数を呼び出す • <body onload="load()"> • <button id="j_id" onclick="j_function2();" • window.attachEventまたはaddEventListener • プラグインから関数を呼び出す • JavaScriptの関数をActionscriptから呼び出す
難読化解除ツールのバイパス • 特殊なタグの使い方 • CSS内にコンテンツを保存 • 改ざんのチェック • varhybxs = arguments.callee;hybxs = hybxs.toString();
ブラウザに関する知識 JDOE Prototype
一般的な難読化解除手法 Phase I Review
Jsunpack • 軽量 • Spidermonkeyと Python • JavaScriptファイルのフック • DOM エミュレーション環境 • 検知モジュール(Yara) • PDF とSWF のパーサ • 侵入検知(libnids) • http://jsunpack.jeek.org/
Fireshark • Firefox プラグイン • メインウィンドウと子フレームのソースコード • メインウィンドウと子フレームのDOM Tree • Http リクエストとレスポンスのログ • 悪意あるURLのチェック • URL リダイレクトのグラフ • http://fireshark.org/
Malzilla • リサーチ用ツール • Spidermonkey • シェルコード解析 • 限定的なDOM サポート • http://malzilla.sourceforge.net/
制約 • Firefox ベース • 限定的な DOM サポート • 難読化の解除には制約 • パフォーマンス
JDOE(JavaScript De-Obfuscation Engine) Phase I Review
JDOE • 我々に必要なエンジンは? • ハイパフォーマンス • 優れた適用範囲 • 適切な出力とログのフォーマット • 分析のためのプラットフォーム
JDOE • JDOE はGoogle Chrome ベース • 描画エンジン: Webkit • スマートフォンブラウザでのシェア85% • デスクトップブラウザでのシェア 21% • DOM ツリーとパーサを含む • JavaScript エンジン: V8
プロトタイプ • JDOE は Chrome向けのテストプロジェクトがベース • サーバサイドアプリケーションとして移植可能なコマンドラインツール • ブラウザの基本機能をシミュレート可能 • 全DOM機能をサポート • HTMLフォーマットに対する適切なフォールトトレランス • HTMLフォーマットの出力
JDOE アーキテクチャ ネットワークI/O HTMLパーサ
JDOE アドバンテージ • Chrome と Webkitがベース • 強力なパーサ • Full DOM サポート • jsの高速な実行速度 • 高い適用範囲 • 優れた拡張性
難読化解除の手法 • JDOE 難読化解除の手法 • eval()のフック • JavaScriptの内部状態を取得 • 最終的なDOM ツリーの表示 • 最終的な状態の取得 • Document.writeはノードをDOM ツリーに追加する
Exploit kit 型への適用率 • Exploit kits のサンプル • exploit kits プロジェクトのトップ10からのサンプル • サンプル合計 : 22 JDOE での成功 : 20 • 適用可能率 : 90.9%
インジェクション型への適用率 • インジェクション型のサンプル • 難読化のThreatIDでマッチするものからのサンプル • サンプル合計: 9,544 JDOE での成功: 8,450 • 適用可能率: 88.5%
デモ Demo
課題と改善点 Status and Next Step
課題 • セキュリティ • JDOE サーバをどのようにセキュアに保つか? • アップグレードプラン • Sandbox • Javascript監査 • パフォーマンス • 外部アクセスの無効化 • 適用範囲 • 特殊なサンプルには未対応 • 特殊なサンプルは出力フォーマットに問題がある
改善点 • PDF およびSWF のパーサ • シェルコードの検出 • Javascriptの監査 • Cloud ベースでの統合 • http://aceinsight.websense.com/ • 自動解析プラットフォーム
JDOE Questions?