
CVE-2023-32434に基づく決定的カーネルエクスプロイト。
Trigonは、CVE-2023-32434に基づく決定論的なカーネルエクスプロイトおよびPPLバイパスです。iOS 13〜16.5.1を実行するA9〜A16デバイスをサポートします。決定論的であるということは、このエクスプロイトが悪用中または悪用後にパニックを引き起こすことが決してなく、完全に信頼性があることを意味します。
TrigonはXNUのVMレイヤーにおける整数オーバーフローを悪用します。この脆弱性により、任意の物理アドレスマッピングプリミティブを構築できます。これにより、_ほぼ_すべての物理アドレスへの読み書きプリミティブが得られますが、その後のエクスプロイト戦略はデバイスやバージョンによって異なります。
iOS関連の技術的な解説記事に興味がある方は、Trigonシリーズを読むことをお勧めします!iOS研究者でない方でも理解できるように、できるだけ分かりやすく書くよう心がけました。
注: arm64デバイスは現在iOS 16ではサポートされておらず、arm64eデバイス(A12以降)のみがサポートされています。
arm64eのサポートにはいくつかのハードコードされた値が必要であり、それらはunique_offsets.hに記述する必要があります。大部分は非常に簡単に見つけることができ、一部の構造体オフセットはDopamineのソースコードで見つけることができ、その他はXPFを実行することで見つけることができます。ただし、悪用前に見つけることができない3つのオフセットがあり、ここではその見つけ方を説明します。
UniqueValues.addresses.baseは、Trigonの悪意あるメモリマッピングの物理ベースアドレスです。これを見つける簡単な方法は、既存の値を推定ベースアドレスとして使用し、0x41410000のような識別可能な物理アドレスを読み取ることです。その後、パニックログ内の物理アドレスからオフセットを減算することで、マッピングの正しいベースアドレスを特定できます。
pv_head_table と pp_attr_tableUniqueValues.offsets.pv_head_tableとUniqueValues.offsets.pp_attr_tableは、カーネルの物理ベースからの2つのカーネルデータ構造の相対オフセットです。これらはカーネル初期化の非常に早い段階で割り当てられるため、物理メモリ内のカーネルベースから常にまったく同じオフセットに存在します。これらを見つけるには、既存のカーネルエクスプロイト(kfdなど)を使用してこれらの構造体を見つけて正しい物理アドレスに変換し、その方法でオフセットを計算できます。
Dopamineで脱獄可能なデバイス向けに、arm64e上のTrigonに必要なすべてのオフセットを見つける使いやすいコマンドラインツールをこちらに含めました。これを使用して、お使いのデバイスとバージョンの組み合わせで動作するようにエクスプロイトをセットアップできます。