概要
ここでは、公開されているエクスプロイトや、私が作成した1dayエクスプロイトの解析を投稿します。
[ 公開エクスプロイトの解析 ]
- 個人的には、公開エクスプロイトを学ぶ最善の方法は、完全に理解できるまで1行ずつ理解していくことだと思います。そこで、こうした(過剰にコメント付きの ;) )エクスプロイトをいくつか投稿します。他の人がそこから学べたり、コミュニティに何らかの形で還元できることを願っています。また、時間が経つと頭から薄れてしまうので、記録のためでもあります。
CVE-2016-8655
CVE-2016-5342
mp3版
tty版
- これはfreener氏のAndroid LPEエクスプロイトにコメントを付けたバージョンです。
- arm32
- ヒープオーバーフロー
- このエクスプロイトは、別のオブジェクト内のオブジェクトポインタを上書きします。ret2dir攻撃を使用して、破損したポインタがエクスプロイトペイロードを保持するカーネル内の予測可能な固定アドレスを指すようにします。このエクスプロイト技術はPXNとPANをバイパスします。
CVE-2016-2434
- これはJianqiang Zhao氏のAndroid LPEエクスプロイトにコメントを付けたバージョンです。
- arm64
- 任意のアドレスの16バイトをゼロで上書きします。
- このエクスプロイトは、カーネル内の固定アドレスにある有用なグローバルオブジェクトの16バイトを消去します。
- グローバルオブジェクト内の破損したオブジェクトポインタが、ユーザーランドのエクスプロイトペイロードを参照します。この種の攻撃は、PAN(またはPANエミュレーション)を備えたデバイス/カーネルでは機能しません。
- extra_recipe脱獄を理解するための私の試み
- 私は特にkppバイパスの部分に興味がありました。このテーマに関するスライドがいくつかあり、バイパスについておぼろげなイメージを掴むことはできましたが、実際にコード内で何が起こっているのかを細部まで掘り下げて確認したいと思いました。
- また、脱獄に必要な最終的な要素(Cydiaのインストールなど)を理解したいと思いました。
yalu102 (ViewController.m)
- 実際のバグに関連する部分と、それがどのように悪用されたかにコメントを付けました。
- 元のエクスプロイトではなくyalu102を調べた理由は、port-feng-shuiテクニックの方がよりクリーンで分かりやすく見えたからです。
- 分析はkppバイパスの直前で止まっています。
- ここに移動するのは、さまざまな数値オフセットに関する情報がもう少し多く含まれていたからです。
- また、yalu102にはオブジェクトファイルしかないのに対し、こちらはpatchfinder.cが完全な形で含まれています。
- cydiaの部分はやや不完全なので、kppの後でcydiaブランチに移動します。
- tfp0とポストエクスプロイテーションの後に、脱獄に必要な要素を理解しようとしています。
empty_list (sploit.c)
- Ian Beer氏のempty_listカーネルエクスプロイトの詳細な解説です。
- 非常に弱いプリミティブから始めて、より強力なAARを構築し、最終的に本格的なtask portを構築するという驚くべき技術を使用しています。エクスプロイトコードの背後にあるポートマジックは信じられません。しかも、これを8 NULLバイトのヒープオーバーフローで実現しています。本当に驚異的です。
- 信頼性を向上させるための素朴なアイデアをいくつか書き留めました。将来的に、誰かがより信頼性の高いバージョンのエクスプロイトをリリースしてくれることを願っています。 :)
- 素晴らしいエクスプロイトを提供してくれたIan Beerに感謝します!
CVE-2018-4233
- これは、@niklas_b氏のiOS Webkitエクスプロイトにコメントを付けたバージョンです。
- 非常に明確で簡潔かつ徹底的に注釈が付けられたライトアップを提供してくれたkudima(@begger_dd)に心から感謝します! :)
- このライトアップでは、JITタイプ混同バグ、ボクシング/アンボクシング変換のいくつかの制限(信頼性を損なう可能性がある)、初期/後期のAAR/AAWプリミティブがどのように構築されるかの詳細なウォークスルーが説明されています。また、最近の緩和策(インデックスマスキング、ArrayBufferバッキングストアのポイズニング、W^X JITのメカニズムの変更、JSObject構造の変更など)後のエクスプロイト技術の変化についても洞察を提供しています。
jsc_ConcatMemcpy_infoleak
- これは、kudima氏のWebKit infoleakエクスプロイト(2018.8.27に修正)にコメントを付けたバージョンです。
- これは、lokihardt氏によって報告されたバグの1つの不完全な修正に由来します。lokihardt氏のレポートによるパッチは、Double -> Object型混同プリミティブを修正しましたが、逆の方向(Object -> Double)は修正しませんでした。
- WebKitヒープに、単一のオブジェクトとマーカーを含むバタフライをスプレーし、その後concatバグをトリガーして、複数のdouble配列の大部分を初期化されていないヒープデータで埋めます。その後、初期化されていないバグのあるconcatによって生成されたdouble配列を反復処理し、以前にスプレーしたオブジェクトのアドレスを見つけてリークします。
- 素晴らしいエクスプロイトとライトアップを提供してくれた、改めてkudima(@begger_dd)に感謝します! :)
[ 1Day ]
CVE-2017-2547
- ある日、Zer0con 2018で発表された後、singi氏のエクスプロイトを見て、それを改良することにしました。
- これは、pwnjsに統合する前の、スタンドアロン版のエクスプロイトです。
- 改良点は以下のとおりです。
- 信頼性の向上(汚染されたメモリでの長時間のブラウジングセッション後も問題なく動作)
- さまざまなブラウザバージョンと互換性を持たせるために、すべてのハードコードされたオフセットを削除
- 異なるエクスプロイト技術の使用(標準的なmisalignテクニック)
- 最終的に、webkitプロトタイプを作成してpwnjsフレームワークに統合
- コードをより読みやすくし、多くのコメントを追加
- 謝辞
- 素晴らしいphrack記事と公開エクスプロイトを提供してくれたqwertyoruiop & Samuel Grob
- 素晴らしいpwnjsフレームワークを提供してくれたBrian Pak & Andrew Wesie!