開発者が悪質なアプリを承認させるためにApp Storeレビューを欺く方法
(9to5mac.com)- 一部のiOS違法ストリーミングアプリは、通常のアプリのように審査を通過した後で隠し機能を有効にするよう設計されており、コード分析で位置情報に基づくブロックとリモート更新方式が確認された
- 異なる開発者アカウントで配布されたアプリが同じコードベースを共有しており、React NativeとMicrosoft CodePush SDKによって、App Storeの再審査なしにアプリの一部を変更できた
- 特定のアプリはGitHubリポジトリとIPベースの位置情報APIを使って、国・地域・都市・推定経度・緯度データを確認し、Appleの審査環境では隠されたインターフェースを表示しない
- 初回起動後に数秒待ってから位置情報APIを呼び出す方法で自動審査プロセスを回避し、San Jose, Californiaの位置にプロキシを設定しても隠し画面は表示されなかった
- Appleは位置ごとの動作テストや詐欺アプリの削除を強化できるが、現時点では当該アプリを削除した事実のみを明らかにしており、類似アプリの承認を防ぐ具体的な措置は公開していない
審査通過後に別のアプリのように動作する仕組み
- 9to5Macは、複数のiOS違法ストリーミングアプリがApp Store審査を欺いて承認を得た事例を取り上げ、その後のコード分析で迂回手法の詳細な動作を確認した
- 「Collect Cards」は一部の国でApp Store無料アプリダウンロードランキングの上位に入り、公開後にAppleが削除した
- 同じアプリの複数バージョンがその後App Storeに再び掲載され、審査チームを欺く方法が分析対象となった
共通コードベースとリモート更新
- 分析されたアプリは異なる開発者アカウントで配布されていたが、同じコードベースを共有していた
- アプリはJavaScriptベースのクロスプラットフォームフレームワークであるReact Nativeで作られていた
- MicrosoftのCodePush SDKを使うと、App Storeに新しいビルドを提出せずにアプリの一部を更新できる
- React NativeとCodePushの使用自体はApp Storeのルール違反ではなく、多くの人気アプリもこの方式を使っている
- 悪質な開発者は、この正規の更新技術を利用してApp Store審査を迂回する
位置情報でAppleの審査環境を見分ける
- 分析されたアプリの1つは、複数の違法ストリーミングアプリ向けファイルを提供しているとみられるGitHubリポジトリを指している
- そのアプリはIPアドレスに基づいて端末の位置を確認する特定のAPIを使用する
- APIは国、地域、都市、推定経度と緯度などのデータを返す
- アプリは初回起動時に数秒待ってから位置情報APIを呼び出す
- この遅延により、App Storeの自動審査プロセスではアプリコードの異常な動作が表面化しない
- 9to5Macはプロキシを使って位置をSan Jose, Californiaに偽装し、アプリの動作を確認した
- この位置では、アプリが隠されたインターフェースを表示することは決してなかった
承認後に実際のインターフェースを表示
- Appleが基本機能だけが見えるアプリを承認した後、開発者はCodePushで望む内容をアプリに更新する
- アプリは「安全な」位置でのみ実際のインターフェースを表示する
- この仕組みでは、審査中のApple環境と一般ユーザー環境でアプリの動作が変わる可能性がある
Appleに残された対応課題
- Appleは、アプリが別の位置でどのように動作するかを確認する追加テストによって審査プロセスを改善できる
- 詐欺アプリをApp Storeでより積極的に見つけて削除する対応も必要だ
- 2017年、UberはCupertinoにあるApple本社を対象に「geofence」を使用した疑いをかけられたことがある
- その位置でアプリが実行されると、Web全体でのユーザーフィンガープリント収集や追跡に使われるコードが自動的に無効化されたという内容だ
- 2021年の文書によると、App Store Reviewチームには毎週100,000本以上のアプリを審査する500人以上の人間の専門家がいる
- それでも大半のアプリは、手動レビューの前にApp Storeガイドライン違反の有無を確認する自動審査プロセスを通過する
- Appleの広報担当者は、関連する公開後に当該アプリがApp Storeから削除されたと明らかにしたが、類似アプリの承認を防ぐための同社の措置について詳細は示していない
1件のコメント
Hacker News のコメント
Apple が地域制限の回避を防いだとしても、動作を隠すのはとても簡単
動的コードやインタープリタ型コードはまったく不要で、こうした変種は十分に多いので、結局は停止性問題に帰着し、判定不能になりそう
技術的対策の外で対応する方法が必要。たとえば、実際に分散した人々がクラウドソーシングでアプリをテストし、悪意ある動作を見つけるような形
より一般的には、アップデート確認、つまり新バージョンがあるかを確認する機能は、同時に「このバージョンはまだアプリ審査中か?」を確認する用途にも使える
Apple App Store エコシステムから追放されたり、法的な報復を受けたりする可能性は、技術的には防げない望ましくない動作を抑止する方法の一つ
結局、規約が合理的で公正なものになるよう、エコシステムと政府レベルの圧力をもっと活用する必要がある。規約を迂回するハックはほぼ不可能になるからだ。こうしたハックは巧妙だと思うが、長続きするとは思えない
CodePush のような動的アップデートに関する Apple の文言が気になるならここにある: https://github.com/microsoft/react-native-code-push#store-gu...
“実行コード
次の段落で明記された場合を除き、アプリケーションは実行コードをダウンロードまたはインストールすることはできません。インタープリタ型コードはアプリケーションにダウンロードできますが、そのコードは (a) App Store に提出されたアプリケーションの意図され、宣伝された目的と一致しない機能を提供してアプリケーションの主たる目的を変えてはならず、(b) 他のコードやアプリケーションのためのストアまたは店舗を作ってはならず、(c) オペレーティングシステムの署名、サンドボックス、その他のセキュリティ機能を迂回してはなりません。”
ゲーム開発会社と Google/Apple の間で、審査を迂回する代わりに数十億ドル規模のルートボックス売上は流れ続けるようにしよう、という合意があるように見える
目立つ機能群の一つは、多くのアプリが Apple の囲い込み決済システムの外でサブスクリプション料金を受け取る方法だ。アプリの実際の処理が端末内だけでなくクラウドで行われるためだ。アプリを基本的なローカルアプリとクラウドの追加処理に分けることには利点があるが、端末性能が向上するほど、ローカルで何ができるかを見ることがますます魅力的になる
アプリの上位構造が十分に明確なら、その中を埋める細部は後から埋められる
ユーザーの好みや利用パターンなどに応じて、より動的なインターフェース生成を可能にする SDUI のようなものを昔から好んでいた
固定された業務手順のためのソフトウェアを作るアプローチは、ますます時代遅れになっている。パンデミックのロックダウン段階ごとに変わる要求であれ、ユーザー体験の真のパーソナライズであれ、固定的な発想のソフトウェアは柔軟性を必要とするソフトウェアに置き換えられつつある
Apple が嫌がる動作を通過させる必要があったとき、時間ベースのトリックを使った
アプリ提出の 20 日後にボタン一つの動作が変わり、「ファイルを開く」ダイアログがユーザーのルートディレクトリへ直接行くようにした
2 週間のタイマーを仕掛けておき、その後はアプリが API 呼び出しを含む実際の動作を開始した
Apple のアプリ審査は完全な冗談だ
審査担当者のシステムを指紋のように識別して、彼らにだけ機能を直接隠す方法もたぶん見つけられると思う
余談だが、詐欺アプリの圧倒的大多数は毎週の継続サブスクリプションで人々から金を取っているように見える
継続しない 1 週間利用権なら役に立つことがある。たとえば旅行中の 1 週間だけの VPN アプリのような場合だ。しかし毎週の継続課金には手動承認が必要であるべきだ。すべてのアプリが週単位の継続課金を受け取れるべきではない
海賊版アプリを悪性と呼ぶのは言い過ぎだと思う。自分が何か見落としているのか、それともこの記事は著作権者が書いたのか?
ただし売上上位アプリはすでに詐欺アプリで、私の記憶する限りずっとそうだったので、今さら驚くことでもない
“2021 年に公開された文書によると、App Store Review チームには毎週 10 万本以上のアプリを審査する 500 人以上の人間の専門家がいる。”
この文の曖昧な表現を無視し、審査担当者が勤務時間の 100% をレビューに使い、標準的な勤務週に従うと仮定すると、アプリ 1 本あたり約 12 分
残念ながら、貧しい Apple には、すべてのアプリに意味のある審査手続きを保証し、まともな労働環境で働く労働者に十分な報酬を払えるだけの審査担当者をさらに雇う余裕がないらしい。おそらく毎週審査しなければならないアプリの割り当てに追われているのだろう
それで、なぜ Apple はまた 30% を取る資格があるんだっけ?
最新のアプリがApp Storeの審査を通過して生き残ると、Appleが対応するまで使おうとする人たちが何千人も集まるTelegramチャンネル/グループがある
署名証明書やApple開発者マシンの枠の市場もあり、もう少し技術に詳しい人ならIPAに自分で署名してインストールできる
米国にはDMAのような法案が切実に必要だ。1社が、米国ユーザーの60%以上を、自分たちが使いたいアプリをインストールするという問題で囲い込めてはならない
同様に、AppleとGoogleの2社がモバイルアプリ市場全体で発生するすべての売上の15〜30%を取れるようであってもならない
まず、その60%はiOSを選んだ。「人質」ではなく、離れることができる。そしてこれは新しい挙動でもなく、iPhoneの発売時から存在していた。消費者はこれに票を投じている [1]
次に、Googleはユーザーが何をインストールするかを制御していないので、定義上「すべての売上」の一部を取っているわけではない。モバイルアプリから生まれる価値の大半も別の場所で発生しているため [2]、Appleの数字でさえ正確ではない
開発者としては当然、ユーザーの端末に自由にアクセスして、望むコードを実行したい。残念ながら、一部の開発者は消費者に有害な理由でそのようなアクセスを求めている。だから開発者はシステムをゲームのように攻略し、正直なアプリが却下される
しかし、ユーザーはこのような選別されたアクセスを望んでおり、反対ではなく賛成に票を投じているのだという点を理解する必要がある
[1] メッセンジャーについては議論の余地があるが、それはアプリではなくメッセンジャーの問題だ
[2] 私がインストールするほぼすべてのアプリは無料だ。そのアプリを作っている会社は、システムの別の部分で売上を得ている。私たちにも製品と連携する「無料アプリ」があり、人々はその製品にお金を払っている
一方では、それぞれのストアで自ら門番の役割を担い、どちらもエンドユーザーを安全に守っていると主張している
他方では、問題のアプリが収益性が高かったり、自社の数多くの他の製品群に関係していたりすると、ルールを選択的に適用する柔軟性を自分たちに認めている
監視者は誰が監視するのか?
その計画は何なのか?
「違法ストリーミングアプリ」?
懐中電灯アプリに月額50ドルのサブスクリプションを許可させる方法についての記事だと思っていた
多くのアプリは単にリモートのWebページを表示するWebViewだ
サーバーがページを更新するたびにアプリも更新され、審査は不要だ