Apple Find My People のリバースエンジニアリング — なぜ今、Linuxで?
Find My Peopleは、Appleユーザー間で位置情報を共有する便利なサービスですが、これまでApple製デバイスに限定されていました。今回のZerotistic氏の研究は、この閉鎖的なエコシステムに風穴を開けるものです。
氏の動機は、友人と位置情報を共有し、そのデータを自動化スクリプトに活用することでした。Discordでの入退室通知など、個人的なユースケースを想定していたようです。
「私は退屈していました。複雑なシステムを調べたいと思いましたが、どれにするか決めていませんでした。友人と私はAppleの『Find My』を介してお互いの位置情報を共有していました。」 (出典)
自身の Steam トラッカーの経験から、当初は単純なAPIリクエストで済むと考えていたようですが、実際はかなり困難な道のりだったと述べています。一般的な iCloud Web API では Find My People の情報が得られず、既存のオープンソースクライアントや Apple へのリクエストを分析することからスタートしたそうです。
Mac を持たない環境で、fmfd、findmylocated、searchpartyd といったデーモンの逆コンパイルコードを解析し、フィールド名やエンコーディングを試行錯誤しながら、Apple のステータスコードの変化を追っていったとのこと。これは骨の折れる作業だったのではないでしょうか。
リバースエンジニアリングの技術的な核心
今回のリバースエンジニアリングの鍵となったのは、主に以下の要素です。
- 古い
initClientAPIの利用:fmfd(Find My Friends daemon)が使用する、Appleの旧 MobileMe 名前空間に残るAPIが起点となりました。これは現在「Find My」というアプリ名に変わっても、バックエンドには古いAPIが残っているという、興味深い発見です。 - 認証トークンの特定とAnisetteヘッダーの生成:iCloud ログインで得られる多数の MobileMe トークンの中から、適切な Find My サービス用トークンを見つけ出す必要がありました。さらに、Appleライクなクライアントからのリクエストであることを証明するための「Anisette」という特殊なヘッダー生成が不可欠でした。これはデバイスUDIDやワンタイムコードのような値を含むようです。
- FindMy.pyとIDSプロトコル:既存のオープンソースプロジェクトである FindMy.py (出典) が、Anisetteヘッダーの生成や、Apple Push Notification service (APNs) 接続のためのクーリエトークン管理に役立ったとされています。位置情報自体は IDS (Identity Services) プロトコルを介してプッシュ通知として送信され、これを傍受し、復号することでリアルタイムの位置情報を取得できたとのことです。IDSはAppleデバイス間のセキュアな通信に広く使われているプロトコルで、これをLinuxでエミュレートできたのは素晴らしいですね。
| 項目 | Apple製デバイスでのFind My | Zerotistic氏の実装 (Linux) |
|---|---|---|
| 利用OS | iOS, macOS, watchOS | Linux |
| 機能範囲 | 招待、共有変更、デバイス操作、地番設定 | 既存共有の読み取りのみ |
| 位置情報 | リアルタイム表示、履歴 | リアルタイム表示 (ローカル地番設定) |
| 必要な情報 | Apple ID, 認証済デバイス | Apple ID, 適切なトークン, Anisetteヘッダー |
懸念されるプライバシーとセキュリティへの影響
今回の研究は、すでに共有されている位置情報をApple製デバイス以外で利用するというものであり、新たな共有設定の作成や不正な位置情報の取得を可能にするものではありません (出典)。つまり、許可なく他人の位置情報を追跡できるような「エクスプロイト」ではないと、氏自身が明言しています。あくまで、合法的に共有されている情報を、より柔軟に利用するための技術検証という位置付けです。
しかし、このようなリバースエンジニアリングの成果は、常に悪用される可能性と隣り合わせです。Appleが閉鎖的なエコシステムを維持する理由の一つに、セキュリティとプライバシーの確保があるのは間違いありません。今回の件をきっかけに、AppleがIDSプロトコルやFind Myの認証機構をさらに強化する可能性も考えられます。
OSのアップデートやAPI変更によって、今回成功した手法が利用できなくなることも十分にあり得ます。個人的には、オープンソースコミュニティによる解析は技術進化を促す側面も大きいと感じていますが、同時にプラットフォーム側の対応にも注目する必要があるでしょう。
「重要な注意点として、これは誰でも勝手にAppleのFind Myネットワークに侵入し、他人の位置情報を取得できるようなエクスプロイトではない。」 (出典)
この研究は、Appleのエコシステムが持つ内部構造の一端を垣間見せてくれます。クラウドサービスとデバイス間の連携における認証やプロトコルの複雑さ、そしてそれを解き明かすリバースエンジニアリングの技術的な面白さを改めて感じます。自分のプロダクトでも、外部API連携で認証周りのトラブルに遭遇することが多いので、この苦労はよく分かります。