OpenDrop是一个命令行工具,它允许你在设备之间通过Wi-Fi直接共享文件。它的独特之处在于,它与Apple的AirDrop兼容,AIrDrop功能允许用户与运行iOS和macOS的Apple设备共享文件。目前(在可预见的将来也可能是这样),OpenDrop只支持发送给所有人都可发现的Apple设备,因为默认的“仅限联系人”模式需要Apple签发的证书。
OpenDrop是一个实验性软件,是Open Wireless Link项目逆向工程的成果。因此,它不支持AirDrop的所有特性,或者可能会与未来的AirDrop版本不兼容。OpenDrop不隶属于Apple公司,也不为Apple公司所赞同。使用此代码的风险自行负责。
为了与Apple的AirDrop兼容,OpenDrop需要目标平台支持一个特定的Wi-Fi链路层。此外,它还需要Python >=3.6以及几个库。
Apple无线直连。由于AirDrop完全运行在Apple无线直连 (AWDL)上,所以,OpenDrop只支持macOS或运行一个开放的AWDL重新实现(如OWL)的Linux系统。
库。OpenDrop依赖于OpenSSL和libarchive的当前版本。macOS附带了这两个的相当旧的版本,所以你需要安装更新的版本,例如,通过Homebrew。在任何情况下,你都需要相应地设置两个环境变量LIBARCHIVE和LIBCRYPTO。例如,使用brew安装这两个库:
然后设置环境变量:
Linux 发布版应该会附带最新的版本,所以这一步并不是必要的。
Python 包发布的安装直接使用pip3:
你也可以安装当前的开发版本,首先克隆这个repository(仓库),然后通过pip3来安装它:
我们简要说明了如何使用opendrop发送和接收文件。要查看所有的命令行选项,请运行opendrop -h。
发送文件通常需要两个步骤。首先使用find命令发现邻近的设备。一旦找到接收者,就停止此进程。
然后你就可以使用以下命令来send一个文件:
你还可以使用ID或name来代替index。OpenDrop将尝试按照(1)index、(2)ID和(3)name的顺序解释输入,如果没有找到匹配者,则会失败。
接收要容易得多。你只需使用receive命令。OpenDrop将自动接受所有传入的文件,并将接收到的文件存放在当前目录。
OpenDrop是一个研究项目的结果,因此,它有几个限制(见下面的非详尽列表)。我自己没有能力处理这些问题,但如果有人想接手处理它们,我很乐意提供帮助。
通过蓝牙低功耗触发macOS/iOS接收器。Apple设备只有在通过蓝牙LE接收到一个自定义广告后才会启动其AWDL接口和AirDrop服务器(详情请参阅USENIX论文)。这意味着,Apple AirDrop接收者可能不会被发现,即使它们是可以被所有人发现的。
发送方/接收方身份验证和连接状态。目前,在Apple的AirDrop中没有对等身份验证,特别是,(1)OpenDrop没有验证TLS证书是否是由Apple的root签发的,(2)Apple ID校验记录是否正确(详细信息请参阅USENIX论文)。此外,OpenDrop会自动接受由于缺少连接状态而接收到的任何文件。
发送多个文件。Apple AirDrop支持同时发送多个文件,而OpenDrop并不支持(需要向归档文件添加更多的文件,并修改HTTP /Ask请求,等等)。
Milan Stute, Sashank Narain, Alex Mariotto, Alexander Heinrich, David Kreitschmann, Guevara Noubir, 和 Matthias Hollick。《为Eve和Mallory提供10亿个开放接口:在iOS 和macOS上通过Apple无线直连进行MitM(中间人攻击)、DDoS攻击和跟踪攻击》。第28届USENIX安全研讨会(USENIX安全' 19),2019年8月14日至16日,美国加利福尼亚州圣克拉拉。
链接:https://www.usenix.org/conference/usenixsecurity19/presentation/stute
Milan Stute (邮件:mstute@seemoo.tu-darmstadt.de, 网站: https://seemoo.de/mstute )
Alexander Heinrich
OpenDrop是在GNU通用公共许可证v3.0下授权的。我们使用了python-zeroconf包的一个修改版本(本质上是添加了基本的IPv6和AWDL支持),它是在GNU 宽通用公共许可证 v2.1下授权的。这两个许可证都可以在LICENSE文件中找到。
英文原文:https://github.com/seemoo-lab/opendrop
译者:一瞬