OpenHaystack: Appleネットワーク経由でBluetooth機器追跡「AirTags」を作る技術
(github.com/seemoo-lab)- OpenHaystackは、AppleのFind Myネットワークを利用して個人用Bluetooth機器を追跡するためのフレームワークで、MacとBBC micro:bitまたはBluetooth対応機器で独自の追跡タグを作成できる
- 近くのiPhoneがOpenHaystackアクセサリのBLEアドバタイズを検出すると、位置情報を暗号化してAppleのサーバーにアップロードし、OpenHaystackはその位置レポートを取得して復号し、地図上に表示する
- このプロジェクトは、TU Darmstadt Secure Mobile Networking LabによるFind Myネットワークのリバースエンジニアリングとセキュリティ分析の成果であり、位置データへのアクセス脆弱性CVE-2020-9986はAppleが修正済み
- macOSアプリは位置レポートを受け取るためにApple Mailプラグインを使用し、インストール時にはGatekeeperを一時的に無効化し、利用中はMailを開いたままにしておく必要がある
- 実験的ソフトウェアのためコードはテスト不足で未完成な部分があり、提供されるファームウェアベースのアクセサリは固定公開鍵をブロードキャストするため、近くの別の機器からも追跡される可能性がある
OpenHaystackができること
- OpenHaystackは、AppleのFind Myネットワークを通じて個人のBluetooth機器を追跡するためのフレームワーク
- ユーザーは独自の追跡タグを作成して鍵束やバックパックのような物に取り付けたり、ノートPCのようなBluetooth対応機器に統合したりできる
- 必要なのはMacとBBC micro:bitまたはその他のBluetooth対応機器
- セルラー接続がなくても、近くのiPhoneがアクセサリを検出し、ネットワーク接続時に位置情報をAppleサーバーへアップロードする
研究背景とセキュリティ分析
- OpenHaystackは、AppleのFind My networkまたはoffline findingに対するリバースエンジニアリングとセキュリティ分析の結果から生まれた
- TU DarmstadtのSecure Mobile Networking Labは、2019年6月のAppleによるoffline finding発表後に分析を開始した
- このシステムは次の要素を組み合わせている
-
Bluetoothアドバタイズ
- 公開鍵暗号
- 暗号化された位置レポートの中央データベース
- 分析の過程で2つの脆弱性が発見された
- 最も深刻な脆弱性では、悪意あるアプリケーションが位置データへアクセスできた
- この脆弱性はAppleが修正し、CVE-2020-9986として識別されている
- 関連するセキュリティおよびプライバシー分析は、PoPETs 2021の論文Who Can Find My Devices? Security and Privacy of Apple's Crowd-Sourced Bluetooth Location Tracking Systemで扱われている
-
実験的ソフトウェアという制約
- OpenHaystackは実験的ソフトウェアであり、コードは十分にテストされておらず未完成
- 提供されるファームウェアを使用するOpenHaystackアクセサリは固定公開鍵をブロードキャストする
- このため、近くの他の機器からも追跡される可能性がある
- この挙動は今後のリリースで変更される可能性がある
- OpenHaystackはApple Inc.と提携しておらず、Appleの保証を受けたプロジェクトでもない
構成要素と利用の流れ
- OpenHaystackは2つの構成要素から成る
- macOSアプリケーション: 個人のBluetooth機器の最後に報告された位置を表示する
- ファームウェアイメージ: Bluetooth機器がiPhoneに検出されるビーコンをブロードキャストするようにする
- システム要件はmacOS 11 Big Sur
- 新しいアクセサリを作成する際、ユーザーは名前を入力し、必要に応じてアイコンと色を選ぶ
- アプリは位置レポートの暗号化と復号に使う新しい鍵ペアを生成する
- 秘密鍵はMacのキーチェーンに保存される
- 機器のデプロイは、USBで対応機器をMacに接続し、アプリのDeployボタンを使う方式
- 統合デプロイの代わりに、アドバタイズに使う公開鍵をコピーして手動でデプロイすることもできる
- 地図上に最初の位置レポートが表示されるまで最大30分かかることがある
- 地図にはすべての項目の最新位置が表示される
- 各項目をクリックすると、最後の更新受信時刻を確認できる
- reloadボタンで位置レポートを更新できる
Mailプラグインとインストール方法
- OpenHaystackアプリは、Appleサーバーから位置レポートを取得するためにApple Mail用カスタムプラグインを必要とする
- このプラグインは、非公開APIの利用に必要なApple Mailの権限を継承する形で動作する
- インストール時にはGatekeeperを一時的に無効化する必要がある
sudo spctl --master-disableでGatekeeperを無効化- MailのPreferences → General → Manage Plug-Insで
OpenHaystackMail.mailbundleを有効化 - その後、
sudo spctl --master-enableでGatekeeperを再有効化
- このプラグインは、メールなど他の個人データにはアクセスしないとされている
- 位置レポートのダウンロード中は、OpenHaystackアプリがプラグインと通信するため、Mailを開いたままにしておく必要がある
Find Myネットワークの動作方式
- OpenHaystackはAppleのoffline findingシステムを4段階で説明している
-
ペアリング
- Find Myネットワークを利用するため、P-224楕円曲線ベースの公開鍵・秘密鍵ペアを生成する
- 秘密鍵はMacのキーチェーンに安全に保存される
- 公開鍵はmicro:bitのようなアクセサリにデプロイされる
-
紛失状態
- アクセサリは公開鍵をBluetooth Low Energyアドバタイズとしてブロードキャストする
- 近くのiPhoneはOpenHaystackアクセサリを実際のApple機器や認証済みアクセサリと区別できない
-
発見
- 近くのiPhoneがBLEアドバタイズを受信すると、GPSで現在位置を取得する
- iPhoneはアドバタイズに含まれる公開鍵で位置情報を暗号化し、Appleサーバーに暗号化レポートをアップロードする
- iOS 13以降のiPhoneはデフォルトでこの動作を行う
- この段階にはOpenHaystackは関与しない
-
検索
- Appleは、どの暗号化された位置情報がどのAppleアカウントや機器に属するかを知らない
- 対応する公開鍵を知っていれば、Appleユーザーは任意の位置レポートを取得できる
- レポートはエンドツーエンド暗号化されているため、秘密鍵がなければ復号できない
- OpenHaystackはOpenHaystackアクセサリ用のレポートをAppleから取得し、Macのキーチェーンに保存された秘密鍵で復号して、地図に最新位置を表示する
- Appleは認証済みのAppleユーザーだけが位置レポートを取得できるようにして、データベースへの無制限アクセスを制限している
対応機器と拡張
- 原理上、Bluetooth機器はApple Find Myネットワークで追跡可能なOpenHaystackアクセサリにできる
- 現在、手軽なファームウェア配布方式は一部の組み込み機器のみをサポートしている
- Linux機器は一般的なHCIスクリプトでサポートされる
- 対応例は次の通り
- Nordic nRF51: BBC micro:bit v1でテスト済み、アプリからのデプロイに対応、現在はnRF51822のみ対応
- Espressif ESP32: ESP32-WROOM、ESP32-WROVERでテスト済み、アプリからのデプロイに対応、デプロイに最大3分かかることがあり、Python 3が必要
- Linux HCI: Raspberry Pi 4とRaspbianでテスト済み、すべてのLinuxマシンをサポートするはず
- Bluetooth Low Energyをサポートする他の機器にも移植可能で、ファームウェアのソースコードと論文の仕様に基づいて作業できる
OpenHaystack Mobile
- OpenHaystack Mobileは、OpenHaystack macOSアプリケーションをスマートフォン向けに完全に再実装したアプリ
- アクセサリの作成と追跡機能を提供し、特に新規ユーザーの使いやすさ向上を目指している
- macOSアプリと異なり、スマートフォンでは位置レポートを直接取得できない
- Find Myネットワークにアクセスするには、Macハードウェア上でホストされるプロキシサーバーが必要
- プロキシサーバーには、ネットワーク経由で複数ユーザーが同時にアクセスできる
- プロキシサーバーに接続するには、
openhaystack-mobile/lib/findMy/reports_fetcher.dartで正しいURLを設定する必要がある - OpenHaystack MobileはFlutter frameworkで作られており、AndroidとiOSで動作する
ライセンスと参考資料
- OpenHaystackはGNU Affero General Public License v3.0で配布されている
- 主な参考資料
1件のコメント
Hacker Newsの意見
Appleユーザーではない人にも良い選択肢があるといいのだが。聞くところでは、Google版は案の定かなりひどいらしい
自分のタグを検索できる頻度に制限があり、複数の携帯電話に検知されるまで位置を表示せず、カバー範囲も悪い
あるテストではSamsungネットワークのほうが良いという結果が出ていたが、SamsungのスマートフォンはGoogleネットワーク内のすべてのAndroidスマートフォンの一部のはずなので、話が合わない。理論上は良さそうに見えても、Appleがやり方を示してから数年たっても実装がひどい、いかにもGoogle製品らしい姿だ
https://security.googleblog.com/2024/04/find-my-device-netwo...
https://9to5google.com/2024/08/01/find-my-device-stress-test...
https://9to5google.com/2024/08/03/google-android-find-my-dev...
https://www.androidcentral.com/accessories/testing-new-googl...
この選択によってGoogleは、実際の性能がどれほど悪いか検証される前に、“革新的な”プライバシー改善を扱う記事をいくつか得たが、Appleとこの分野で競争する機会を失い、Android/Pixelエコシステムと市場シェアにも悪影響を与えた。ここまでの無能さは作り話にもできない
デジタルノマドとしては、Appleネットワークは特別便利というわけではない。Appleのスマートフォンが多い裕福な都市ではなく、Androidシェアが90%近い「その他の世界」を移動しているからだ。それなのに、そこでもAppleのほうがGoogleよりうまくやっているように見える
実際にはすぐ隣のバッグの中にあった
とても辺鄙な国の空港や町でもタグ2個をしっかり見つけられるので安心できる。この動画も、iPhoneユーザーであってもSamsung SmartTagが最高だと結論づけている
https://m.youtube.com/watch?v=9wefUV_bR0Y
コードを見ると、Find Myネットワークのデバイスが収集した位置を取得するために、個人のApple Mail権限を使っているようだ
https://github.com/seemoo-lab/openhaystack/blob/8d214aa5eb68...
Apple開発者アカウントを作れば、これも可能なのか気になる
必要なのはAppleアカウントだけで、Appleハードウェア上でコードを実行する必要もない
https://github.com/biemster/FindMy
以前見た資料を探したい。Appleは「あなたを追跡しうるタグ」をユーザーに知らせるが、誰かが鍵導出関数(KDF) でMACアドレスや秘密鍵のようなものをローテーションさせる実装を作っていて、その派生値が追跡できるほど予測可能だった、と記憶している
住んでいる場所では軽微な盗難被害が本当に深刻で、割られた窓を直したり、侵入の痕跡を片付けたりするのにかなり時間を取られる。誰かと直接対面するつもりはまったくないが、いつか私立探偵や法執行機関に渡せる移動経路を作りたい
あるいはペットボトルの水をひと箱持って近くの薬物依存者の集まる場所へ行き、もう物を盗まないでくれと頼むこともできる
ただ、ローテーション周期が遅いかもしれないし、正確なアルゴリズムはよく知らない
ただし数年前の話なので、今は変わっているかもしれない
独自の不安定な手順で位置情報を取得する代わりに、Find Myアプリと統合する方法があるとよいのだが。
中国製の互換品は独自ブランドを付けてもできているので、どうにかすれば可能なのは間違いなさそうだ
その署名はAppleが検証するため、そのApple IDアカウントとアプリに追加できる。一方、紛失モードでデバイスがブロードキャストするキーはランダムで完全に不透明なので、AppleにもそれをID、デバイス、開発者と結び付ける方法がない。このプロジェクトが動く理由も、結局それらのキーがAppleサーバーに入ってくるからだ。
互換品はペアリング過程用の正規キーを盗用しているように見える。Appleが本気でそのキーを見つけ出せば、すべてのアカウントからすべてのデバイスを削除できそうだが、デバイス自体は引き続きブロードキャストし、上記のような雑な方法で位置にアクセスできるはずだ。本来のキー所有者は、後でAppleがデータベース内の「このキーで署名されてApple IDに追加されたデバイス数」を数えたら、デバイスごとのロイヤルティとして巨額の請求書を受け取ることになるのだろうかとも思う
OpenHaystackは別のキーを使うハックなので、暗号学的な理由からアプリには表示できない
本当に素晴らしい。Apple AirTagは好きだが、厚すぎるし形も微妙だ。
財布に入れられるクレジットカード型AirTagがあるといいし、猫の首輪に付けられるもっと小さいAirTagもあるといい
持っていたものを1つケースから取り出して何をもっと薄くできるか見てみたところ、厚みの大半はCR2032バッテリーホルダー、スピーカー、ボタンによるものだった。スピーカーとボタンは初期設定後ならなくせそうだし、バッテリーホルダーも外したうえで薄いカード型フォームファクタが欲しいなら、上側ではなく側面から給電することもできる
https://imgur.com/a/r9EGSOc
写真はたった今Meta Storiesグラスで撮った
https://www.amazon.com/gp/product/B09DCVFNFF/
ただし、AirTagがホルダーの中でねじれて外れないよう、透明テープで巻いておく必要があった
詳しく調べたわけではないが、これを使って小さな任意データペイロードを載せて送れるのか気になる
コンピュータが完全に隔離されていても、入力している人のiPhone経由でデータを持ち出せる
キーが変わって新しい別のデバイスが見えるようになったら郵便物が入ったという意味で、かなり巧妙だ
単一デバイスがAppleサーバーに上げられる送信量の上限が気になる。AppleデバイスにセルラーやWi‑Fiがなければ、その位置 ping の記録はデバイス上にどれくらい残るのだろうか。
また、ここにサービス拒否攻撃の可能性があるのかも気になる。攻撃者が100万台以上のBluetoothデバイスを偽装し、被害者がたまたま通りかかると、その場所に膨大な数のデバイスがあるせいでスマホが固まり、Appleサーバーへ延々とアップロードし続けるといった形だ
ところで、iPhoneやMacのような別のAppleデバイスなしでも、これで実際のAirTagの設定はできるのだろうか?
以前の投稿: https://news.ycombinator.com/item?id=26342504
これらを実際にApple Find Myアプリとペアリングして、アプリ内で見つけられるのか?