- Android 11以降、Googleはアプリ間の照会を制限したが、複数のアプリが
AndroidManifest.xml の宣言だけでインストール済みアプリ一覧を確認できていた
- package visibility ポリシーは中核機能に必要なアプリだけを見られるよう求めているが、個別パッケージの宣言と
ACTION_MAIN フィルタが迂回経路のように使われていた
- Swiggyは154個、Zeptoは165個、KreditBeeは860個、Moneyviewは944個のアプリを宣言し、ユーザー端末に特定のアプリがあるか照会できていた
- 無作為に見たインドのアプリ47個のうち31個が
ACTION_MAIN intent filter を使っており、これは QUERY_ALL_PACKAGES なしでも画面を持つ大半のインストール済みアプリを見られるようにする
- インストール済みアプリのデータと
READ_SMS 権限は、プロファイリング、価格差別、信用・適格性判断につながりうるが、ユーザーにはアプリがいつ何を読んでいるのか分かりにくい
Androidアプリ可視性ポリシーの抜け穴
- 以前のAndroidでは、アプリが追加権限なしでユーザーのスマホにインストールされた他のアプリを見られた
- GoogleはAndroid 11から package visibility ポリシーを導入し、このアクセスを制限した
- アプリは中核機能に必須の場合にのみ、他のインストール済みアプリを見られるべきとされる
- 開発者は確認したいアプリを、すべてのAndroidアプリの必須設定ファイルである
AndroidManifest.xml に明記しなければならない
- ファイルマネージャー、ブラウザ、ウイルス対策アプリのような具体的なユースケースには、
QUERY_ALL_PACKAGES 権限が例外的に許可される
- UPI決済アプリの表示、アプリ複製・マルチアカウントアプリの検出のような場合は、正当なアプリ照会理由になりうる
- 調査したmanifestの多くにも、決済、セキュリティ、不正検知目的のアプリ照会が含まれていた
SwiggyとZeptoの広範なアプリ照会
- Swiggyはmanifestに154個のパッケージ名を列挙し、それらのアプリがスマホにあるか確認できていた
- 一覧にはXbox、PlayStation、Naukri、Upstoxなどのアプリが含まれる
- カテゴリが非常に広く、ユーザープロファイリングや行動プロファイル構築目的のデータ収集である可能性が高い
- Googleはインストール済みアプリ一覧を個人的で機微なユーザーデータと見なしている
- Zeptoは165個のアプリを端末で確認するようmanifestに登録していた
- Netflix、Bumble、Binanceなど、複数カテゴリの人気アプリが含まれていた
- ZeptoがiOSとAndroidユーザーに異なる価格を表示していたという報道があり、一部の顧客はAndroid端末ごとの価格差を報告している
- ユーザーはPlay Storeでアプリをインストールする際、そのアプリのmanifestにどのようなアプリ照会一覧が入っているかを見ることができない
配達ライダー向けアプリと個人ローンアプリの照会範囲
- SwiggyとZeptoの配達ライダー向けアプリは、消費者向けアプリとは異なるアプリ照会一覧を持っていた
- 両アプリとも、ライダーがどの他社で働いているか確認できる項目を含んでいた
- Swiggyは個人ローンアプリ、個人金融アプリ、Ludo King、Carrom Poolのようなゲームアプリまで確認していた
- インドの個人ローンアプリの略奪的な慣行は記録されており、数年前の大規模取り締まりで数千個のアプリがPlay Storeから削除されたことがある
- KreditBeeはPlay Storeの個人ローン分野で上位のアプリの1つで、ダウンロード数は5,000万回以上、manifestでは860個のアプリを確認していた
- Tamil Calendar、Odia Calendar、Qibla Direction Finder、寺院アプリ、占星術アプリのような項目も入っていた
- 高校を卒業していない人向けの婚活アプリ
Jodii for Diploma, +2,10 below や、牛・水牛の売買アプリ Buy Sell Cattle & Buffaloes Animall も例として挙がっており、どちらも1,000万回以上ダウンロードされている
- Moneyviewもダウンロード数が5,000万回以上の個人ローンアプリで、manifestに944個のアプリを含んでいた
- Play Storeポリシーは個人ローンアプリによる
QUERY_ALL_PACKAGES の使用を明示的に制限しているが、KreditBeeとMoneyviewは、欲しいアプリを1つずつmanifestに列挙する方式でこの制限を迂回していた
QUERY_ALL_PACKAGES なしでアプリ一覧を見る方法
- 調査したアプリのうち、高リスク・機微権限である
QUERY_ALL_PACKAGES をmanifestに含んでいた事例はCredだけだった
- Play Storeは、金融規制商品に関連する金融取引を促進する検証可能な中核目的を持つアプリに、この権限の「一時的例外」を認めている
- 同分野のPhonePeやPayTMのmanifestにはこの権限がなかった
- Credは個人ローンも提供しており、Play Storeの個人ローンポリシー上、この例外対象ではないように見える
- 一部アプリのmanifestには、次のような
ACTION_MAIN intent filter が入っていた
<queries>
[...]
<intent>
<action android:name="android.intent.action.MAIN" />
</intent>
[...]
</queries>
ACTION_MAIN フィルタは、画面を持つインストール済みアプリの大半に対する可視性を与え、QUERY_ALL_PACKAGES 権限がなくてもスマホのアプリ一覧を見られるようにしていた
- 同じ設定を入れた素のAndroidアプリでインストール済みアプリを照会すると、スマホ上の全アプリ一覧が返された
- 無作為に分析したインドのアプリ47個中31個がこのフィルタを使用しており、約3分の2に当たる
- 使用したアプリ: Astrotalk, Axis Mobile, Bajaj Finserv, BookMyShow, Cars24, Cure.fit, Fibe, Groww, Housing, Instamart, Ixigo, JioHotstar, KreditBee, KukuTV, LazyPay, Ludo King, Meesho, MoneyTap, Moneyview, Navi, NoBroker, Nykaa, Ola, PhonePe, PhysicsWallah, Slice, Spinny, Swiggy, Swiggy Delivery, Tata Neu, Zomato
- 使用していないアプリ: Airtel Thanks, Blinkit, Byju’s, MyGate, Dream11, Flipkart, HDFC Mobile, Healthify, INDmoney, MyJio, Paytm, PaisaBazaar, ShareChat, Unacademy, Vedantu, Zepto
- Swiggyは
ACTION_MAIN フィルタも持っていたが、アプリ照会一覧を明示的にも列挙しており、データ収集慣行の一端が見えていた
- 読み取ったmanifestファイルは android-manifest-files で公開されており、大半は3月18日または19日にダウンロードされたものだ
- この設定はインド企業のアプリだけに限られていなかった
- Facebook、Instagram、Snapchat、Subway Surfers、Truecallerも同じ設定を持っていた
- Amazon、Spotify、X、Discord、WhatsAppにはなかった
インストール済みアプリデータとSMS権限の機微性
- インストール済みアプリデータは機微な個人データである
- 2022年、Viceは、Roe v. Wadeが覆される可能性があるという報道の直後、Narrativeというデータマーケットプレイスが月経追跡アプリをダウンロードしたユーザーデータを販売していたと報道した
- アプリのmanifestには、インストール済みアプリ照会以外にも、必要範囲を超えているように見える権限が広範に含まれていることがある
- Zeptoは
READ_SMS 権限を要求する
- ユーザーは拒否できるが、Zepto Postpaidへの加入時には必須となる
- 権限を許可すると、銀行のTRAI sender IDの多数に加え、Blinkit、Swiggy、Bigbasket、FlipkartのSMSも確認対象に含まれる
- Postpaid料金プランの適格性確認のために銀行SMSを読むとみられるが、ユーザーがその機能を選ばなくても読める
- ユーザーは
READ_SMS のような権限をアプリに付与した後、アプリがいつ何にアクセスしたかを見ることができない
- Androidのアプリインストール情報は、アプリ開発者やデータブローカーによるプロファイリング、広告ネットワークのデータとの突合、価格設定などの用途に使われうる
1件のコメント
Hacker Newsの意見
ACTION_MAINの抜け穴は以前すでに取り上げられたことがある: https://commonsware.com/blog/2020/04/05/android-r-package-vi...
Googleはこれをパッチしようとしていない。Android VDPに権限回避として提出したらどうなるのか気になる
回避について著者が投稿したSOの質問もある: https://stackoverflow.com/q/79527331
その時点では、たった今入手した任意のゲームをデフォルトランチャーに設定するかAndroidが尋ねる流れ自体が、怪しいアプリにとってはかなり危険なやり取りになる。ユーザーが離脱して通報したり、よく分からないユーザーがデフォルトランチャーに選んでホーム画面を壊し、Play Storeに通報したりする可能性が高い。実際にランチャー級のアプリとして配布するには、自動テストや追加要件も付き、開発者には負担になりそうだ
Googleのエンジニアたちが広く使われているこの抜け穴を知らないとは考えにくいが、Googleが修正を拒否したという出典があるのかは気になる
ネイティブ「アプリ」がなぜ必要なのか、いまだにまったく理解できない。これまでWebサイトやWebアプリで十分ではない「アプリ」を見たことがなく、たいていはWebアプリのほうが良くなった可能性が高い
「アプリ」の唯一の利点は、開発者が実際には必要としていない個人情報にアクセスできることのように見える
「App Store」に載せられるという利点もあるが、App StoreはApple/Googleが売上から大きな割合を取るために作った不要な概念だ
Webブラウザはまともなサンドボックス化を提供し、「提出」手数料もなく、あらゆるスマホの全員がアクセスできる
現実的に、モバイルWebアプリの大半はひどい。ユーザー体験がネイティブアプリにまったく及ばない。テキストが選択されるのも嫌だし、すべてのページでプルして更新されるのも嫌だし、左スワイプで前のページに戻るのも嫌だ
こうした問題を回避する方法は見つけられるだろうが、新しいSilkライブラリ(https://silkhq.co/)がネイティブ体験にかなり近づいた最初の例に見える。だが、これが有料ライブラリだという事実だけを見ても、この問題がいかに些細でないかが分かる
ネイティブアプリにはできるが、ブラウザではうまくできない、あるいはまったくできないことが多い。たとえば重い動画/音声編集、大量のRAMへのアクセス、GPU演算の活用、ハードウェアに近い処理には、ブラウザだけではまだ不十分だ
AppleとGoogleが実際に実装しているやり方が良いという意味ではないが、Webアプリだけを使う未来が来るとは思わない。同じ理由で、当面は自分の実用コンピューターをChromebookに置き換えるつもりもない
ただし、端末上でオフライン動作し、自分が制御していないサービスへデータをばらまかないアプリは今でも良い。どこにいてもインターネット接続に依存したくもない
森や山にいるときに道を示してくれるオフラインのOsmAnd/Organic Mapsアプリは良いし、サードパーティーサーバーではなく自分のローカル端末に直接接続してデータを共有するアプリも良い
可能なら、すべてのアプリはオフラインファーストで開発されるべきで、必要なときだけインターネットを要求すべきだ。インターネットなしでは動作できないアプリはWebアプリで十分で、自分の端末にある必要はない
最近モバイルWebで航空券を予約したのはいつなのか気になる。ブラウザが占める画面領域をどう我慢しているのかも分からない。アプリなら認証をキャッシュしてFaceIDで処理できるのに、毎回ログインしなければならないのも問題だ
だから Hacker News が好き
昨日この記事を見つけて、Reddit の Android 掲示板に投稿した: https://old.reddit.com/r/Android/comments/1jmwg4w/everyone_k...
推薦は 0 件で、コメントは落ち込んだ人たちなのかボットなのか分からない反応で埋まっていた
ここでは 2 位圏で、ほとんどが興味深いコメントだった
死んだサブレディットも多いが、r/android はその中でも最悪に近い
そのうえテーマ別サブレディットは概して、そのテーマに利害関係のある人たちがモデレーションしているように見え、コミュニティには害になっている。Meta の Llama がどの独占的ライセンスの下にあるのか、そのライセンスが正確に何を意味するのかを詳しく書いた投稿をしたが、r/LocalLlama のモデレーターたちが理由もなく手動で削除し、ルールをもっとよく理解しようと尋ねても、なぜ削除したのか答えなかった
前回の「Reddit purge」のときにコミュニティのモデレーターの多くを Reddit 社員に置き換えたことで、プラットフォームのかなりの部分が、各社が自分たちの空間を直接モデレーションできるように売り払われたのではないかと思う
タイトル下の「past」リンクを押すと 2 日前のスレッドがあるが、完全に死んでいる
Hacker News は建設的批判という概念を理解している
「一般的なカテゴリを超えて、Tamil Calendar、Odia Calendar、Qibla Direction Finder、mandir アプリ、占星術アプリのようなものまで検査する。何をしているのか分かっている」という部分が核心
この融資アプリは、民族/地域アイデンティティ(Tamil、Odia)と宗教(Qibla Direction Finder はイスラム教徒、mandir アプリはヒンドゥー教徒)を基準に人をプロファイリングしている
HSBC UK の Android アプリはインストール済みアプリを調べ、特定の権限を持つアプリがあると起動を拒否する。たとえば代替ランチャーがあるとだめで、今では Google アプリストア外からインストールしたアプリが 1 つでもあると起動を拒否する
以前ここでも不満を言ったが、結局ハードウェアセキュリティデバイスを依頼し、代わりにウェブサイトを使うことになった
このデータが会社に送信されないとでも言っているのか気になる
「自分のスマホに Xbox や Playstation アプリがインストールされているかどうかを知ることが、Swiggy の中核機能になぜ必要なのか? Naukri や Upstox アプリがあると分かることが、食料品を自宅まで配達するのに何の役に立つのか?」という問いへの答えは、フィンガープリンティング目的だ
銀行アプリも同様で、詐欺師なら対象がどの銀行を使っているのかを事前に知ることは本当に有用だ
特に電話番号と結び付けられるなら、こうした情報を欲しがる集団はかなり多いはずだ
「ファイルマネージャー、ブラウザ、ウイルス対策アプリのようなごく特定のユースケースについて、Google は QUERY_ALL_PACKAGES 権限の例外を与え、インストール済みアプリ全体を見られるようにしている」という部分で、ブラウザがなぜインストール済みアプリを列挙する必要があるのか分からない
なぜ?!
つまり、Google のプロダクト管理を責めればいい
たとえば Obsidian はファイルシステム全体の権限を要求するが、実際にはユーザーに表示させたファイルへアクセスできれば十分だ
とても有用な機能なので、なくなると嫌だと思う
「誰もがあなたのスマホ上のすべてのアプリを知っている」というのは Android スマホの話。iPhone にはこのようなプライバシー保護上の欠陥はない
https://blog.verichains.io/p/technical-analysis-improper-use...
Android で最近の標準的な方法である仕事用プロファイルを使えば、仕事用プロファイル内のアプリだけを見ることができる
アプリを作る最大の誘因の一つは、ユーザーからあらゆるデータをかき集めること。連絡先へのアクセス権を要求するアプリがどれほど多いか、そして実際の機能上、連絡先が必要なアプリがどれほどあるかを見ればいい。だから、こうした発見に多くの人が驚くことに、今でも少し驚く
以前はカスタム URI スキームでアプリとの通信を試み、成功すればそのアプリがインストールされていることが分かった。Twitter はこれをフィンガープリンティングに使っていた
今ではアプリは特別なインテントを受け取る必要があり、その用途に使うアプリのリストを明示しなければならない
最近、彼らの LLM 機能が大きくアップデートされたので、アプリをインストールして確認した。アプリがインストールされている間、モバイル Web サイトを見るたびにアプリへ移動するよう促す大きなバナーが出て、広告ブロッカーや邪魔要素ブロッカーでも消せなかった。アプリを再び削除すると消えた
なぜこうなるのだろう?モバイル Web サイトがアプリのインストール有無をどうやって知るのか気になる。アプリがインストールされていないときは、コンテンツ/邪魔要素ブロッカーでアプリ利用の勧誘をすべてブロックできるのに、インストールされているときはなぜできないのかも分からない
root が必要だが、LSPosed[1] モジュールである XPrivacyLua[2] のようなもので、これをブロックしたり偽装したりできる。クローズドソースの AppOps[3] もあると聞いたが、使ったことはない
[1]: https://lsposed.org
[2]: https://github.com/M66B/XPrivacyLua / https://github.com/0bbedCode/XPL-EX
[3]: https://appops.rikka.app
興味深いことに XPrivacyLua はもうサポートされておらず、プロ向けのコンパニオンアプリは QUERY_ALL_PACKAGES 権限を使っているという理由で、Google によって Play Store から削除される予定だ
[0]: https://github.com/M66B/NetGuard
[1]: https://xdaforums.com/t/closed-app-xposed-6-0-xprivacylua-an...
Windows アプリ、特に MS Store からインストールしていないアプリが、開いているすべてのウィンドウのタイトルを列挙できるのか気になる。アプリがタイトルだけで Web トラフィック全体を監視するのはどれほど難しいのだろう?
本気で聞いている。ChatGPT は全部に同調するだけであまり役に立たないので、現実世界でなぜ実現可能ではないのかを教えてくれる人が必要だ
この目的のための EnumWindows() と EnumChildWindows() 関数がある
この機能の例として「Windows Modifier v2.00」ユーティリティと Microsoft の Spy++(SPYXX.EXE)を見ればいい。昔初めて入手したときは関連ページがたくさんあったが、正確な名前で検索してもほとんど出てこないほど、インターネットがよく忘れるようになった兆しのように感じる
信頼しないアプリへの解決策は、そもそも使わないか、VM で使うことだ
少なくとも Windows と従来の *nix システムの多く、特に X11 では正しい話だ
この点で Android がうまくやったことが一つある。デフォルトですべてのアプリケーションを別々のユーザーとして実行する。つまりホームフォルダが異なり、他のアプリを見られない
それでも ManicTime や ActivityWatch のようなツールは、ブラウザプラグインをインストールしていなければ、ウィンドウタイトルでブラウザ履歴を追跡する
https://www.manictime.com/
https://activitywatch.net/
特に「UAC は[依然として]セキュリティ境界ではない」というのは正しい。プロセスを昇格させようとして確認を押したりパスワードを入力したりすると、実質的にはデスクトップ全体と実行中のすべてのものを一緒に昇格させることになる