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 <代理 IP 地址> -w
-w 标志告诉 BtleJuice 启动 Web 界面,而 -u 选项指定代理的 IP 地址。
Web 用户界面现在可以在 http://localhost:8080 访问。请注意,Web 服务器端口可以通过命令行更改。
BtleJuice 的 Web 界面在右上角提供了一组链接,用于控制拦截核心,如下所示。

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

双击所需目标,等待界面准备就绪(蓝牙按钮的外观将改变)。一旦虚拟设备准备就绪,使用相关的移动应用程序或其他设备(取决于预期用途)连接到虚拟设备。如果连接成功,主界面上将显示一个 已连接 事件。

所有拦截到的 GATT 操作随后会连同对应的服务和特性 UUID 一起显示,当然还包括与之相关的数据。数据默认以 HexII 格式(由 Ange Albertini 设计的格式的变体)显示,但你可以通过点击数据本身从 HexII 切换到 Hex(或切换回来)。BtleJuice 支持 Hex 和 HexII 两种格式。
可以通过右键单击任何 GATT 操作,然后选择 重放 选项来重放该操作,如下所示:


点击 写入(或 读取)按钮来重放相应的 GATT 操作。此操作将在主界面中记录。
最后但同样重要的是,该界面可以本地或全局拦截任何 GATT 操作,并允许即时数据修改。你可以通过点击右上角的 拦截 按钮使用全局拦截,或者使用上下文菜单来启用或禁用对给定服务和特性的挂钩。每当一个 GATT 操作被拦截时,将显示以下对话框:

从 1.0.6 版本开始,界面提供了一个数据导出功能,支持可读格式和 JSON 格式的导出。这些导出基于拦截到的 GATT 操作生成,但也包含目标设备的信息。当点击 导出 按钮时,将显示以下对话框:

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

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