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

OpenDropは、Apple AirDropプロトコルをPythonで実装したコマンドラインツールで、Wi-Fi経由でのデバイス間ファイル共有(Appleデバイスを含む)を可能にします。

OpenDropとは?

OpenDropは、Apple AirDropプロトコルをPythonで実装したオープンソースのコマンドラインツールです。最大の特徴は、Apple AirDropとプロトコルレベルで互換性があることです。つまり、iOSやmacOSを搭載したAppleデバイスとWi-Fi経由で直接ファイルを共有できます。これは、プロプライエタリなAirDropプロトコルをリバースエンジニアリングすることで実現されており、開発者、セキュリティ研究者、そしてAppleのハードウェアに縛られずにAppleのファイル共有エコシステムを理解・操作したい人にとって貴重なツールです。

OpenDropの重要性

AirDropは、Appleエコシステムに組み込まれた便利なゼロコンフィギュレーションファイル共有機能です。しかし、クローズドソースであり、Appleのハードウェアとソフトウェアに密接に結びついています。OpenDropは、LinuxやmacOSで動作するポータブルでクロスプラットフォームな実装を提供することで、この障壁を打ち破ります。これは特に以下の用途に役立ちます:

  • セキュリティ研究: AirDropプロトコル、そのセキュリティ特性、潜在的な脆弱性を理解する。
  • クロスプラットフォームファイル共有: サードパーティのサービスやクラウドアップロードを必要とせずに、LinuxマシンからiPhoneやMacにファイルを共有する。
  • 自動化: AirDropのような機能をスクリプトや自動化ワークフローに統合する。

仕組み

OpenDropは、2つの主要な技術に依存しています:

  1. Apple Wireless Direct Link (AWDL): AirDropは、Appleデバイスがピアツーピア通信に使用するプロプライエタリなWi-Fiリンク層であるAWDL上でのみ動作します。OpenDropは、macOSではネイティブにサポートされ、LinuxではOWLなどのAWDLのオープンな再実装を介してサポートされます。

  2. Pythonとlibarchive: このツールはPython(>=3.6)で書かれており、ファイルアーカイブの処理にlibarchiveに依存しています。macOSでは、Homebrewを介して新しいバージョンのlibarchiveをインストールする必要がある場合があります:

brew install libarchive

OpenDropは自動的にDYLD_LIBRARY_PATHを設定してHomebrewバージョンを使用します。Linuxでは、システムのlibarchiveで通常十分です。

インストール

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

pip3 install opendrop

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

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

使用方法

ファイルの送信

ファイルの送信は2段階のプロセスです:まず近くのデバイスを検出し、次に送信します。

  1. 受信者を検出
$ 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. ファイルを送信
$ opendrop send -r 0 -f /path/to/some/file
Asking receiver to accept ...
Receiver accepted
Uploading file ...
Uploading has been successful

インデックスの代わりにデバイスIDや名前を使用することもできます。OpenDropは、インデックス、ID、名前の順で入力の一致を試みます。

Webリンクの送信

バージョン0.13以降、OpenDropはURLの送信をサポートしています。Appleデバイスで受信すると、リンクはブラウザで直接開きます:

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

ファイルの受信

受信はより簡単です。receiveコマンドを使用して、すべての着信ファイルを自動的に受け入れます。ファイルはカレントディレクトリに保存されます:

$ opendrop receive

現在の制限事項

OpenDropは研究プロジェクトであり、いくつかの既知の制限があります:

  • Bluetooth LEトリガー: Appleデバイスは、カスタムのBluetooth Low Energyアドバタイズを受信した後にのみ、AWDLインターフェースとAirDropサーバーを起動します。つまり、Appleデバイスが「全員」モードに設定されていても、検出されない可能性があります。
  • ピア認証なし: OpenDropは、TLS証明書がAppleのルートによって署名されているかどうかを検証せず、Apple IDレコードも検証しません。また、接続状態が欠如しているため、すべての着信ファイルを自動的に受け入れます。
  • 単一ファイル送信: Apple AirDropとは異なり、OpenDropは複数のファイルを同時に送信することはできません。

舞台裏:研究

OpenDropは、ダルムシュタット工科大学のSeemoo Labによって、Open Wireless Linkプロジェクトの一環として開発されました。チームは、リバースエンジニアリングの取り組みを詳述したいくつかの学術論文を発表しています:

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

これらの論文は、AirDropプロトコルのセキュリティとプライバシー特性について深い洞察を提供し、OpenDropを単なるツールではなく、さらなる研究の基盤としています。

結論

OpenDropは、AppleのAirDropプロトコルへのアクセスを民主化する注目すべきオープンソースプロジェクトです。制限はありますが、開発者、セキュリティ研究者、クラウドサービスに依存せずにクロスプラットフォームのファイル共有を必要とする人にとって優れたツールです。コマンドラインインターフェースにより、スクリプトや自動化ワークフローに簡単に統合でき、オープンソースであるため、現在の欠点に対処するための貢献を歓迎します。

ソース

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