裏取りが済んでない記事未満の何かを垂れ流すスペース。
内容は現状のまま無保証で掲載されるし、見解は所属を代表した公式なものではないし、何かを推奨するものではない。
記載の内容を真似したことで起こるいかなる損害についても責任を負わない。
わたしは既にAndroidのカスタムROM開発からは手を引いたので、これ以上要らんこと聞いてこないでくれ。
ここに書いてる以上のことは無い。以下の戯言はやる気があった頃のめんどくさい主張とその根拠である。
私も調べててよくわからなくなったので鵜呑みにせず参考程度に。
どっかで LineageOS に対する dis を見かけたけど私の知ってる話と違う気がしたので調べ直している話。
本題ではないのでざっくりとしか説明しない。実際にどう使うかはこの記事では扱わないことに注意。
追記: microG のインストールについては別記事 poem:setup-microg で扱う。
不自由なソフトウェアである Google Play サービスに代わって、アプリケーションが Google API を利用するための FLOSS での代替実装。
プライバシーや自由を確保しながら、Google Play サービスに依存している Android の主要機能(プッシュ通知とか)を活用し続けることができる。
他のメリットにはバッテリやCPUへの負荷軽減、不必要な肥大化の回避などが挙げられる。
microG は その目的のために、Google Play サービスの核である GmsCore
(と、必要に応じて Play ストア)のあるべき場所に収まって、自身が正規のパッケージであるふりをする(成り代わる)必要がある。
Google Play サービスを利用するアプリケーションには Play Service Client Library が埋め込まれており、このライブラリはアプリケーションの署名に使用した証明書を要求することでデバイスにインストールされている Google Play サービスが特定の秘密鍵で署名されていることを確認する。また、Playストアがインストールされており、先と同じ秘密鍵を用いて署名されていることも確認する(このために microG には FakeStore
がある)。
Signature Spoofing ではアプリケーションがインストール済みのパッケージについて署名に使用した証明書を要求した際に、パッケージに含まれる証明書の代わりに なりすまし用の証明書 を 常に 返すようになる。つまり、 microG GmsCore
自身の証明書ではなく正規の GmsCore
が持つべき証明書を返すことで microG GmsCore はあたかも正規の GmsCore であるかのように振る舞うことが可能になる。
Signature Spoofing に対応したシステム上で、 microG のFakeStore
が実際にandroid.permission.FAKE_PACKAGE_SIGNATURE
を要求する様子。
何も知らないとぎょっとしそうなメッセージだが、何も知らないのにこんなところを触るべきではない。
https://blogs.fsfe.org/larma/2016/microg-signature-spoofing-security/
上の記事読んでもらえばいいんですが、具体例のひとつとしては以下
LineageOS は…というか、彼らは前身の CyanogenMod の頃から一貫してこれらのパッチを reject している。
見解については CyanogenMod 時代の議論 から引っ張り出してくると、
というのが彼らのスタンスということになっている。
あとは先述のセキュリティリスクも、実装次第で塞げるはずだけど当該パッチでは特に対処されていないというのも reject の一因ですね。
microG が必要な人達からすれば頑なに態度を崩さない!悪!みたいに見えるかもしれないけど、サポートしている機種数や利用者などの規模を見るとそこに影響を与えかねない公式ビルドにリスキーな変更を入れることへの抵抗は大きくて、まあコミュニティとしての立ち回りはそんなもんだと思う。
CalyxOSなら安全!みたいなのを見たのでなんかやってんのかなあと思って掘ったら こんな経緯 があって、
What I want to do:
- Hardcode the signature spoofing to only work with the microg GmsCore, and FakeStore if required
- Ensure that it is the microg replacement by checking their signature, it could be signed with a separate key (and not the default system key) if that works (will need us to maintain an additional "microg" key but worth it IMO).
- No runtime permission prompt for this, no developer option entry to enable this for all apps - This only works with GmsCore (and FakeStore), and nothing else.
- Could even hardcode the spoofed signature here to ensure that they can only spoof the one signature.
つまり CalyxOS の場合、先のセキュリティリスクや CyanogenMod 時代の議論の中での指摘に対応する形で、Signature Spoofing は完全に microG を使うため だけ に導入するもの (GmsCore
と FakeStore
のみが対象)であって、それ以外のパッケージでは利用できないように ハードコードする 、なりすまし用の証明書もGoogleの使用するGmsCoreのそれをハードコードする(他の証明書を用いた不正ななりすましの防止)、などの対策を行っている。それに加えて、最初から microG を同梱するならば問題は起きないというのが CalyxOS なりの答えっぽい。
- Permission FAKE_PACKAGE_SIGNATURE required
- Only microG and FakeStore can spoof signature
- Only the official Google signature can be spoofed, the "fake-signature" field is unused.
実際のコミット。com.google.android.gms
(GmsCore) と com.android.vending
(PlayStore/FakeStore) のみに絞っている。
上では使わなかったけどメモ
例えば雑に microG をforkして接続先を Google ではないところにしちゃったりとか ↩︎