2 ポイント 投稿者 GN⁺ 2025-03-30 | 1件のコメント | WhatsAppで共有
  • 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件のコメント

 
GN⁺ 2025-03-30
Hacker Newsの意見
  • ACTION_MAINの抜け穴は以前すでに取り上げられたことがある: https://commonsware.com/blog/2020/04/05/android-r-package-vi...
    Googleはこれをパッチしようとしていない。Android VDPに権限回避として提出したらどうなるのか気になる
    回避について著者が投稿したSOの質問もある: https://stackoverflow.com/q/79527331

    • ACTION_MAINを宣言したアプリは実際にランチャーでなければならない、と要求すれば、この抜け穴はいずれ塞げそうに見える。正常な連携なら、もっと具体的なインテントを使うべきだろう
      その時点では、たった今入手した任意のゲームをデフォルトランチャーに設定するかAndroidが尋ねる流れ自体が、怪しいアプリにとってはかなり危険なやり取りになる。ユーザーが離脱して通報したり、よく分からないユーザーがデフォルトランチャーに選んでホーム画面を壊し、Play Storeに通報したりする可能性が高い。実際にランチャー級のアプリとして配布するには、自動テストや追加要件も付き、開発者には負担になりそうだ
    • だからXPL-Extendedや、以前のXPrivacyLuaのようなプロジェクトがどうしても必要になる。Androidスマホを使うときは、こういうものなしでは使わない
    • パッケージ可視性制限が導入された時点から、すでにこの抜け穴は存在していて、ほとんど誰もがこの制限を回避する方法を知っているように思える
      Googleのエンジニアたちが広く使われているこの抜け穴を知らないとは考えにくいが、Googleが修正を拒否したという出典があるのかは気になる
    • Android VDPに提出するのは良い考えだが、意図された動作だとして流されても驚かない
    • 「パッチを拒否した」とはどういう意味なのか分からない。Play Storeでは、そのフィルターを要求しつつランチャーではないアプリを配布しようとすると、Googleが拒否する
  • ネイティブ「アプリ」がなぜ必要なのか、いまだにまったく理解できない。これまでWebサイトやWebアプリで十分ではない「アプリ」を見たことがなく、たいていはWebアプリのほうが良くなった可能性が高い
    「アプリ」の唯一の利点は、開発者が実際には必要としていない個人情報にアクセスできることのように見える
    「App Store」に載せられるという利点もあるが、App StoreはApple/Googleが売上から大きな割合を取るために作った不要な概念だ
    Webブラウザはまともなサンドボックス化を提供し、「提出」手数料もなく、あらゆるスマホの全員がアクセスできる

    • 答えは単純にユーザー体験
      現実的に、モバイルWebアプリの大半はひどい。ユーザー体験がネイティブアプリにまったく及ばない。テキストが選択されるのも嫌だし、すべてのページでプルして更新されるのも嫌だし、左スワイプで前のページに戻るのも嫌だ
      こうした問題を回避する方法は見つけられるだろうが、新しいSilkライブラリ(https://silkhq.co/)がネイティブ体験にかなり近づいた最初の例に見える。だが、これが有料ライブラリだという事実だけを見ても、この問題がいかに些細でないかが分かる
    • 奇妙な見方だ。ノートPCにもネイティブアプリは必要ないと言うのと、本質的には同じ問いだ
      ネイティブアプリにはできるが、ブラウザではうまくできない、あるいはまったくできないことが多い。たとえば重い動画/音声編集、大量のRAMへのアクセス、GPU演算の活用、ハードウェアに近い処理には、ブラウザだけではまだ不十分だ
    • iOSでネイティブアプリとWebアプリの両方がある場合、バッテリー使用量やカクつきで大きな差が出ることが多い。他の返信にもあるように、地図やメモのような完全なオフラインアプリも好む
      AppleとGoogleが実際に実装しているやり方が良いという意味ではないが、Webアプリだけを使う未来が来るとは思わない。同じ理由で、当面は自分の実用コンピューターをChromebookに置き換えるつもりもない
    • 一部は同意する。企業がショッピングトークンを集めて管理したり、カスタマーサポートにつなげたりするために出しているアプリは、Webサイトだったほうがずっと良かった
      ただし、端末上でオフライン動作し、自分が制御していないサービスへデータをばらまかないアプリは今でも良い。どこにいてもインターネット接続に依存したくもない
      森や山にいるときに道を示してくれるオフラインのOsmAnd/Organic Mapsアプリは良いし、サードパーティーサーバーではなく自分のローカル端末に直接接続してデータを共有するアプリも良い
      可能なら、すべてのアプリはオフラインファーストで開発されるべきで、必要なときだけインターネットを要求すべきだ。インターネットなしでは動作できないアプリはWebアプリで十分で、自分の端末にある必要はない
    • 本当に理解も共感もしにくい。モバイルWebはいまだにひどい体験に感じるし、アプリは概してそうではない
      最近モバイルWebで航空券を予約したのはいつなのか気になる。ブラウザが占める画面領域をどう我慢しているのかも分からない。アプリなら認証をキャッシュしてFaceIDで処理できるのに、毎回ログインしなければならないのも問題だ
  • だから Hacker News が好き
    昨日この記事を見つけて、Reddit の Android 掲示板に投稿した: https://old.reddit.com/r/Android/comments/1jmwg4w/everyone_k...
    推薦は 0 件で、コメントは落ち込んだ人たちなのかボットなのか分からない反応で埋まっていた
    ここでは 2 位圏で、ほとんどが興味深いコメントだった
    死んだサブレディットも多いが、r/android はその中でも最悪に近い

    • Reddit で正確に何が起きているのかは分からないが、死んだインターネット理論が当てはまる場所があるなら、そこだと思う
      そのうえテーマ別サブレディットは概して、そのテーマに利害関係のある人たちがモデレーションしているように見え、コミュニティには害になっている。Meta の Llama がどの独占的ライセンスの下にあるのか、そのライセンスが正確に何を意味するのかを詳しく書いた投稿をしたが、r/LocalLlama のモデレーターたちが理由もなく手動で削除し、ルールをもっとよく理解しようと尋ねても、なぜ削除したのか答えなかった
      前回の「Reddit purge」のときにコミュニティのモデレーターの多くを Reddit 社員に置き換えたことで、プラットフォームのかなりの部分が、各社が自分たちの空間を直接モデレーションできるように売り払われたのではないかと思う
    • 投稿が成功するかどうかは運次第。投稿しても何の反応もないこともあれば、人が押し寄せることもある
      タイトル下の「past」リンクを押すと 2 日前のスレッドがあるが、完全に死んでいる
    • 逆に、HN に面白いと思ったリンクを投稿してもコメントが 0 件のことは多い
    • r/android はサブレディット・ブラックアウトの打撃を大きく受け、活動量が非常に低くなった
    • そのサブレディットは概してより若い層で、「ファンボーイ」的な態度に近いので、Android 批判だという理由でダウンボートしたように見える
      Hacker News は建設的批判という概念を理解している
  • 「一般的なカテゴリを超えて、Tamil Calendar、Odia Calendar、Qibla Direction Finder、mandir アプリ、占星術アプリのようなものまで検査する。何をしているのか分かっている」という部分が核心
    この融資アプリは、民族/地域アイデンティティ(Tamil、Odia)と宗教(Qibla Direction Finder はイスラム教徒、mandir アプリはヒンドゥー教徒)を基準に人をプロファイリングしている

  • HSBC UK の Android アプリはインストール済みアプリを調べ、特定の権限を持つアプリがあると起動を拒否する。たとえば代替ランチャーがあるとだめで、今では Google アプリストア外からインストールしたアプリが 1 つでもあると起動を拒否する
    以前ここでも不満を言ったが、結局ハードウェアセキュリティデバイスを依頼し、代わりにウェブサイトを使うことになった

    • 怪しく壊れやすい小細工で動作を拒否しながら、それによってユーザーが「保護される」と主張するアプリへの指針
    • 興味深いことに、HSBC 系列の FirstDirect アプリにはそうした問題がない。以前 root 化していた端末でも動いた
    • かなり笑える話だ。他のアプリがユーザーを監視できると知らせるために、まずユーザーを監視しなければならないのだから
      このデータが会社に送信されないとでも言っているのか気になる
    • ばかげたレベルだ。HSBC らしいと感じる
  • 「自分のスマホに Xbox や Playstation アプリがインストールされているかどうかを知ることが、Swiggy の中核機能になぜ必要なのか? Naukri や Upstox アプリがあると分かることが、食料品を自宅まで配達するのに何の役に立つのか?」という問いへの答えは、フィンガープリンティング目的だ

    • 人気のリモートデスクトップアプリも検査する。スマホへの接続を許可するアプリは、詐欺の成功率を高めるのに使われ得る
      銀行アプリも同様で、詐欺師なら対象がどの銀行を使っているのかを事前に知ることは本当に有用だ
      特に電話番号と結び付けられるなら、こうした情報を欲しがる集団はかなり多いはずだ
    • フィンガープリンティングなら、まだ最善のシナリオだ
  • 「ファイルマネージャー、ブラウザ、ウイルス対策アプリのようなごく特定のユースケースについて、Google は QUERY_ALL_PACKAGES 権限の例外を与え、インストール済みアプリ全体を見られるようにしている」という部分で、ブラウザがなぜインストール済みアプリを列挙する必要があるのか分からない
    なぜ?!

    • ユーザーが play.google.com の URL を訪れたとき、Google はアプリがすでにインストールされているかどうかに応じて「インストール」または「実行」ボタンを表示したい
      つまり、Google のプロダクト管理を責めればいい
    • こうしたアプリの一部は、実際に必要な範囲よりはるかに広い権限を要求する
      たとえば Obsidian はファイルシステム全体の権限を要求するが、実際にはユーザーに表示させたファイルへアクセスできれば十分だ
    • ファイルマネージャーには全体アクセスが必要だ。その機能で、システムにインストールされている任意のアプリのコードを抽出して検査できるからだ
      とても有用な機能なので、なくなると嫌だと思う
    • どのアプリがリンクを処理できるか確認するためかもしれない
  • 「誰もがあなたのスマホ上のすべてのアプリを知っている」というのは Android スマホの話。iPhone にはこのようなプライバシー保護上の欠陥はない

    • 実は非公開 API では可能。Apple のアプリは常に使っているが、他のアプリには使用を禁止している
      https://blog.verichains.io/p/technical-analysis-improper-use...
    • iOS はある面ではもっと悪い。会社の MDM に登録すると、会社はすべてのアプリを見ることができる
      Android で最近の標準的な方法である仕事用プロファイルを使えば、仕事用プロファイル内のアプリだけを見ることができる
    • iPhone はプライバシーの悪夢としてはまだましなほう
      アプリを作る最大の誘因の一つは、ユーザーからあらゆるデータをかき集めること。連絡先へのアクセス権を要求するアプリがどれほど多いか、そして実際の機能上、連絡先が必要なアプリがどれほどあるかを見ればいい。だから、こうした発見に多くの人が驚くことに、今でも少し驚く
    • iOS では数年前にある程度緩和された
      以前はカスタム URI スキームでアプリとの通信を試み、成功すればそのアプリがインストールされていることが分かった。Twitter はこれをフィンガープリンティングに使っていた
      今ではアプリは特別なインテントを受け取る必要があり、その用途に使うアプリのリストを明示しなければならない
    • iPhone の話が出たので気になることがある。たまに使う旧Twitterの新アプリは、主なフォローを確認する程度なら十分なので Web アプリでログインしている
      最近、彼らの 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 は初めて聞いたが、数年前から使っている素晴らしい NetGuard[0] と同じ作者のアプリだ
      興味深いことに 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 は全部に同調するだけであまり役に立たないので、現実世界でなぜ実現可能ではないのかを教えてくれる人が必要だ

    • 長年 Win32 を扱ってきたプログラマーとして言うと、可能だ。意図された設計だ。たとえるなら Windows は高信頼社会のようなもの
      この目的のための EnumWindows() と EnumChildWindows() 関数がある
      この機能の例として「Windows Modifier v2.00」ユーティリティと Microsoft の Spy++(SPYXX.EXE)を見ればいい。昔初めて入手したときは関連ページがたくさんあったが、正確な名前で検索してもほとんど出てこないほど、インターネットがよく忘れるようになった兆しのように感じる
      信頼しないアプリへの解決策は、そもそも使わないか、VM で使うことだ
    • ほとんどのアプリは、システムで開いている他のすべてのウィンドウのタイトルを見られるだけでなく、すべてのキー入力を記録し、スクリーンショットを撮り、ユーザーや画面の音声/映像を録画し、ホームディレクトリのファイルをコピーしたり削除したりもできる。明示的な権限や通知なしに可能だ
      少なくとも Windows と従来の *nix システムの多く、特に X11 では正しい話だ
      この点で Android がうまくやったことが一つある。デフォルトですべてのアプリケーションを別々のユーザーとして実行する。つまりホームフォルダが異なり、他のアプリを見られない
    • ウィンドウタイトルだけで Web トラフィックを監視するのは、ページタイトルの変動が大きいため、それほど正確ではない
      それでも ManicTime や ActivityWatch のようなツールは、ブラウザプラグインをインストールしていなければ、ウィンドウタイトルでブラウザ履歴を追跡する
      https://www.manictime.com/
      https://activitywatch.net/
    • Windows はかなり異なり、より緩く古いセキュリティモデルを持っている。同じデスクトップで実行されるウィンドウ間にセキュリティの壁はない
      特に「UAC は[依然として]セキュリティ境界ではない」というのは正しい。プロセスを昇格させようとして確認を押したりパスワードを入力したりすると、実質的にはデスクトップ全体と実行中のすべてのものを一緒に昇格させることになる
    • その通り。AutoHotKey がこれをできることが、有用な AHK スクリプト多数の土台になっている