物理黑客:点燃你的直发器
2019-08-02 10:08:00 Author: xz.aliyun.com(查看原文) 阅读量:141 收藏

前言

这些年我们一直在尝试通过黑客技术“点燃”一些智能设备。我们很多时候只是获得了一个碳黑的壶子,仅此而已。

后来我们发现了一些智能的直发器。其中,一款名为Glamoriser牌的直发器在圣诞期间的电视节目上非常推崇;由于这款直发器可以通过蓝牙连接到手机APP,于是我对它产生了一些兴趣。

在设备开机状态,你可以设置温度和烫发时间。

这款直发器的最高温度可超过纸张燃点(233C/451F)。考虑到我们狂热的想法,它是一个最佳的目标。英国一家消防部门组织的一项在线调查显示,直发器在全英引起多达65万起房屋的火灾。 这意味超过三分之一的使用者烫伤了自己!

我们可以黑掉它们来引发火灾?答案是肯定的!

移动App

这是这款很简单的App,有温度控制和定时功能。

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

APK文件没有做太多混淆,可以反编译出大部分应用代码。这点方便我们稍后寻找某些特定代码。

这个应用直接与Alexa(女性语音助手)和AWS服务连接。下图中 “Assets”文件夹中存储了一个通用API密钥:

api_key.txt文件其实是一个JWT(Java Web Token)。

此应用还启用了备份:

蓝牙

用BT4 dongle和BLEAH连接,我们可以更详细地看到设备情况:

该设备通用名称为“Bluetooth Styler”,其中“Peripheral Privacy Flag”(周边隐私标志)串口被默认关闭,我们可以设置为“WRITE”然后转接到0015句柄...

OK,让我们来看一看代码。

观察这个应用是如何调用BLE(蓝牙低功耗)控制器,我们可以看到所有实际都被记录到LOG中:

全局搜索代码文件,我们可以找到通信状态下的BLE UUID:

BES_DATA_CHARACTERISTIC_TX_UUID是之前写入的特性(characteristic)。

从下面代码可以看到应用处理BLE指令的方法:

命令是由不同部分的代码组合而成的:

CheckSum类中计算值方法如下:

现在我们搞清楚了如何发送BLE蓝牙指令,让我们尝试实践。查看手机SD卡,发现应用创建大量文件和文件夹:

其中,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,

从该日志文件中我们可以看到设备发送确认传输命令,确认已接收到命令并执行操作。更改手机应用上的某些值,然后再查看日志文件,我们可以看出发送的数据:

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 脚本:

通过这段Java 代码,我们可以计算出Checksum,并且打印出我们需要发送的代码。

还有重要的一点是,设备和手机间没有任何BLE验证。只要应用处于开启状态,数据可以直接发送给设备。

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

现在只要应用被打开,我们就可以发送命令给直发器,然后控制温度。

经测试,设备温度不能超过235C,但这并不重要。如果攻击者发送温度超过235C或小于50C的指令,设备将不会工作。猜测因为该区间为设备的温度界点。此外,设备运转时间不得超过20分钟。


文章链接:https://www.pentestpartners.com/security-blog/burning-down-the-house-with-iot/


文章来源: http://xz.aliyun.com/t/5843
如有侵权请联系:admin#unsafe.sh