手机App竟然能让头发拉直器起火?
2019-08-13 14:00:45 Author: www.freebuf.com(查看原文) 阅读量:76 收藏

hair-burn-haxor.png

多年来,我们一直专注于物联网(IoT)方面的安全研究,并试图找出它们的漏洞来hack这些联网设备。

在不久前,我们曾对号称全球首款无线电水壶的iKettle进行了安全测试,但并没有什么收获。

glamo-box.png

转而我们将目光瞄准了智能头发拉直器。在圣诞期间电视上大力推广的Glamoriser拉直器;由于其BLE与移动应用的连接特性,引起了我的兴趣。

你可以在关机前更改温度和空闲时间。

对于有狂热意图的我们来说,这似乎是一个更好的hack对象;我们可以尝试将它的最高温度调至纸张闪点(233C/451F)之上。

一项在线调查显示,英国一消防部门称,拉直器已在全英造成多达65万起的房屋火灾事故。显然,三分之一的拉直器用户都烧伤过自己!

bed-fire-768x512.png

移动应用

该应用设计的非常简单:温度控制和超时。你可以在谷歌应用商店里下载到它。

glamo-app.png

Googleplay Store:https://play.google.com/store/apps/details?id=com.fenda.diva

对APK的反编译工作非常顺利,99%的代码都完好无损。这对我们之后的代码查找工作会有所帮助。

该应用可直接与Alexa和AWS服务连接。“Assets”文件夹中存储了一个通用的API密钥:

glamo2.png

api_key.txt文件实际上是一个JWT(Java Web Token):

glamo3.png

Android应用已启用备份:

glamo4.png

蓝牙挖掘

通过BT4 dongle和运行的BLEAH,我们可以更详细地查看设备:

glamo5.png

该设备的通用名为“Bluetooth Styler”。它的“Peripheral Privacy Flag”已被禁用,我们可以“WRITE(写)”到0015 Handle(句柄)…

让我们来看一些代码。

看看应用程序是如何使用BLE协议进行工作的,可以看到几乎所有的内容都被记录到了LOG:

glamo6.png

10.png

通过代码库进一步搜索,我们找到了BLE通信的状态UUID字符串:

11.png

BES_DATA_CHARACTERISTIC_TX_UUID是之前的写入特征。

还有一些代码概述了BLE命令:

12.png

从这里我们可以看到,命令是由不同的部分构建的:

13.png

CheckSum(校验和)值的计算方式如下:

14.png

因此,现在我们知道了如何发送BLE命令,让我们确认下我们是对的。

通过查看手机的SD卡,我们可以看到创建了多个文件和文件夹:

15.png

创建的Log.txt文件准确列出了BLE通信的内容:

2019-02-12 12:43:44V<BleService>---onConnectionStateChanged connected = false
2019-02-12 12:43:44V<BleService>---isHumanDisconnect = false
2019-02-12 12:43:44V<BleService>---quickyDisconnectCount = 0
2019-02-12 12:43:44V<BleService>---totalReconnectCount = 1
2019-02-12 12:43:44V<BleService>---totalReconnectCount < 10  and equels  =   1
2019-02-12 12:43:44V<BleService>---totalReconnectCount < 5 and reconnect after 500
2019-02-12 12:43:44V<BleService>---handleMessage msg.what == RECONNECT  reconnectMAC= F0:13:C3:00:4B:8C
2019-02-12 12:43:44V<BleService>---onConnectionStateChanged connected = true
2019-02-12 12:43:45V<BleService>---onConnectionStateChanged handle discoverServices
2019-02-12 12:43:45V<BleService>---onServicesDiscovered() + status = 0
2019-02-12 12:43:45V<BleService>---onCharacteristicNotifyEnabled() + status = 0
2019-02-12 12:43:45V<BleService>---READY TO SEND DATA IS = 54,45,eb,50,c8,00,05,f8,
2019-02-12 12:43:45V<BleService>---READY TO SEND DATA IS WRITH TO HAL RET IS  = true
2019-02-12 12:43:45V<BleService>---onWritten() + status = 0
2019-02-12 12:43:45V<BleService>---onReceive BES_DATA_CHARACTERISTIC_RX_UUID
2019-02-12 12:43:45V<BleService>---onReceive 54,45,f8,

从该日志文件中我们还可以看到,从设备发送的ACK确认命令已被接收并执行。

通过更改移动应用程序上的某些值然后查看日志,我们可以看到发送的数据:

16.png

54,45,eb,50,50,00,05,70, 5 mins 80 °C
54,45,eb,50,5a,00,05,66  5 mins 90 °C
54,45,eb,50,64,00,05,5c, 5 mins 100 °C
54,45,eb,50,96,00,05,2a  5 mins 150 °C
54,45,eb,50,c8,00,05,f8  5 mins 200 °C

让我们看看是否可以发送一些数据并让拉直器做点什么(坏笑)。首先,我们需要计算checksum。

为此,我们编写了一个Java脚本:

17.png

此Java代码将为我们计算校验和,并打印出我们需要发送的值。

有一点需要注意!设备和手机之间的BLE通信并没有验证。只要设备处于开启状态(通过主电源插座),就可以将数据随时发送到设备。

bleah -b “f0:13:c3:00:4b:8c” -u “0783b03e-8535-b5a0-7140-a304f013c3ba” -d “0x5445EB50EB0014C6”

哇!我们做到了!

这意味着只要拉直器处于打开状态,我们就可以向其发送命令来更改它的温度!

我们测试一下,看看是否可以将设备温度上调至235C以上,遗憾的是这并不起作用,但这不重要。

如果你发出超过235C或低于50C的温度请求,它将不会在设备上注册,因此我怀疑设备的温度可能存在某种限制。

此外,拉直器在时间上也做了限制,即最长持续运行时间为20分钟。拉直器上有个物理开关,如果它没被按下,那么它将自动关闭。

你可以做的是在他们使用时覆盖这些设置。例如,如果有人在120°C下使用拉直器,并且睡眠时间为使用后5分钟,则你可以将其改为235°C和20分钟的睡眠时间。

让过程更加简单

对于有的人来说,逆向并非一件简单的事。其实在本例中,逆向非不是所必须的步骤。由于在连接手机时没有在BLE上建立配对或绑定,因此应用范围内的任何人都可以控制拉直器,但并不支持多个手机的并发连接。此外,如果用户超出了BLE的范围,那么你本地的黑客很有可能侵入并调高它们的温度。

总结

如果不安全使用,直发器可能会导致房屋火灾和皮肤灼伤。

我们已经证明了拉直器的温度可以随时被我们篡改,因此即使用户安全使用拉直器,它们也未必真的安全。

当然,这种攻击要求黑客必须处于蓝牙范围内,但是对于制造商来说,包含配对/绑定功能可以很容易地防止这种情况的发生。

只要按下按钮将拉直器置于配对模式就可以解决这个问题。

相反,现在我们有了一种让房屋起火的方法。

*参考来源:pentestpartners,FB小编secist编译,转载请注明来自FreeBuf.COM


文章来源: https://www.freebuf.com/articles/terminal/209604.html
如有侵权请联系:admin#unsafe.sh