-
-
[翻译]破解Nokelock API
-
发表于: 2019-7-14 20:31 7404
-
我过去一直在一些信息安全会议上讨论Nokelock锁。我现在需要区分这个名词,因为有一款产品叫做nokē,我所讨论的并不是它。我们所讨论的是一系列中国制造的锁,叫做Nokelock,来自叫做Nokelock的公司。
亚马逊上的大多数廉价蓝牙挂锁都是Nokelocks;它们根据一系列不同类型主体制作了一系列不同样式的锁,有时还有其他解锁设备,例如指纹传感器。还有被品牌商挂名重新包装的,如Micalock。
我花费了许多时间尝试逆向了那些锁的BLE协议,以及API调用的意义,并发现了一些有趣的漏洞。近六个月我们一直在尝试报告这些漏洞,通过多种途径,但没有得到回应。
在我们了解实际漏洞前,让我们先说说如果您拥有并使用Nokelock(或一个克隆版),我可以做什么:
有人还在使用Nokelock吗?
Right,到了进入黑暗的细节的时间...
所有的Nokelock锁遵循同样的BLE协议。该协议在一个经过混淆的Android应用中实现。
像大多数BLE设备一样,它也使用了一种通信特征:一个TX特征用来写入,通过通知消息传递RX数据。该特征具有UUID:000036f5-0000-1000-8000-00805f9b34fb ;并在我看过的每个锁上都是句柄0x03 。
通过TX或RX传递的每个数据包是16个八位字节,并遵循相同的基本模式:
上边的数据包是GET_BATTERY命令,该命令返回当前电池的状态。这样:
整个数据包使用AES和每个设备唯一的静态密钥进行加密,来防止各种数据嗅探。
有许多不同的数据包被用来和设备通信用来获取电池状态,改变设置和解锁设备。要解锁设备,只需要获取设备的token,随后使用token调用解锁功能。
获取token的命令是06010101,锁随即回复060207和四个八位字节的设备token。随后解锁命令(050106303030303030)可以被发送,看起来像这样:
客户端到锁:GET_TOKEN
锁到客户端:TOKEN_RESPONSE
客户端到锁:UNLOCK
它比我上面展示的要复杂的多,因为整个数据包都是用AES加密方式加密的。幸运的是(对于漏洞利用,如果你使用了其中一个,就少了很多),加密的Key可以使用两种方式从API获取。所有的API请求需要一个合法的API token,这可以通过简单通过利用一个废弃的电子邮件地址创建用户来获得。
每个锁附带二维码,这可以放在到/newNokeLock/lock/getDeviceInfo的post请求中:
请求的响应是转储的锁的所有数据,包括加密使用的key:
注意这不仅仅包含加密的key,还包含BLE广播名称,在本例中O-W*,这可以使用wigle.net搜索到。
如果你没有二维码,你可以搜索设备的MAC地址,因为MAC地址被用来与设备通过BLE通信,当设备有电时,就可以被嗅探(例如:按下了设备上的按钮)。这需要调用/newNokelock/lock/queryDevice端点:
和getDeviceInfo返回同样的信息:
注意二者都返回了称为lockPwd的项,设置为000000,如果你看了上面的UNLOCK数据包,你会注意到6个八位字节具有值0x30,ASCII“0”.这暗示可能存在为锁分配密码的途径,尽管APP代码没用使用它,仅仅发送6个0,并且我无法找到改变它的办法。
所以,如果你将这些联系到一起,你可以加密数据包并使用一个API调用和快速BLE会话解锁任何设备。我们的github page上有一个脚本可以扫描这些锁并解锁这些锁。这有些不受控,这不是锁,这只是我在脚本中的编程方式。
所以,让我们来看看有趣的一点:API。我们在API中发现许多漏洞,我们从2019年2月开始尝试将漏洞提交给厂商,通过多种渠道,包括email,电话和微信。我们甚至尝试通过发言人和他们沟通。
我们没收到任何回应。
所以...首先,我们使用一个终端监控所有流量,屏幕截图展示如下图:
就是这样,所有流量,包括用户的流量通过未加密的HTTP协议发送。记住,现在设置TLS证书是多么容易和便宜,这是不可接受的。
值得注意的是,Nokelock API客户端没有在其API中使用授权措施。这可能允许攻击者读取用户或锁的信息,包括email地址,密码 hash,所得GPS位置。
它也可能允许攻击者修改那些细节,允许攻击者获取锁的控制权来解锁它或阻止其拥有者使用锁。
执行这些操作需要一个token,但是token仅仅被执行了有效性检查。例如,它仅检查账户是否是被授权的账户,而不是是否进行了授权。可以简单地通过创建一个用户来获取权限。
为防止违反"计算机滥用行为法",仅针对售后拥有的账户执行了必要的操作。
有一个API调用会返回用户密码的hash。我们注意到这是未加盐的MD5哈希。
这从算法上来说是一种弱的hash类型,可以快速进行计算。由于hash是未加盐的,如果如上所述数据库被IDOR攻击破坏或提取,破解密码非常容易。
这是一个旧的即兴演奏,但“买家小心”;带有危险APP的便宜产品通常便宜是由于在设计和制造方面已经削减了一些东西。这也可能意味着尚未对产品进行适当的测试,并且可能存在安全漏洞。
尽管蓝牙锁是个非常好的想法,我不建议任何人使用Nokelock(或克隆版)并期望他们是安全的。
如果Nokelock尝试修复锁,我已经准备好足够的震惊了。但我找不到任何容易的方式来在APP中进行固件升级。
我们需要提一下White Hat Defenses的Kerry Enfinger博士 ,他已经针对Nokelock的一个克隆版完成了一个相似的逆向工程工作,称为Klic Lock。在我们研究Nokelock的同一时刻,他也获得了一个CVE编号(CVE-2019-11334).
他的代码在这里:
https://github.com/whitehatdefenses/KlicUnLock.
原文地址:https://www.pentestpartners.com/security-blog/pwning-the-nokelock-api/
翻译:看雪翻译小组 sudozhange
校对:看雪翻译小组 玉林小学生
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!
赞赏
- [原创]初探HG110-B家庭网关 22217
- [翻译]编写Shellcode:寻找EIP/RIP 10816
- [翻译]使用Fuzzing在闭源Windows软件中寻找漏洞 19403
- [翻译]“进程重镜像”行为检测 8446
- [翻译]黑帽2019:5G安全漏洞允许中间人针对性的攻击 8875