GrapheneOSと他カスタムROMの違い(CalyxOSを例に)

Should You Use GrapheneOS or CalyxOS?という記事の翻訳です。この記事では、GrapheneOSとCalyxOSの比較になっているのですが、実際には、GrapheneOSと他すべてのカスタムROMの違いであるとも言えます。大きく訳注をつけたものの、この記事はかなり専門的になります。
——————————-
GrapheneOSとCalyxOSは、Pixelデバイスの代替Android OSをお探しの方にとって、同じような選択肢としてよく比較される。この記事では、CalyxOSよりもGrapheneOSをお勧めするいくつかの理由を述べる。

更新頻度

CalyxOSは、他のAndroidカスタムOSと比較して、OSやコアアプリケーションのセキュリティ更新や機能更新の適用が遅いという過去がある。タイムリーなセキュリティ更新は、OSがプライバシーを守るために必要な常用に耐えうる安全性を備えるかの判断上で、最も重要な要素の一つである。

これに対し、GrapheneOSはアップストリーム近くで管理され、場合によっては純正OSよりも先に更新されることさえある。

例として、GrapheneOSの最初のAndroid 12リリースが2021年10月であるのに対し、CalyxOSは2022年1月にAndroid 12に移行した。

サンドボックス化Google Playと特権的microG

訳注:カスタムROMと呼ばれる「Android」を使う場合に問題になるのは、アプリの中にはGoogleのサービスを必要とするものがあること。例えば、地図を表示して自分の位置を示すアプリでは、Google Map APIが使われている。しかし、Googleサービスをそのまま入れてしまうと、Googleに監視されてしまうため、何らかの対策が必要になる。これについて、GrapheneOSと他多くのカスタムROMでは、別の方針をとっている。

GrapheneOS で Google Play サービスを使う場合、極めて制限的でデフォルトの untrusted_app SELinux ドメインが使用される。結果として、他のアプリと同様に、このアプリ(Google Play)がアクセスできるものを完全に制御できる。さらに、サンドボックス化Google Playをインストールするプロファイルを選択することができる。

訳注:Google Playを使いたいと思った場合、必ずしもメインのプロファイル(所有者プロファイル)に入れる必要はない。別プロファイルを作り、それを「Googleあり」環境としてメインとは切り離すことができる。

microGは、Google Playサービスを部分的にオープンソースで再実装したものだ(注1)。CalyxOSでは、microGを、通常のGoogle Playサービスと同様の高度な特権を持つsystem_app SELinuxドメインで実行する。また、Google Playサービスのふりをするためにシグネチャースプーフィングが使用される。これは、機密性の高いシステムAPIへのアクセスを必要としないサンドボックス化Google Playより安全性が低い。

訳注:サンドボックス化Google Playは、ごく普通のアプリとして動作し、アプリとしての制限をかけられるが、microGはアプリを越える特権を持ってしまう。

GrapheneOSのサンドボックス化Google Playを使用する場合、PlayサービスAPIへの位置情報要求を、衛星ベースの位置情報サービスを使用するOSの位置情報APIに迂回させるオプションがある。

訳注:GrapheneOSでは、これはデフォルトでONになっている。PlayサービスAPIへの位置情報要求を取り上げないとGoogle側に位置が知られてしまうため。ただし、誰かがそこにいることが連中にわかるが、デフォルトでは誰かは全くわからない。また、衛星ベース(GPS)にした場合、Googleによる位置情報よりも正確性は劣ることになる。

microGでは、様々なバックエンドのロケーションプロバイダを選択できる。例えば、Mozillaなどのロケーションバックエンドを信頼することだ。これは、RFベースのロケーションデータをローカルに収集しオフラインデータベースに保存するロケーションバックエンドであるDejaVuを使っている。あるいは単にネットワークのロケーションバックエンドを全く使用しないこともできる、

訳注:DejaVuがやることは、Googleがやってるのと同じようなもので、GPSが無い場合には、近くのWifiや携帯タワー電波から位置を推定する。逆に、GPSがあって正確な場合には、近くのWifiや携帯タワーの電波をその場所にある電波としてデータベースに登録する。基本的には、GPSがなくても位置を推定できるようにするもの。

PlayサービスやMozillaのようなネットワーク位置情報プロバイダーは、位置情報推定のために、周囲のWiFi アクセスポイントやBluetoothデバイスのMACアドレス(機器の固有番号)が送信されることに依存する。MozillaのようなネットワークロケーションをmicroGで使う場合、Googleと比較してプライバシーの利点はほとんどない。なぜなら、両者で同じデータを送信し、プロファイリングされないよう信頼することになるからだ。

訳注:とは言っても、Googleに送るよりMozillaに送った方が安全性は高いものと思われる。

DejaVuのようなローカルRFロケーションバックエンドにおいては、収集したローカルなRFデータ(Wifi電波や携帯電波)を利用するためには、携帯電話にGPSが搭載されている必要がある。位置情報プロバイダーの仕事は、衛星ベースのサービスが機能していないときに位置の推定を支援することなので、これは位置情報プロバイダーとしてあまり効果的ではない。

訳注:そもそもGPSが無いときの位置情報提供が目的なのに、GPSに依存して場所を特定しようとしている。Googleは、ストリートビューカーなどであらゆる場所の電波をあらかじめ測定しているため精度が高い。

脅威モデルとして自分の位置や近くのデバイスのMACアドレスを保護する必要がある場合は、OSのロケーションAPIへのロケーション要求を迂回させるのが最良の選択だろう。microGのカスタム位置情報バックエンドがもたらす利益は、サンドボックス化されたGoogle Playと比較するとごくわずかだ。

アプリ互換性という点では、GrapheneOS上のサンドボックス化Google Playは、Googleからのリリースと同じコードであるため、常により互換性がある。microGは、これらのサービスの再実装なのである。そのため、microGでは、再実装された部分だけをサポートしており、Google Play GamesやIn-app Billing APIなどはサポートされていない。

訳注:Googleのコードそのものをサンドボックスに入れてしまうGrapheneOSに対して、microGは、Googleのコードと同じ機能を最初から作り直そうとしているため、作られていない部分は機能しない。

大規模なアプリ、特にゲームでは、Play Asset Deliveryをインストールする必要があるが、これは現在microGでは実装されていない。AndroidのオンラインサービスでFIDOを使った認証もPlayサービスに依存しており、microGでは現在動作していない。

 

特権的なeSIMアクティベーションアプリケーション

現在、eSIMのアクティベーションは、Googleによる特権的な専用アプリと結びついている。このアプリにはREAD_PRIVILEGED_PHONE_STATE権限があり、GoogleにIMEIなどのハードウェア識別子へのアクセスを許可している。

GrapheneOSでは、このアプリは無効になっており、サンドボックス化されたGoogle Playをインストールした後に、オプションで有効にできる。

訳注:物理的なSIMカードではなく、電子的にSIM情報をスマフォに登録するeSIMをGrapheneOSで使うためには、サンドボックス化Google Playをインストールし、この機能を有効にする必要がある。ただし、eSIMアクティベーション終了後は、Google Playは不要であり、アンインストールしてよい。しかし、アクティベーションのあいだにIMEI等がGoogleに取得されてしまうことに注意。

CalyxOSでは、アプリはデフォルトでインストールされ(microGを選択するかどうかに関係なく)、オプトアウトはできない。つまり、eSIMのアクティベーションが必要か否かに関わらず、Googleはハードウェア識別子にアクセスでき、持続的にアクセスすることができる。

 

特権的なアプリの拡張

Android 12では、サードパーティーのアプリストアにおいて、アプリのシームレスな更新のための特別なサポートが提供されている。人気のあるFree and Open-Source Software (FOSS)リポジトリであるF-Droidはこの機能を実装しておらず、無人のアプリ更新を行うためには、Androidディストリビューションに含まれる特権的な拡張機能が必要だ。

CalyxOSは特権拡張機能を含むため、デバイスのセキュリティを低下させる可能性がある。

一方、GrapheneOSは、代わりにサンドボックス化Google Playを公式に推奨している。多くのFOSS AndroidアプリはGoogleのPlayストアにもあるが、そうでない場合もある(NewPipeのように)。そのような場合は、RSSを使って更新を追いかけることになる。

訳注:GrapheneOSでは、Google Playをインストールし、Play Storeを使ってのアプリのインストールを推奨しているのだが、しかし、これをすると、インストールしたすべてのGoogle製アプリにGoogleアカウントが結び付けられてしまう。特にGoogle Mapを匿名で使いたい場合などは、これはおすすめできない。

 

プロファイルについて

GrapheneOSは、ユーザープロファイルを大幅に改善した。例えば、作成可能なプロファイル数の上限を増やす(標準の4から32)、ユーザープロファイルからログアウトする、アプリのインストールを無効にする、通知を転送する、などである。これらの改善により、ユーザビリティをあまり犠牲にすることなく、ユーザプロファイルを日々使えるようになった。

CalyxOSでは、AOSPからのユーザープロファイルの改良はなく、代わりにデバイスコントローラアプリを搭載し、Shelterなどのサードパーティアプリをダウンロードしなくてもワークプロファイルを使用できるようにした。しかし、ワークプロファイルは(1つだけに制限されるため)ほぼ柔軟性がなく、同じ量の分離とセキュリティは提供されない。

 

追加のハードニング

GrapheneOSは、AOSPのセキュリティを以下のように向上させている:

  • Hardened WebView: VanadiumのWebViewは、WebViewプロセス上で64ビットプロセスを必要とし、レガシー32ビットプロセスを無効にする。また、-fwrapv や -fstack-protector-strong などの硬化コンパイラオプションを使用し、スタックバッファオーバーフローから保護できる。バッテリーステータスAPIなどのAPIは、プライバシーの観点から無効化されている。GrapheneOSのすべてのシステムアプリは、Vanadium WebViewを使用する。これは、WebViewを使用するアプリもVanadiumのハードニングの恩恵を受けられることを意味する。Vanadiumのパッチセットは、CalyxOSのChromiumパッチセットよりもはるかに包括的であり、そこから派生したものである。

 

  • ハード化されたカーネル: GrapheneOSのカーネルは、linux-hardenedプロジェクトとKernel Self Protection Project (KSPP)からいくつかのハードニングを含む。CalyxOSは、通常のAndroidと同じカーネルを使用しているが、若干の変更が加えられている。

    訳注:カーネルとは、Androidシステムそのものが動作するための基盤のことで、これはAndroidに限らない、一般的なLinuxの話題。

 

  • Hardened Memory Allocator: GrapheneOSは、メモリアロケータとしてhardened malloc subprojectを使用する。これは、メモリヒープ破壊に対するハードニングに重点を置いている。CalyxOSはデフォルトのAOSP Scudo Mallocを使用するが、これは一般的に効果が低い。Hardened Mallocは、CVE-2021-0703のようなGrapheneOSで修正されたAOSPの脆弱性を明らかにした。

    訳注:不良や故意によるアプリが、他のアプリの使用しているメモリ領域を破壊してしまうというAndroidにもともとあったバグがGrapheneOSの改良によって発覚した。当然、GrapheneOSは改良されたものを使用している。

 

  • セキュアなExecの起動: GrapheneOSは、AOSPやCalyxOSで使用されているZygoteモデルとは対照的に、新鮮なプロセスを生成する。Zygoteモデルは、ASLR(Address Space Layout Randomization)を弱め、安全性が低いと考えられている。新しいプロセスを作成する方が安全だが、新しいアプリケーションを起動する際に、若干のパフォーマンス上のペナルティがある。これらのペナルティは、eMMCを搭載しているPixel 3a/3a XLのような低速ストレージを搭載した古いデバイスでない限り、あまり目立たない。

    訳注:要するにGrapheneOSでは、安全性を優先させたためにアプリの起動が若干遅い。

 

これらはほんの一例であり、GrapheneOSのハードニングの広範なリストではないことに留意せよ。より完全なリストについては、GrapheneOSの公式ドキュメントを参照。

注1. なお、microGでは、DroidGuardなど一部のコンポーネントでGoogle独自のバイナリを使用する。プッシュ通知が有効な場合、Play Servicesと同様にGoogleのサーバーを経由する。CalyxOSのようなデフォルトのmicroGのセットアップ以外では、シグネチャースプーフィングパッチなしで、SELinuxドメインの非特権信頼されないアプリでmicroGの実行が可能。しかし、サンドボックス化されたGoogle Playに比べると、すでに広くはないmicroGの機能と互換性は、大きく低下する。