众所周知,IOT设备的安全性并不高。随着越来越多的设备联网,WiFi网络被黑、被劫持的可能性不断增加。本文介绍研究人员对Wemo品牌的Mr. Coffee智能咖啡机的安全分析的结果。
所有的Wemo设备都有两种方式与Wemo App进行通信,通过Internet远程连接和本地直接连接。只有当远程访问设置启用后,远程连接才可以进行。为了能够远程地控制Wemo设备,Wemo会周期性地检查Belkin服务器进行查询是否有更新。这种方式下,Wemo并不会打开网络上的任何端口。但如果用户需要本地控制Wemo设备或远程访问设备被禁用后,Wemo app就可以直接连接到Wemo。本文的研究是基于本地设备通信的,假设远程访问设置被禁用。
为了弄清楚咖啡机如何与手机应用进行通信,研究人员首先使用SSL Capture APP来获取本地网络数据。SSL Capture允许用户获取手机应用上的流量。因此,研究人员选择了Wemo APP。抓包进行后,研究人员分析了Wemo app并初始化了许多标准命令来生成网络流量。这样,研究人员就可以查看咖啡机和Wemo应用之间的通信了。该app的一个特征是用户可以设置让咖啡机定时煮咖啡。研究人员进行了一些定时设备并保存了。
然后,研究人员开始分析手机应用和咖啡机之间的网络流量。研究人员发现手机APP和咖啡机之间的传输都是明文进行的,也就是说没有使用加密。而且咖啡机和APP是通过UPNP(Universal Plug and Play)协议进行通信的,并预设了SOAP ACTIONS的动作。深入分析网络流量,研究人员发现了SOAP的action “SetRules”。其中包括研究人员在手机APP上进行定时煮沸(brew schedule)的XML内容。 Mr. Coffee定时煮咖啡
下面介绍Wemo手机APP如何处理定时煮任务。研究人员想确认咖啡机对这些定时任务做不做验证,因此研究人员进行手机APP关闭了这些定时任务。然后将抓包获得的数据和header用Linux Curl命令发回给咖啡机。然后研究人员得到return header 200,这在HTTP中表示OK。这表明咖啡机并不对定时任务的来源做任何验证,然后研究人员在app上进行了确认,就出现了新创建的定时煮任务。
Wemo app中出现新建的定时煮任务
这样,研究人员不用Wemo app也可以修改咖啡机的定时煮任务了。为了理解定时任务是如何保存在Wemo咖啡机中的,研究人员决定进行暴力拆解,查看里面的电路。拆解后,研究人员看到一个连接到PCB的Wemo模块,负责控制咖啡机的基本功能。然后研究人员从咖啡机中提取出了位于Wemo Insight设备中的Wemo模块。研究人员在网上找到了如何利用Wemo Insight漏洞的文章,根据文章的说明进行了序号识别、固件提取、root密码修改等。然后获取了Wemo设备的串口的root访问权限,然后分析Wemo app如何从底层Linux操作系统进行初始化。研究人员发现了一些常见的Linux文件和目录,其中就有crontab文件。该文件在Linux系统中是用来执行定时任务的。
开发人员应该是选择了最简单和直接的方式,即使用Linux crontab文件来设置定时任务而不是自己开发功能函数。Crontab的记录与研究人员通过Wemo app发送的一模一样。有趣的是研究人员在重放的UPNP包中增加了一些命令,发现可以在网络上以root权限来执行命令。
复制出来固件后,下一步研究人员分析了crontab中调用的rtng_run_rule可执行文件。rtng_run_rule是一个Lua脚本,因为Lua是脚本语言,因此是用明文写的,而且没有编译。研究人员根据执行流分析发现了传递参数给要执行的模板的规则。研究人员意识到将命令直接注入规则不行,只有修改执行的模板才可以。
然后研究人员继续分析Wemo app抓包的流量。分析发现该应用也会发送模板给Wemo咖啡机。也就是说如果研究人员可以修改模板,而且使Wemo认为该模板是有效的,就可以执行任意代码了。
一共发送了3个模板,分别是do、do_if、do_unless。每个模板都是Lua脚本,而且是base64编码的。模板顶部剩余的部分就是MD5哈希值。
研究人员创建了一个base-64解码的lua脚本的MD5哈希和base 64编码的脚本的MD5哈希值,来查看发送的md5值是否匹配,但是没有与模板中发送的md5值匹配的。研究人员猜测开发者使用了HMAC或其他聪明的方式来计算模板的哈希值,这样就很难上传恶意模板。最终研究人员发现开发者知识在base64代码前面加入了字符串begin-base64 644 <template name>,后面加入了====。
这样研究人员就有了上传任意模板的能力,并可以绕过定时规则的所有Wemo确认步骤。
研究人员加入了一个新的模板hack,并在模板中加入了下载和执行shell脚本的代码。
在shell命令中,研究人员让Mr. Coffee咖啡机下载一个Netcat的交叉编译版本,这样就可以获得一个逆向shell,并在rc.loacl中加一条记录。通过Netcat逆向shell,研究人员在咖啡机重启后同样获得设备的访问权限。
漏洞利用的最后一步是用执行恶意shell脚本的hack模板来创建一个定时煮咖啡的任务。研究人员将时间设定为发送后5分钟,但是要将时间值转换为Unix时间戳epoch时间格式。
时间格式转换
然后等待连接到电脑的咖啡机下载shell脚本并运行。
该漏洞并不需要咖啡机所在的网络访问权限。基于用户密码的复杂度,WiFi破解也是很容易的。该漏洞表明并不是所有的漏洞利用都很复杂或需要花费很长时间去寻找漏洞。该漏洞存在的原因只是缺乏输入处理和验证,以及编码决策存在问题。虽然目标中不含隐私信息,而且攻击仅限于本地网络,但这并不意味着黑客不会攻击类似的IOT设备,毕竟这种IOT设备的安全防护级别比较低。这种IOT设备也可能会被当做攻击其他高价值目标的跳板,因此,在购买此类IOT设备时,请三思。本文讲的咖啡机就是个例子。
还没有评论,来说两句吧...