2 ポイント 投稿者 GN⁺ 2024-08-20 | 1件のコメント | WhatsAppで共有
  • FindMy Flipperは、FlipperZeroのBluetooth機能を拡張し、Apple AirTag、Samsung SmartTag、Tile Trackerのように動作させるアプリ
  • FlipperZeroのBLEビーコンでSmartTag信号をブロードキャストし、既存タグを複製したりOpenHaystackの鍵ペアを生成したりして、Apple FindMyネットワークと連携できる
  • 既存タグの複製方式では、AirTag、Samsung SmartTag、Tile TrackerのMACアドレスとpayloadを取得してネイティブアプリで追跡できるが、AirTagはバッテリーを入れ直すと鍵がローテーションし、Flipperの現在の鍵が無効になる可能性がある
  • AirTagの鍵生成方式は、実際のAirTagやAppleデバイスがなくても可能だが、Docker Desktop、Python、Gitが必要で、位置データを受け取るためにコンピューターとApple ID認証を使用する
  • アプリはバックグラウンド実行とビーコン間隔・送信出力の調整に対応しており、ユーザーは追跡デバイスに関するプライバシー法規と元のデバイスの所有権を尊重する必要がある

FlipperZeroを追跡タグのように使うアプリ

  • FindMy Flipperは、FlipperZeroにApple AirTag、Samsung SmartTag、Tile Trackerをエミュレートさせるアプリ
  • FlipperZeroのBLEビーコンを使って、FindMy Networkで検出され得るSmartTag信号をブロードキャストする
  • 目標機能は次のとおり
    • 既存のApple AirTag、Samsung SmartTag、Tile TrackerをFlipperZeroに複製
    • 実際のAirTagなしでFindMyネットワーク用のOpenHaystack鍵ペアを生成
    • FlipperZeroの位置を継続的に追跡

主な機能

  • タグエミュレーション

    • 既存タグのMACアドレスとpayloadを複製できる
    • 実際のAirTagを所有していなくても、FindMyネットワーク用の鍵ペアを生成できる
  • ユーザー調整

    • ビーコンのブロードキャスト間隔を調整できる
    • 送信出力を変更し、可視性とバッテリー寿命のバランスを調整できる
  • バックグラウンド動作

    • アプリはバックグラウンド実行に最適化されている
    • FlipperZeroの通常利用を妨げず、低いバッテリー消費で追跡を維持するよう設計されている

インストール方法

  • インストールは2つの方法で可能
    • デバイスに合ったリリース/プリコンパイル済みのFAPファームウェアを使用
    • fbt/ufbtでファームウェアを自分でビルド
  • 現在、すべてのファームウェアはアイコンを含めてmainブランチで動作するはず

SmartTagデータの取得方法

  • タグエミュレーションデータの取得方法は2つ
    • Option A: 既存タグの複製

      • Option B: AirTag鍵生成
  • Option A: 既存タグの複製

    • 既存タグの複製は推奨される方式で、追加設定なしで追跡できる
    • Apple、Samsung、Tileのタグを、実際のタグのMACアドレスとpayloadの複製として使用できる
    • この方式により、Apple FindMy、Samsung SmartThing、Tile Appのようなネイティブアプリ経由で追跡できる
    • 基本手順は次のとおり
    • AirTag、Samsung SmartTag、Tile Trackerをまずデバイスとペアリング
    • 登録済みデバイスからタグを約15分離してLostモードに入れる
    • AndroidのnrfConnectまたはESP32を使用
    • nrfConnectではApple版が必要なRawデータを表示しないため、Android版の使用が案内されている
    • ESP32-WROOMまたはESP32-S3を使えば、Androidなしでも必要なデータを取得できる
    • 関連ツールとしてESP32-AirTag-Scannerを使用できる
    • スキャン手順には、フィルターでタグブランド以外の項目を除外し、RSSIを**-40 dBm**に調整したうえで、SmartTagが「FindMy」デバイスとして表示されるまで待つ工程が含まれる
    • payloadとMACアドレスをキャプチャした直後に、タグのバッテリーを取り外す必要がある
    • AirTagにバッテリーを再装着すると、Appleサーバーとの間で鍵がローテーションされる可能性がある
    • 鍵がローテーションされると、Flipperの現在の鍵は無効になる
    • Flipperで使い続けるには、AirTagの電源を切ったままにするか、バッテリーを取り外しておく必要がある
    • AirTagとFlipperを同時に使用することはできず、必要であれば手順を繰り返してFlipperの機能を戻すことができる
    • キャプチャしたpayloadMAC AddressはFlipperZeroアプリに入力する
  • Option B: AirTag鍵生成

    • AirTag鍵生成は、AppleデバイスやAirTagなしでAirTagをエミュレートする方式
    • この方式は鍵生成によって動作し、位置データをダウンロードするにはコンピューターが必要
    • 必要な構成要素は次のとおり
    • Docker Desktop
    • Python
    • Git
    • リポジトリをクローンした後、AirTagGenerationフォルダーで作業する
    git clone https://github.com/MatthewKuKanich/FindMyFlipper.git
    cd AirTagGeneration
    
    • Docker Desktopを起動した後、次のコマンドでサーバーを設定する
    docker run -d --restart always --name anisette-v3 -p 6969:6969 dadoum/anisette-v3-server:latest
    
    • このサーバーはApple認証サーバーを欺く環境をエミュレートする
    • Python仮想環境を作成して有効化した後、依存関係をインストールする
    python3 -m venv venv
    pip3 install -r requirements.txt
    
    • generate_keys.pyはAirTagに必要な鍵を生成し、新しいkeysフォルダーに保存する
    • 生成された.keysファイルはFlipperZeroへ移し、アプリでインポートできる
    • アプリのconfigメニューで「register tag」を選択
    • タグの種類を選択
    • .keysまたは.txtをインポートするか、手動入力
    • 手動入力の場合はMACとpayloadを順に入力
    • 保存を押して登録
    • request_reports.pyはApple IDとパスワード認証でリアルタイムの位置データを要求する
    • Appleのログイン情報はauthファイルに保存され、以後は再入力しなくてよい
    • RequestReport&Map.pyは過去24時間の位置データをインタラクティブな地図に表示する
    • keysフォルダーのハッシュ化された広告鍵で位置レポートを要求
    • 同じ.keysファイルの秘密鍵でデータを復号
    • 復号されたデータをターミナルに表示
    • 座標を地図に表示し、移動経路を接続
    • 位置メタデータを表示し、レポート日付名のHTMLファイルとして保存

FlipperZeroアプリの設定と調整

  • アプリ実行後、configメニューでImport Tag From FileまたはRegister Tag Manuallyを使用できる
  • .keysファイルはFlipperZero SDカードのapps_data->findmyまたはAppsData/FindMyFlipperフォルダーに置いてインポートする流れが含まれている
  • nrfConnectで保存した.txtファイルも同じフォルダーに入れてインポートできる
  • 調整可能な項目は次のとおり
    • Beacon Interval: FlipperZeroが存在をブロードキャストする頻度を調整
    • Transmit Power: 追跡範囲とバッテリー寿命のバランスを取るための信号強度を調整

互換性、代替手段、責任

  • 対応対象は次のとおり
    • FindMyネットワーク経由のAirTag追跡用Appleデバイス
    • Samsung SmartTag追跡をサポートするデバイスとWebブラウザー
    • Tile App経由のTile Tracker
  • OpenHaystackで追跡するにはmacOS 14未満が必要
    • macOS 14以降ではMailプラグインの互換性問題がある
  • 代替手段としてmacless-haystackが提示されている
    • この方式を使う場合でも、AirTagGenerationフォルダーのgenerate_keys.pyだけを使用する必要がある
    • 同リポジトリの鍵生成スクリプトは鍵ファイル形式が異なり、FindMy Flipper側のファイルにはFlipperZeroで正常にインポートするために必要なデータが含まれている
  • このアプリは個人および教育用途を意図している
  • ユーザーは追跡デバイスに関する現地のプライバシー法規と規制を遵守する必要がある
  • 追跡タグの複製とエミュレーションは、元のデバイスの所有権を尊重し、責任を持って使用する必要がある
  • このプロジェクトはApple Inc.またはSamsungとは関係がない

1件のコメント

 
GN⁺ 2024-08-20
Hacker Newsのコメント
  • 興味深いプロジェクトだが、ここで使われている下位依存関係の一つがデフォルトでは安全ではなさそう:
    https://github.com/biemster/FindMy/blob/113ebf4017729b92a381...
    iCloud向けの認証ライブラリに見え、生成したキーをデバイスに紐づけるために MacBook device agent をハードコードしているようだ
    中央集権型サービスがそうであるように、複数のサービスやデジタル資産が多く結びついているアカウントでは使わない。Appleがこのような利用アカウントをブロックしても驚かない
    ログインに必要な固有の adsid コードがあるので、見つけ出すのも難しくなさそう

    • 「生成したキーをデバイスに紐づけるために MacBook device agent をハードコードしているようだ」ということなら、技術的にはAirTagの登録にiOSデバイスは不要で、任意のAppleデバイスで十分ということなのか?
      それなのにAppleがなぜこれを公式サポートしないのか分からない。iOSデバイスの販売を後押ししたいからなのかと思ってしまう
      Appleのデスクトップ/モバイル機器を5,000ドル分くらい持っているのに、AirTagをいくつか登録するために中古のiPhoneをもう1台買った身としては腹が立つ
    • 大したことではない、localhostだ:
      https://github.com/biemster/FindMy/blob/113ebf4017729b92a381...
    • iCloud向けの認証ライブラリはユーザーにとって本質的に安全ではなく、当然ながらApple, Inc.にとってはそうではない。このプロジェクトはひどいものだとしても、2つの別製品としてフォークすべきだと思う
      意識的には、サードパーティライブラリを統合することは絶対にしない。今でも VenToy のすべてのリリースをウイルススキャナーにかけていて、NZ系の脆弱性が実際に明らかになる瞬間を待っている
      Appleの決済フローのせいというより、サブスクリプションモデルのせいだ。Appleが面白いと感じる機能を無料で提供するなら注意すべきだ。Appleはアクセスを遮断し、ユーザーから料金を取り始める可能性がある
      ギークたちを怒らせることにも二重に注意すべきだ。金曜の夜に怒ったまま眠り、週末中ずっと製品をブラックボックス解析して実装を取るに足らないものにしてしまう人たちなので、本当に怖い
  • この概念は、Appleなどが組み込んでいるストーキング防止機能を回避するのに使われる可能性もありそうだ
    例えばN個のドナータグを用意して 24/N 時間ごとに交互に使えば、Appleやデバイス追跡の観点では、追跡対象者が長時間単一のタグに付きまとわれているようには見えなくなる

    • まだパッチされていないなら、タイマーでタグの電源を定期的に切ったり入れたりするだけでも検出を回避できると聞いた
      大きなバッテリーと単純なタイマー回路を取り付け、ビーパーを取り外せば、優秀な追跡デバイスになる
      高価な機器が入った貨物を追跡する文脈でこういう話が出ていたと記憶している。輸送には何カ月もかかることがあり、AirTagは電力効率が良く大きなバッテリーで長持ちし、既存のGPSソリューションでは十分ではなかった
    • なぜドナータグが必要なのか? このプロジェクトの README にタグを生成する方法がある
    • タグをずっと交互に使わなければならないなら、その時点で普通に自分で後をつけたほうが手間も金もかからないのでは?
      あるいはAirTag「ネットワーク」をそもそも使わないGPSタグを使えばよく、ローテーションさせる必要もない
  • いまだに Flipper を週に何度か使っている。Wi-Fiと別の周波数に対応する次のバージョンが楽しみだ

    • 何に使っているの?
    • WiFi dev board では足りないのか?
  • 「Find My」アプリが同じタグを2カ所以上で見た場合、どう反応するのか試した人はいる?

    • Appleのサーバーは位置について何も知らないので、位置を平均するかどうかは実装、この場合は FindMyアプリ 次第だ
    • 何か見落としていなければ、単に最新の位置を使うのでは?
  • これを使っているが素晴らしい。電力も実質ほとんど食わない
    Googleの Find My Device ネットワークとも通信できればいいが、すでにAppleのネットワークではとてもよく動作している

  • これをESP32-C3のような安価な BLEデバイス に移植できるといい。FlipperをAirTagとして使うには少し高い

  • 残念ながら、なりすますためのドナータグが必要で、そのタグはこれを使っている間は使えない。もしくはOpenHaystackを使う必要があるが、データを取得するにはMacが必要だ

    • そうではない。Linuxマシンで AirTagなし に使っていて、うまく動作している
  • README.md には、これが何を指しているのか分かるようにリンクが一つあるとよい: https://flipperzero.one/

  • これを使うにはどんな Androidアプリ が必要? できればGoogle Servicesが不要なアプリがいい

    • このプロジェクトはスマートフォンではなく Flipper Zero 用だ
    • Flipperが必要なのは分かっているし、1台持っている
      でも実際にこれを「見つける」には、どのAndroidアプリを使えるのか? iPhoneやSamsungデバイスは持っていない
    • ない。Python、git、Dockerがあるコンピューターだけでよい