FFRIエンジニアブログ

株式会社FFRIセキュリティのエンジニアが執筆する技術者向けブログです

Project Champollion: Reverse-engineering Rosetta 2 の紹介

はじめに

基礎技術研究室リサーチエンジニアの中川です。

先日、M1 Mac の Rosetta 2 をリバースエンジニアリングするプロジェクト Project Champollion を公開しました。

今回はこのプロジェクトについて紹介します。

Rosetta 2 について

昨年の WWDC 2020 にて Apple は Mac に使うプロセッサを Intel 製のものから Arm ベースの Apple Silicon に変更することを発表しました。 そして、昨年の 10 月には Apple Silicon である Apple M1 Chip 搭載の Mac Book Air と Pro が発売されました。

プロセッサの移行に伴う問題として、(Black Hat EU 2020 の参加報告 1 でも同じことを書きましたが)アプリケーションの互換性の問題があります。 Microsoft の場合、xtajit.dll による x86 エミュレーション機能と XTA キャッシュファイルによる高速化により、この問題に対処しています。 (詳細は Black Hat EU 2020 の参加報告 1を参照してください。)

Apple の場合、この問題の解決のために Universal Binary 2 と Rosetta 2 という 2 つの技術を導入しています。

Universal Binary 2 は複数のアーキテクチャ向けにビルドされたバイナリを 1 つに内包したバイナリのことです。 サポートするアーキテクチャの数だけバイナリを用意し、lipo tool で 1 つの Universal Binary 2 に変換すれば、それぞれの環境でネイティブ実行可能なバイナリとなります。

現在、M1 Mac のシステムバイナリのほとんどが Universal Binary 2 となっており、Intel Mac と M1 Mac 向けのバイナリをそれぞれ含んでいます。

Rosetta 2 は、Intel Mac 向けにビルドされたアプリケーションをバイナリ変換を通じ M1 Mac 上で動作させるための技術です。 実行時にバイナリが変換されているとはいえ、種々のベンチマークでも示されていますが、非常に高速に動作します。

私は発売直後に M1 Mac を入手し、それから 4 ヶ月ほどメインの開発機として利用しています。

発売直後は M1 Mac 向けのネイティブアプリケーションの数が少なく、Rosetta 2 経由で Intel Mac 向けにビルドされたアプリケーションを利用していましたが、アプリケーションが遅いなどでストレスを感じることはありませんでした。

初回起動が極端に遅いアプリケーションは一部ありましたが、2 回目以降は高速に動作するため特に問題ではなかったです。

Project Champollion について

Project Champollion はこの Rosetta 2 をリバースエンジニアリングするためのプロジェクトです。

リバースエンジニアリング結果のドキュメント解析に際して作成したツールを 1 つのリポジトリとしてまとめて公開しています。

調べた動機については上記のドキュメントにも記載がありますが、Black Hat EU 2020 で発表した XTA cache hijacking の研究と関連しています。

Rosetta 2 でも Windows 10 on Arm と同様、一度変換した結果をキャッシュする仕組みが備わっています。 この変換結果は拡張子が aot というファイル (以下、AOT ファイルと表記) として、/var/db/oah 以下のディレクトリに保存されます。

この機構を悪用した XTA cache hijacking と同様の攻撃の可能性を模索するため、Rosetta 2 のリバースエンジニアリングを最近行いました。リバースエンジニアリングの結果、いくつか興味深い点がわかったため、解析の過程・方法・ツールを含め、得られた結果をリポジトリにまとめ公開しています。

解析して得られた結果が非常に多いため、分割し、現在は part1 のみを公開しています。 順次 part2 以降も公開していく予定です。

ちなみに、プロジェクト名の Champollion はロゼッタ・ストーンを解析した研究者 Jean-François Champollion から取っています。

おわりに

短いですが、Project Champollion について紹介しました。

まだ、進行中のプロジェクトということもあり、一部の結果に間違いが含まれている可能性があります。 その点はご了承ください。 読者の皆様の手元で得られた結果と異なるなどがあった場合、イシューを挙げていただければ幸いです。

エンジニア募集

FFRIセキュリティでは最新の OS やハードウェアを対象としたセキュリティに関する研究開発業務を行っています。 採用に関してはこちらを御覧ください。