GrapheneOS:サンドボックス化されたGoogle Play

GrapheneOSのサンドボックス化されたGoogle Playに関する説明です。 2022/8/28時点の情報。  

引用スタイルの箇所は私による訳注です。


前提として、ごく普通のAndroidスマフォには、Googleサービスフレームワーク、Playサービス、Playストアがあらかじめインストールされている。これらが存在しなくとも動作するアプリも多いが、無いと全く動作しないものもある。

その一方で、これらの機能がまさに「Googleがユーザをスパイする方法」となっている。その存在を必要とすることもあるが、あるとスパイされるという問題の解決のため、LineageOS等では、micro-GというGoogle互換ソフトを利用している。その一方、GrapheneOSでは、Googleのプログラムそのものをインストールし、その「侵略的な行動」を許さないように制御している。

もちろん、ユーザ側で、これがなくとも動作するアプリのみを使うのであれば、存在自体を気にする必要はないし、以下を読む必要もない。

サンドボックス化されたGoogle Play

通常のAndroidには、Google Playアプリストアや他のGoogleのサービスがインストールされている。

使いたい一般アプリによっては、Googleのサービスが無いと動作しないものがあるため、Google Play他をインストールしたいのだが、これらによって、Googleの監視下に置かれてしまう。これを何とかするため、GrapheneOSでは、「サンドボックス化されたGoogle Play」という仕組みが提供されている。

GrapheneOSは、互換レイヤーを備えており、Google Playの公式リリースを標準のアプリサンドボックスにインストールして使うことができる。GrapheneOSにおいては、Google Playは特別なアクセスや特権が全く無い。これは、アプリサンドボックスをバイパスして大量の特権アクセスを受けるのとは対照的だ。そうではなく、互換レイヤーが、Google Playに対して、完全なアプリサンドボックス内で動作する方法を教えこむ。また、GrapheneOS自体は、Google Playがインストールされてもそれを使わないため、他のスマフォで使われるようなOSサービスのバックエンドとして使われることもない。

サンドボックスとは、猫砂を入れた箱のこと。ここで何をしようが、粗相をしようが、大勢には影響が無いということ。

Google Playをインストールしても、それは特権的アクセスが得られないし、GrapheneOS自体がそれを使うことも無い。単にGoogle Playを必要とするアプリに対し、そのサービスが提供されるだけ。

Google Playアプリは、GrapheneOS上ではただの普通のアプリなので、特定のユーザープロファイルや仕事用プロファイル内にインストールすると、そのプロファイル内でしか利用できない。同じプロファイル内のアプリだけが使うことができ、明示的に使用を選択する必要がある。他のアプリと同じように動作し、特別な機能は無い。他のアプリと同様に、他のアプリのデータにアクセスすることはできない。プロファイルデータにアクセスするためには、ユーザーの明示的な同意または標準のアクセス許可が必要になる。同じプロファイル内のアプリは、相互の同意があれば通信可能であり、サンドボックス化されたGoogle Playでもそれは同じである。     

最近のAndroidには、プロファイルという機能があり、これは、一つのスマフォを複数のユーザが使えるというイメージである。それぞれのプロファイルは完全に独立しており、それぞれログインが必要になる。

例えば、一つのスマフォを複数の人間で使う場合には、ユーザプロファイルを追加していけば良い。それぞれのプロファイルのデータ領域は分離しているし、もちろんアプリも好みのものをインストールできる。一台のスマフォを、完全に別のスマフォとして使える。

仕事用プロファイルとは、一つのスマフォを仕事中に使う状態と、プライベートの状態に切り替えるものらしいが、スマフォ自体の他に、このプロファイルを管理するためのシステムが販売されているらしく、簡単に試すことはできないようだ。

ともあれ、これを利用することにより、「全くGoogleを必要としないプロファイル」、「Googleがなければ動作しないアプリ用のプロファイル」を切り替えることができる。

後者のGoogle Playをインストールするプロファイルでは、ある程度Googleに監視されてしまうと思われるが(推測)、その利用時間を制限することで、常時監視されることはなくなる。

サンドボックス化されたGoogle Playは完全な機能に近く、Google Playに依存するアプリのエコシステムとほぼ完全な互換性を提供する。(しかし)まだ互換レイヤーで異なるアプローチに移植していない特権的な機能の小さなサブセットだけの利用はできない。一部の機能は、本質的に特権的であり、互換性レイヤーの一部として提供することはできない。

Google Playは、そもそも特権的な機能であり、その特権を与えられないため、一部機能は利用できない。したがって、一部のアプリは全く動作しないかもしれない。

Playサービス機能の大部分は完全に動作する。動的にダウンロード/更新されるモジュール(dynamiteモジュール)や、Google Play Games などのモジュラーアプリコンポーネントが提供する機能などである。デフォルトでは、位置情報リクエストはGrapheneOSの提供するPlayジオロケーションサービスの部分的な実装にリルートされる。再ルーティングを無効にして、代わりに完全なPlayサービスのジオロケーションサービスを使用することもできる。

位置情報サービスをPlayサービスに任せてしまうと、Google側に位置が知られることになるが、デフォルトでは、これは起こらないということ。

我々の互換レイヤーは、Playストアを完全にサポートしている。アプリ内課金、Play Asset Delivery、Play Feature Delivery、アプリ/コンテンツのライセンスチェックなど、Playストアのサービスを完全に利用することができる。アプリのインストール、アップデート、アンインストールは、ユーザーがアプリのソースとして承認し、各アクションに同意することを必要とする標準的なアプローチで行うことができる。Android 12+の標準的な無人アップデート機能を使用して、最後のインストーラであるアプリの自動アップデートを実行する。サンドボックス化されたアプリによる無人アップデートは抑制されており、アップデートが限界に達して一括インストールする際に、同意を求めることがある。今後、しばらく待ってから無人アップデートを再試行するようにさせるよう、この点を改善する予定だ。

インストール

Google Playは、3つのアプリに分かれている。

  • Googleサービスフレームワーク(com.google.android.gsf)
  • Google Playサービス(com.google.android.gms)
  • Google Playストア (com.android.vending)

サンドボックス化されたGoogle Playを利用するには、これら3つのアプリの正式版を、利用したいユーザープロファイルや仕事用プロファイルにインストールするだけだ。

GSF(Googleサービスフレームワーク)、GMS(Playサービス)、Playストアは独立のアプリとしてインストールされる。三つすべてをインストールしないか、あるいは三つともインストールしてしまうのが最も簡単で、個別にインストールする人はいないと思われる。

デフォルトのユーザプロファイル(Owner)にインストールすることもできるし、別のユーザプロファイル、仕事用プロファイルにインストールすることもできる。

最もシンプルな方法は、Ownerユーザープロファイルのみを使用してしまうことだ。Ownerプロファイルにインストールされたアプリは、他の場所と同じようにサンドボックス化され、特別なアクセス権を受けることはない。すべてのアプリにGoogle Playを使わせるのではなく、それを利用するアプリを選択したい場合には、Google Playに依存するアプリ用に別のユーザープロファイルあるいは仕事用プロファイルを作り、そこにインストールする。その逆も可能だが、Google Playの不使用を例外とするのではなく、通常はGoogle Playを使わないようにする方が理にかなっている。 

上述のように、デフォルト(Owner)とは別のユーザプロファイルを作成し、そこにGoogle PlayやGoogle Playを必要とするアプリをインストールするのが良い方法かと思われる。

この逆、デフォルト(Owner)にGoogleを入れてしまい、別のユーザプロファイルにGoogleの必要の無いアプリを集めるといったこともできるが、考えにくい構成だろう。

我々のアプリリポジトリのクライアント(Apps)を開き、私たちのリポジトリでミラーリングされた三つのコアGoogle Playアプリをインストールすることができる。我々のアプリリポジトリクライアントは依存関係のインストールをサポートしているので、単にPlayストアを直接インストールすることができ、それが依存するGSFとGMSを自動インストールする。  

Appsというアプリが初めからGrapheneOSに入っているので、そこから単にPlayストアをインストールすれば、三つとも自動的にインストールされる。

プッシュ通知などの機能をバックグラウンドで適切に動作させるために、Google Play サービスにバッテリー最適化の例外を与える必要がある。他の二つのアプリには必要ない。

自動的に行われているものと思われる。

Playストアは、Play Asset Delivery、Play Feature Delivery、アプリ内課金、有料アプリのライセンスチェックなど、アプリが使う多くのサービスを提供する。Playストアなしでサンドボックス化された Google Playを使用することもできるが、多くのアプリは、Playストアなしでは正常に動作しない。また、Playストアアプリは、Playストアからアプリをインストールし、更新するための最も安全な方法である。一般的な用途ではインストールが強く推奨されるが、使いたいものに必要とわかっている場合は、GSFのみ、またはGSF/GMSのみをインストールすることも可能である。

三つすべてをインストールする必要は無い。Playストアの代わりにAurora Storeが使える。

Google Play をインストールした後、Play サービスを初期化する必要がある。おすすめの方法は、Playストアを開き、サインインボタンを押して、サインインページがロードされるのを待つことだ。サインインページがロードされたら、Playサービスの初期化が終了したことを意味する。アカウントにサインインせずにこのアプリを放置してもよい。Googleアカウントへのサインインは、アカウントへのサインインに依存する機能を使用したい場合にのみ必要である。例えば、一部のアプリでは、自身のアカウントとしてのユーザー名とパスワードの代わりに、Googleアカウントの認証を使用する。Playストアでは、アプリのインストールやアプリ内課金を利用するために、アカウントへのログインが必要になる。これは、Playストアの代替フロントエンドであっても同様だ。Aurora Storeでもアカウントは必要だが、デフォルトでAurora Storeのサービスから共有アカウントの認証情報を取得する。

これらのアプリのアップデートは、我々のアプリリポジトリクライアントから取得できる。我々の互換レイヤーは、Playストア自体の更新とPlayサービスもサポートしているが、我々は、テスト後に我々のリポジトリを介しての更新提供のために、更新されないようにブロックすることを選択した。彼らはこれらのアプリの更新のために長いステージングされたロールアウトを使っており、それは別のユーザーで古いバージョンをインストールできない場合に混乱を招く結果となっている。これは、更新を我々自身で処理することによって解決される。
  

我々の互換レイヤーは、Play Games Services をサポートしている。これは、Playストアから Google Play Games をインストールすることで得られる。Playストアにある多くのゲームは、Google Play Gamesがインストールに依存している。

コンフィグレーション

互換レイヤーは、設定 ➤ アプリ ➤ サンドボックス化された Google Play で設定メニューが利用可能である。

これらの機能をインストールしている場合のみに設定画面に表示される。

デフォルトでは、Google Playのジオロケーションを使用するアプリは、標準OSジオロケーションサービス(Googleのもの)ではなく、我々の独自の実装にリダイレクトされる。Googleのジオロケーションサービスを使いたい場合は、「Reroute location requests to OS APIs」トグルを無効にして、手動でGoogle Playサービスへのロケーションアクセスを「Allow all the time」許可をすることができる。また、これを完全に機能させるためには、「Google Location Accuracy」リンクを使用して、Google Playサービスのメニューにアクセスし、ネットワーク位置情報サービスにオプトインする必要がある。これは、位置推定を取得するために彼らのサービスに位置情報のアクセス許可を介して提供される近くのWi-Fiと携帯電話のネットワークを送信する。近くのデバイスの権限はまた、それが近くのBluetoothデバイスIDへのアクセスを与えるために付与することができる。 デフォルトで有効なリダイレクトモードにこだわる場合には、これらの許可を与える必要はない。アプリではジオロケーション取得ができる。Wi-FiとBluetoothのスキャンを完全に活用するには、設定➤位置情報➤位置情報サービスのスキャンのトグルも有効にする必要があるが、これは純正OSのようにデフォルトで有効ではなく、無効になっている。

この設定を行うと、Googleのスパイ行為に加担することになると思われる。Playストアをインストールしたときにログインしていれば、自身の位置がわかってしまい、ログインしていなくとも、Googleのほしい情報を代わりに取得してあげることになる。

ただし、GrapheneOSがどの程度「Googleへの情報送信」を許しているのかは、この文章からは定かではない。

このOSのジオロケーションサービスへの位置情報の再ルーティングは、ネットワークベースの位置情報サービスを提供せず、GNSS/A-GPS(要するにGPS)のみで実装しているため、Google Playのジオロケーションサービスを利用するより多くの電力を消費する。将来的には、セルタワーのローカルデータベースを利用した擬似的なネットワーク型ジオロケーションサービスをOSに提供する予定であり、位置情報のリダイレクト機能も、将来的にこのOSの実装を利用して、ネットワーク型の位置情報要求を実現することが可能である。

Googleの位置情報サービスはGPSだけではなく、「近くにあるWifi」の膨大なデータベースを使っていると思われ、GPSよりも簡単に正確な位置が把握できている。

Google Location AccuracyとGoogle settingsは、通常OSに統合されているが、Google Playとの統合はしていないので、それらにアクセスするためのアプリが必要となる。

メニューには、この使用ガイド、Play サービスのシステム設定、Play ストアのシステム設定、および Google 設定へのリンクもある。Play サービスと Play ストアのシステム設定は、他のアプリと同様に設定 ➤ アプリからアクセスできるため、便宜上記載しているだけである。

制限

Playサービスの視点からは、侵略的アクセスや統合ができるものと思い込んでいるが、それらを一切行わさせずに通常のアプリとして動作するよう、我々の互換性レイヤーをケースバイケースで拡張していく必要がある。多くの場合、Playサービスはアクセスなど必要としないし、通常のアプリで利用可能な通常のアプローチを使うように教え込むことができる。しかし、それが提供する機能は、基本的に特権的なアクセスを必要とし、サポートできない場合がある。例えば、Android Autoがサポートされる可能性は低いだろう。その他、OSの統合/制御やハードウェアへの特権的アクセスなど、侵略性の高いものも同様だ。その一方で、FIDO2セキュリティキーのサポートなど、多くの特権APIに依存しながらも完全に動作させることができる機能も多い(同社のFIDO2サービスはすでに一部動作している)。FIDO2の場合、ジオロケーションのためにデフォルトで行っているのと同様に、私たち自身の実装へのリダイレクトもいずれはサポートできるようになるはずである。我々の互換性レイヤーは非常に活発に開発作業中であり、残りの利用できない機能のほとんどはすぐにサポートされるようになってきている。

OSにPlayサービスが統合され、それをバックエンドとして使用される機能は使用できない。Playを統合するOSは、ジオロケーションなどのOSサービスのバックエンドとして使用される。GrapheneOSが、これをOSサービスのバックエンド/プロバイダとして使用することは決してない。音声合成(TTS)のように、OSがプロバイダを選択できる場合は、Playのサービスを利用することが多いようである。GrapheneOS上の他のアプリと同じ土俵に立っているのである。

特権的eSIM管理

eSIMとは、SIMという物理的なカードをスマフォに入れる代わりに、何の物理的カードも必要なく、電子的にスマフォにSIM情報をを登録する仕組みのこと。

GrapheneOSはデフォルトで常にeSIMのベースライン・サポートを搭載して出荷されており、ユーザーはデバイスに以前インストールされたeSIMを使用することができる。しかし、eSIMの管と追加には、Google独自の機能が必要になる。これはデフォルトで完全に無効化されている。

例えば、Pixel 5aという機種はeSIMが使えるが、Googleの機能をインストールしていない状態では、設定画面を開いても無効化されている。

特権的eSIM管理は、設定➤ネットワークとインターネット➤Privileged eSIM managementで有効化できる。この機能はサンドボックス化されたGoogle Playに依存しているため、インストールされていなければ、トグルはグレーアウトして使用不能である。

トグルを有効にすることで、Google独自の機能が有効になり、OSはこれを、eSIMのプロビジョニングと管理に使用するようになる。

なお、ネット接続が安定しているにもかかわらず、eSIMのインストール作業が「ネットワーク情報の確認」段階まで進まない場合は、USSDコード*#*#4636#*#に電話をかけ、表示されたメニューでDSDSを有効にする必要があるかもしれない(おそらく米国内の話)。

(以上)

 

コメント

  1. CK より:

    GrapheneOS について書いていただきありがとうございます。 LINEアプリについて詳しく書いていただければ幸いです。

    「アプリ ミラー」または別のソースから Google アプリをインストールしましたか?
    「Google Play Store」または「Aurora Play Store」からLINEアプリをインストールしましたか?
    「Google Play ストア」からLINEアプリをインストールした場合、「Google Play ストア」にログインしましたか? インストール後、ログアウトしましたか?
    GrapheneOS サンドボックス化された Google 設定で、「ネイティブ OS ジオロケーション」または「Google ジオロケーション」を使用しますか?

    機械翻訳を使用して申し訳ありません。

    Thank you for writing about GrapheneOS. I hope you can write more about the LINE app.

    Did you install Google apps from the “Apps mirror” or from another source?
    Did you install the LINE app from “Google Play Store” or “Aurora Play Store”?
    If you installed LINE app from “Google Play Store”, did you log in to “Google Play Store”? Did you log out after installation?
    In GrapheneOS sandboxed Google settings, do you use “native OS geolocation” or “Google geolocation”?

    I apologize for using machine translation.