BtleJuice 是一个用于对蓝牙智能设备(又称低功耗蓝牙)执行中间人攻击的完整框架。它由以下部分组成:
安装 BtleJuice 简直是小菜一碟。首先,请确保你的系统使用较新版本的 Node.js(>=4.3.2)和 npm。然后,请确保安装所有必需的依赖项:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
sudo yum install bluez bluez-libs bluez-libs-devel npm
最后,使用 npm 安装 BtleJuice:
sudo npm install -g btlejuice
如果一切顺利,BtleJuice 就可以使用了!
BtleJuice 由两个主要组件组成:一个拦截代理和一个核心。这两个组件需要运行在独立的机器上,以便同时操作两个蓝牙 4.0+ 适配器。BtleJuice 代理无法在 Docker 容器中运行。
使用虚拟机可能有助于让该框架在单台计算机上工作。
在你的虚拟机中,安装 btlejuice,并确保你的 USB BT4 适配器在虚拟机中可用:
$ sudo hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 10:02:B5:18:07:AD ACL MTU: 1021:5 SCO MTU: 96:6
DOWN
RX bytes:1433 acl:0 sco:0 events:171 errors:0
TX bytes:30206 acl:0 sco:0 commands:170 errors:0
$ sudo hciconfig hci0 up
然后,确保你的虚拟机有一个宿主机可以访问的 IP 地址。
在你的虚拟机中启动代理:
$ sudo btlejuice-proxy
在宿主机上,别忘了停止蓝牙服务,并确保 HCI 设备保持打开/初始化状态:
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
最后,在宿主机上运行以下命令:
$ sudo btlejuice -u <Proxy IP address> -w
-w 参数告诉 BtleJuice 启动 Web 界面,而 -u 选项用于指定代理的 IP 地址。
Web 用户界面现在可通过 http://localhost:8080 访问。请注意,Web 服务器端口可以通过命令行更改。
BtleJuice 的 Web 界面在右上角提供了一组用于控制拦截核心的链接,如下所示。

首先,点击 Select target(选择目标)按钮,将弹出一个对话框,显示拦截核心检测到的所有可用低功耗蓝牙设备:

双击所需目标,然后等待界面就绪(蓝牙按钮的外观会发生变化)。虚拟设备就绪后,使用配套的移动应用程序或其他设备(取决于具体预期)连接到该虚拟设备。如果连接成功,主界面上将显示 Connected(已连接)事件。

所有被拦截的 GATT 操作都会随对应的服务(Service)和特征值(Characteristic)UUID 一起显示,当然也包括与之关联的数据。数据默认以 HexII 格式(Ange Albertini 设计格式的一种变体)显示,不过你也可以通过点击数据本身在 HexII 与 Hex 之间切换。BtleJuice 同时支持 Hex 和 HexII 格式。
你可以右键点击任意 GATT 操作,然后选择 Replay(重放)选项来重放该操作,如下所示:


点击 Write(写入)(或 Read(读取))按钮即可重放相应的 GATT 操作。该操作将被记录在主界面中。
最后但同样重要的是,界面可以局部或全局地拦截任意 GATT 操作,并允许实时修改数据。你可以通过点击右上角的 Intercept(拦截)按钮进行全局拦截,也可以使用右键菜单在某个服务和特征值上启用或禁用钩子。每当有 GATT 操作被拦截时,都会弹出以下对话框:

自 1.0.6 版本起,界面提供了数据导出功能,支持可读格式和 JSON 格式的导出。这些导出基于被拦截的 GATT 操作生成,同时也包含目标设备的信息。点击 Export(导出)按钮时,将显示以下对话框:

点击对话框底部的 Export(导出)按钮,即可下载被拦截数据的 JSON(或文本)版本。
设置对话框目前只提供一个选项,即当目标设备断开连接时自动重新连接代理。这在处理短时间内活跃的设备时可能很有用。

当代理处于活动状态时,点击右上角的 Select Target(选择目标)按钮将停止代理,并允许重新选择目标。
BtleJuice 的 Node.js 绑定也可以通过 npm 安装:
$ sudo npm install -g btlejuice-bindings
有关如何使用 Node.js 绑定的更多信息,请参阅包文档。
特别感谢 Slawomir Jasek,他在 DEF CON 24 上指出了许多 noble/bleno 的技巧,以避免与移动应用程序相关的各种问题,并与我们分享了 BLE 中间人攻击策略 =)。他也是 Gattacker 的作者。
版权所有 (c) 2016 Econocom Digital Security
特此免费授予任何获得本软件及相关文档文件(“本软件”)副本的人,允许其不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许向其提供本软件的人这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中。
本软件按“原样”提供,不作任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他方式,也不论其是否由本软件或本软件的使用或其他交易引起或与之相关。