OpenDrop: Pythonで実装されたオープンソースのAirDrop

OpenDropは、Apple AirDropプロトコルを実装したPythonコマンドラインツールで、Wi-Fi経由でiOSおよびmacOSデバイスとのファイル共有を可能にします。

OpenDropとは?

OpenDropは、Apple AirDropプロトコルを実装したオープンソースのコマンドラインツールで、iOSおよびmacOSを搭載したAppleデバイスとWi-Fi経由で直接ファイルを共有できます。ダルムシュタット工科大学のSeemoo Labによって開発され、Appleの独自AirDropプロトコルの広範なリバースエンジニアリングの成果です。

OpenDropの重要性

AirDropはAppleユーザーにとって便利な機能ですが、Appleエコシステム内に閉じ込められています。OpenDropは、Appleデバイスとファイルを送受信できるクロスプラットフォーム実装を提供することで、この壁を打ち破ります。これは、クラウドサービスやサードパーティアプリに頼らずに、非AppleシステムとAppleシステム間でファイルを転送する必要がある開発者、研究者、そしてすべての人にとって特に価値があります。

主な機能

  • プロトコル互換性: OpenDropはApple AirDropとプロトコル互換性があり、Appleデバイスと直接通信できます。
  • コマンドラインインターフェース: シンプルでスクリプト化可能、自動化やワークフローへの統合に最適です。
  • ファイルとURLの共有: AppleデバイスにファイルとWebリンク(URL)の両方を送信できます。
  • レシーバー検出: 「全員」の検出可能性モードに設定された近くのAppleデバイスを検出できます。
  • 自動ファイル受け入れ: 受信時、OpenDropはすべての着信ファイルを自動的に受け入れ、現在のディレクトリに保存します。

仕組み

OpenDropは、Apple Wireless Direct Link(AWDL)上で動作します。これは、Appleデバイスがピアツーピア通信に使用する独自のWi-Fiリンク層です。つまり、現在はOWLなどのAWDLのオープン再実装を実行しているmacOSまたはLinuxシステムでのみ動作します。

インストール

OpenDropのインストールはpipで簡単に行えます:

pip3 install opendrop

最新の開発バージョンについては、リポジトリをクローンしてインストールします:

git clone https://github.com/seemoo-lab/opendrop.git
pip3 install ./opendrop

ファイルの送信

  1. レシーバーの検出: findコマンドを使用して、近くのAppleデバイスを一覧表示します。
$ opendrop find
Looking for receivers. Press Ctrl+C to stop ...
Found index 0 ID eccb2f2dcfe7 name John’s iPhone
Found index 1 ID e63138ac6ba8 name Jane’s MacBook Pro
  1. ファイルの送信: レシーバーのインデックス、ID、または名前を指定してsendコマンドを使用します。
$ opendrop send -r 0 -f /path/to/some/file
Asking receiver to accept ...
Receiver accepted
Uploading file ...
Uploading has been successful

URLの送信

v0.13以降、OpenDropはWebリンクを送信できます。受信側のAppleデバイスは、受け入れ後すぐにブラウザでURLを開きます。

$ opendrop send -r 0 -f https://owlink.org --url

ファイルの受信

受信はさらに簡単です。receiveコマンドを実行するだけで、OpenDropはすべての着信ファイルを自動的に受け入れ、現在のディレクトリに保存します。

$ opendrop receive

技術詳細

要件

  • Python: >= 3.6
  • AWDL: OWLを使用したmacOSまたはLinux
  • libarchive: 最新バージョンが必要です。macOSでは、Homebrewでインストールします:
brew install libarchive

OpenDropは自動的にDYLD_LIBRARY_PATHを設定してHomebrewバージョンを使用します。Linuxディストリビューションは通常、最新バージョンを同梱しています。

制限事項(および研究の機会)

OpenDropは実験的な研究ソフトウェアであるため、いくつかの制限があります:

  • Bluetooth LEトリガー: Appleデバイスは、カスタムBluetooth LEアドバタイズメントを受信した後にのみAWDLインターフェースを起動します。つまり、OpenDropは積極的にアドバタイズしていないレシーバーを検出できない場合があります。
  • ピア認証なし: OpenDropはAppleのルートによって署名されたTLS証明書を検証したり、Apple IDレコードを検証したりしません。すべてのファイルを自動的に受け入れます。
  • 単一ファイル送信: Apple AirDropとは異なり、OpenDropは複数のファイルを同時に送信することはできません。
  • 連絡先のみモード: OpenDropは「全員」の検出可能性に設定されたデバイスでのみ動作します。連絡先のみモードでは、macOSから抽出されたApple認証情報が必要です。

研究背景

OpenDropは、Appleの独自ワイヤレスプロトコルを理解し文書化することを目的としたOpen Wireless Linkプロジェクトの一部です。チームはいくつかの学術論文を発表しています:

  • PrivateDrop: AirDropのプライバシー保護認証スキーム(USENIX Security '21)
  • A Billion Open Interfaces: AWDLを介したiOSおよびmacOSへの攻撃の分析(USENIX Security '19)

結論

OpenDropは、非AppleプラットフォームからAppleエコシステムとやり取りする必要がある開発者や研究者にとって強力なツールです。研究用の性質上制限はありますが、AirDrop機能を理解し拡張するための強固な基盤を提供します。ファイル転送の自動化、セキュリティ研究の実施、またはLinuxからiPhoneにファイルを送信したいだけの場合でも、OpenDropは試す価値があります。

詳細については、GitHubリポジトリをご覧ください。

ソース

seemoo-lab/opendrop: An open Apple AirDrop implementation written in Python