Upload
code-blue
View
255
Download
2
Embed Size (px)
Citation preview
Adobe Reader のJavaScript API の悪用Brian Gorenc, 脆弱性リサーチのマネージャー
AbdulAziz Hariri, セキュリティリサーチャー
アジェンダ• 序論
• 攻撃対象領域の理解
• 脆弱性の発見
• エクスプロイトの構築
序論
序論HP Zero Day Initiative
AbdulAziz Hariri - @abdhaririZero Day Initiative のセキュリティリサーチャー
根本原因分析、脆弱性の発見、 エクスプロイトの開発
Brian Gorenc - @maliciousinputZero Day Initiative のトップ
Pwn2Own ハッキングコンテストの主催者
4
バグハンター2014 年の 12 月に開始した調査
パッチが当てられた脆弱性 パッチが当てられていない脆弱性CVE-2015-5085, CVE-2015-5086, CVE-2015-5090, CVE-2015-5091, CVE-2015-4438, CVE-2015-4447, CVE-2015-4452, CVE-2015-5093, CVE-2015-5094, CVE-2015-5095, CVE-2015-5101, CVE-2015-5102, CVE-2015-5103, CVE-2015-5104, CVE-2015-5113, CVE-2015-5114, CVE-2015-5115, CVE-2015-5100, CVE-2015-5111, CVE-2015-4435, CVE-2015-4441, CVE-2015-4445, CVE-2015-3053, CVE-2015-3055, CVE-2015-3057, CVE-2015-3058, CVE-2015-3065, CVE-2015-3066, CVE-2015-3067, CVE-2015-3068, CVE-2015-3071, CVE-2015-3072, CVE-2015-3073, CVE-2015-3054, CVE-2015-3056, CVE-2015-3061, CVE-2015-3063, CVE-2015-3064, CVE-2015-3069, CVE-2015-3060, CVE-2015-3062
…more to come.
5
ZDI-CAN-3058, ZDI-CAN-3059, ZDI-CAN-3060, ZDI-CAN-3061, ZDI-CAN-3062, ZDI-CAN-3063, ZDI-CAN-3065, ZDI-CAN-3066, ZDI-CAN-3067, ZDI-CAN-3079, ZDI-CAN-3081, ZDI-CAN-3083, ZDI-CAN-3085, ZDI-CAN-3086, ZDI-CAN-3087, ZDI-CAN-3088, ZDI-CAN-3089, ZDI-CAN-3090, ZDI-CAN-3091, ZDI-CAN-3068, ZDI-CAN-3069, ZDI-CAN-3070, ZDI-CAN-3073, ZDI-CAN-3074, ZDI-CAN-3080, ZDI-CAN-3082, ZDI-CAN-3084,ZDI-CAN-3103, ZDI-CAN-3111, ZDI-CAN-3051, ZDI-CAN-3050, ZDI-CAN-3049, ZDI-CAN-3048, ZDI-CAN-3047, ZDI-CAN-3046, ZDI-CAN-3043, ZDI-CAN-3036, ZDI-CAN-3022, ZDI-CAN-3021, ZDI-CAN-2019, ZDI-CAN-3018, ZDI-CAN-3017, ZDI-CAN-3016, ZDI-CAN-3015, ZDI-CAN-2998, ZDI-CAN-2997, ZDI-CAN-2958, ZDI-CAN-2816, ZDI-CAN-2892, ZDI-CAN-2893
攻撃対象領域の理解
攻撃対象領域の理解初期調査と資源
• Adobe Reader JavaScript のバグ (CVE-2014-0521) - Gábor Molnár• はじめに JS API のバイパス問題について取り上げる• バグは APSB14-15 でパッチが当てられ、 CVE-2014-0521 に割り当てられた
• Adobe によると、これは情報公開につながる可能性がある• https://molnarg.github.io/cve-2014-0521/#/
• 何故人気のあるソフトウェアの検証をするのか ? – MWR Labs• Adobe reader への様々な攻撃ベクトルをハイライトする• https://labs.mwrinfosecurity.com/system/assets/979/original/Why_bother_assessing_popular_software.pdf
7
攻撃対象領域の理解ZDI 調査統計
• 最初の Adobe 調査は 2014 年の 12 月に始まった
• 我々は Reader/Acrobat に関して多くのケースを得ていなかった
• 主な目的はできるだけ多くのバグをなくすこと• 発見された様々なタイプのバグ– JavaScript API の制限のバイパス
– メモリリーク– 解放済みメモリ使用 (Use-After-Frees)– 特権昇格– etc.
8
攻撃対象領域の理解Reader の JavaScript API の識見
• Adobe Acrobat/Reader は豊富な JS API がある
• JavaScript API documentation は Adobe のウェブサイトで公開されている
• JavaScript API で様々なことができる ( フォーム ( 入力欄 ) 、アノテーション ( 注釈機能 ) 、コラボレーション ( 共同作業 ) etc..)• JavaScript API には、脆弱性緩和機能が存在する
• いくつかの API は Acrobat Pro/Acrobat のみで使用可能である
• 基本的に JavaScript API は 2 つのコンテキストで実行される :– 特権コンテキスト– 非特権コンテキスト
9
攻撃対象領域の理解Reader の JavaScript API の識見
• JS API documentation では特権 vs 非特権コンテキストが定義されている :
• たくさんの特権コンテキストがあり、非特権コンテキストからは実行できない :
10
攻撃対象領域の理解Reader の JavaScript API の識見
• 非特権コンテキストからの特権 API の警告の例 :
11
信頼できる関数特権メソッドを非特権コンテキストで実行する
12
攻撃対象領域の理解フォルダレベルのスクリプト
• Acrobat/Reader フォルダの中の JavaScript フォルダにスクリプトが格納されている
• 自動化機能の実装のために使用される
• 特権 API を実行する信頼できる関数が含まれる
• デフォルトの Acrobat/Reader には JSByteCodeWin.bin がある
• Acrobat/Reader が起動すると JSByteCodeWin.bin がロードされる
• Root でロードされ、ドキュメントが開かれると Doc で実行される
13
攻撃対象領域の理解デコンパイリング
• JSByteCodeWin.bin は SpiderMoney 1.8 XDR バイトコードにコンパイルされる
• JSByteCodeWin.bin には興味深い信頼できる関数がある
• Molnarg は SpiderMonkey の逆コンパイラを公開している– https://github.com/molnarg/dead0007– 使い方 : ./dead0007 JSByteCodeWin.bin > output.js– 出力は清書する必要がある
– ~27,000 行の Javascript
14
脆弱性の発見
脆弱性の発見JavaScript の Implicit メソッドの呼び出し
16
脆弱性の発見JavaScript メソッド / プロパティ オーバーロード
• __defineGetter__ and __defineSetter__
17
脆弱性の発見JavaScript メソッド / プロパティ オーバーロード
• __proto__
18
脆弱性の発見オーバーロードの機会のためのコード監査
• ‘eval’ の検索
19
脆弱性の発見オーバーロードの機会のためのコード監査
• ‘app.beginPriv(“ の検索
20
脆弱性の発見システムレベルの eval() を成し遂げる
• カスタム関数でオーバーロードプロパティへのアクセス
21
脆弱性の発見特権 API の実行
• 特権関数でプロパティの置き換え
22
脆弱性の発見脆弱性の連鎖
• ペイロードの大部分を実行するためにシステムレベルの eval を設定する
• 特権 API を呼び出すための代替の属性をつくる
• 呼び出しの実行
23
脆弱性の発見コンセプトの証明 – CVE-2015-3073
24
正常な挙動
25
特権昇格エクスプロイト
26
脆弱性の発見Adobe Reader 11.0.10 – パッチ前
27
脆弱性の発見Adobe Reader DC – パッチ後
28
脆弱性の発見要点
• 必要な JavaScript バイパスを成し遂げる
• システムコンテキスト内での実行を実現する
• オブジェクトメソッドをオーバーライドすることで特権昇格する– 信頼された関数内の特権ブロックでなくてはならない
29
エクスプロイトの構築
エクスプロイト構築概要
• https://helpx.adobe.com/security/products/reader/apsb14-15.html から研究は始まった
• チャレンジ : バイパス問題からリモートコード実行を得る
• 既知の JS API からできるかもしれない
31
エクスプロイトの構築documentation がひどいから ..• ディスクにファイルを dump する方法を探さなくてはならない
• ファイルはどの形式でも良い ( 制限は避けたほうが良い )• Adobe の JS API で Collab オブジェクトを見てみましょう…
32
エクスプロイトの構築“ 秘密を守りたいのなら自分からも隠せ” – G. Orwell • ドキュメント化されていない 128 のメソッドの中では、 Collab.uri* が興味深い :
33
エクスプロイトの構築“より多くを除外すると、 より残したものが目立つ” - H. Green• うますぎる話なので Google先生に相談しました :
34
エクスプロイトの構築何があるのか ...• 興味深いメソッドの簡単な概要 :
35
エクスプロイトの構築
• Collab.uri* API の概要 :– API は“ Collaboration” に使用される– uriDeleteFolder/uriDeleteFile/uriPutData/uriCreateFolder は特権 API– uriEnumerateFiles は非特権– Collab.uri* メソッドは引数として URI パスが必要 (少なくとも )– UNC パスでなくてはならない– UNC パスは smb:// もしくは file:// ではじまる
• API は失敗する :– UNC パスをサニタイズする (smb://localhost/C$/XXX works)– ディスクに書き込むファイル名のファイルタイプを確認する (uriPutData の場合 )– ダンプされる oData オブジェクトの内容をチェックする (uriPutData の場合 )
36
エクスプロイトの構築
• 今のところ我々は :– Collab.uriPutData() メソッドを使用してディスクにファイルを dump することができる– dump したいファイルの内容は oData オブジェクトに渡す必要がある
– ストリームオブジェクトは動く !
37
エクスプロイトの構築
– PDF文書を添付し、内容を抽出することができる– uriPutData 呼び出しと前述したバイパスとを連結する必要がある
じゃあ何 ? RCE を得るどうすれば良いのか ? 実際には 2 つの明確な方法がある ...
38
エクスプロイトの構築RCE を得る
• 一つ目の方法… a la Chaouki:
基本的にスタートアップにファイルを書き込み logoff/logon を待つ J
• 二つ目の方法は Adobe Acrobat によってロードされる DLL を書く
39
エクスプロイトの構築
WindowsMacOSX
Adobe Reader Vulnerable – Limited (Sandbox) VulnerableAdobe Reader DC Vulnerable – Limited (Sandbox) VulnerableAdobe Acrobat Pro Vulnerable VulnerableAdobe Acrobat Pro DC Vulnerable Vulnerable
40
エクスプロイトの構築まとめる (Adobe Acrobat Pro)
1. PDF にペイロードを添付する
2. ドキュメントを開いた時に実行される JS を作る
3. JS は以下で構成されている :1.2.3.
Extract Bypass JS Attachment Privileges
41
RCECall uriPutData
with the extractedattachment
添付ファイルの抽出JS 権限のバイパスペイロードを出力するために Collab.uriPutData を実行する (startup/dll)
Windows エクスプロイトデモ
42
MacOSX の Reader のデモ
43
結論
要約Adobe Reader の JavaScript API の悪用
• ゴール– JavaScript API で Adobe Reader/Acrobat のリモート実行権限を得る– メモリ破壊をしない
• 攻撃の計画1.2.3.4.
45
JavaScript のプロパティのオーバーロードと再定義で任意の eval() を得るapp.trustedFunction を通じた特権昇格と eval() を連結する
悪用コードを実行するためにドキュメント化されていない API を使用するProfit?
Thank you