智能咖啡机牵扯出的安全问题

发布时间:2019-03-16 07:07        

此文为翻译文章

原文链接:

原文作者:

Harsh Jaiswal‏ @rootxharsh(Twitter)

恭喜翻译作者s小胖不吃饭@先知社区

价值100元的天猫超市享淘卡一张

欢迎更多优质原创、翻译作者加入

欢迎多多投稿到先知社区

每天一篇优质技术好文

点滴积累促成质的飞跃

今天也要进步一点点呀

众所周知,物联网设备是不安全的。我们可以通过一些例子来对此进行解释。 随着越来越多的设备需要连接到互联网,黑客完全有可能通过WiFi入侵烤面包机进而攻击你的信用卡。

基于此,我开始用

Wemo(WeMo_WW_2.00.11058.PVT-OWRT-Smart)

来对

Mr. Coffee Coffee Maker

进行研究分析,因为我们之前为我们的研究实验室够买了一个咖啡机并且没有很多人使用它。 本文是建立在我的同事

Douglas McKee(@fulmetalpackets)

和他的

Wemo Insight

智能插件漏洞利用的工作的基础上。 然而在这个产品中我找不到类似的攻击切入点,所以我探索了一个独特的途径,并且找到另一个漏洞进行。 在这篇文章中,我将详细探讨我攻击的方法和过程。

所有

Wemo

设备都有两种与

Wemo App

通信的方式,并通过互联网远程或本地直接与

Wemo App

进行通信。默认情况下,远程连接仅在启用远程访问设置时出现。为了允许远程控制

Wemo

设备,

Wemo

会定期检查

Belkin

的服务器并及时进行更新。这样以来,

Wemo

就不需要打开网络上的任何端口。但是,如果我们尝试在本地控制

Wemo

设备,或者禁用远程访问设置,

Wemo

应用程序将直接连接到

Wemo

。本文的研究都是基于关闭远程访问设置并进行本地设备通信。

为了深入了解咖啡机如何与其移动应用程序通信,我首先使用名为“

SSL Capture

”的应用程序并在我的手机上设置本地网络捕获

.SSL Capture

允许用户捕获来自移动应用程序的流量。在这种情况下,我选择使用

Wemo

应用程序。随着对流量包的截获,我浏览了

Wemo

应用程序并启动了几个标准命令来生成网络流量。我能够查看咖啡机和

Wemo

应用程序之间的通信信息。该应用程序具有其独特的特征,即用户能够设定咖啡机在指定时间进行工作。我制定了几个时间表并保存了它们。

我开始分析手机应用程序和

Mr. Coffee

机器之间的网络流量。 两个设备之间的所有传输都以明文形式进行,这意味着过程中不使用加密。 我还注意到,咖啡机和移动应用程序通过名为

UPNP

的协议进行通信,该协议具有称为“

SOAP ACTION

S”的预设操作。从设备深入挖掘网络捕获,我看到了SOAP操作 “SetRules。”这也是移动应用程序设置的“brew计划”相关的XML内容。

此时,我能够看到

Wemo

移动应用程序的功能程序代码。 接下来,我想看看咖啡机是否对这些时间表进行了相关验证,因此我回到了移动应用程序并将它们全部禁用。 然后,我从网络捕获中复制了数据和标题,并使用

Linux Curl

命令将数据包发送回咖啡机。 我得到了返回标题状态“200”(HTTP中的“OK”)。 这表明酿造时间并没有被验证。我进一步验证了移动应用程序并制定了新的工作计划。

此时我可以在不使用

Wemo

移动应用程序的情况下更改咖啡机的工作时间表。为了理解如何将时间表存储在Wemo咖啡机上,我决定将其拆解并查看内部的电子设备。拆开后我看到有一个

Wemo

模块连接到了一个更大的PCB,并负责控制咖啡机的功能。然后我从咖啡机中提取了Wemo模块。这看起来与

Wemo Insight

设备中的Wemo模块几乎完全相同。我根据

Doug

的博客开发了

Wemo Insight

,以进行序列识别、固件提取和root密码更改操作。在通过Wemo设备上的串行端口获得

root

访问权限之后,我开始研究底层Linux操作系统并启动Wemo应用程序的方式。在查看了常见的Linux文件和目录时,我注意到“crontab”文件中有一些不常见的东西(在Linux中用于执行和调度命令)。

开发人员采用了简单的路线并使用

Linux crontab

文件来安排任务,而不是编写自己的brew调度功能。 crontab条目与我通过

Wemo

应用程序(coffee-3)发送的工作计划相同,并以root身份执行。如果我在重放的

UPN

P数据包中添加某种命令来执行此操作,我可能会通过网络以root身份执行我的命令。

在转储固件后,我决定查看在

crontab

中调用的“

rtng_run_rule

”可执行文件。

rtng_run_rule

是一个

Lua

脚本。由于

Lua

是一种脚本语言并使用纯文本编写的,而不是像其他

Wemo

可执行文件一样编译。我遵循执行流程,直到我发现了应用规则并将参数传递给模板以。之后,我发现将命令进行直接注入是没有用的,而应该考虑修改执行执行的模板。

我回到

Wemo

移动应用程序的网络捕获并开始再次挖掘相关信息。我发现该应用程序还将模板发送给

Wemo

咖啡机。如果我能弄清楚如何修改模板并且能对Wemo进行欺骗,那么我可以进行任意代码的执行。

发送了3个模板,

“do”、“do_if”和“do_unless”

。每个模板都是Lua脚本并用base64编码。基于此,我知道注入自己的代码是无用的。唯一剩下的挑战就是如何处理包含在模板顶部的MD5哈希。事实证明,这不是一个障碍。

我分别创建了

base-64

解码的

Lua

脚本和

base64

编码脚本的

MD5

哈希,并查看匹配正在发送的哈希。然而,两者都不匹配模板中发送的MD5。我开始认为开发人员使用某种HMAC或巧妙的方式来散列模板,这会使上传恶意模板变得更加困难。然而,我惊讶地发现它只是字符串“

begin-base64 644

”前面的base64代码,并附加了字符串“

====

”。

最后,我有能力上传我的任何模板,并让它绕过了预定规则所需的所有Wemo验证步骤。

我添加了一个名为“hack”的新模板,并在模板中添加了一个代码块来下载和执行shell脚本。

在shell命令中,我指示

Mr. Coffee Coffee Maker

Wemo

下载一个编译过的Netcat版本文件,这样我就可以得到一个反向shell,并且还添加了一个“

rc.local”

的条目。这样做是为了让咖啡机重新启动,重启后我会通过Netcat反向shell持久访问设备。

这个漏洞利用程序的最后一个功能是使用我之前学到的知识来使用我的新“hack”模板执行我的shell脚本来安排工作计划。 我采用了我之前的时间表并对其进行了修改,使得“hack”代码在发送后5分钟内执行。

现在,我坐下来等待咖啡机(在我指定的时间延迟)连接到我的电脑,下载我的shell脚本并运行它。我确认我进行一个反向shell操作,并且完全符合预期。

此漏洞需要网络访问咖啡机所在的同一网络。根据用户密码的复杂程度,使用当今的计算能力,WiFi破解可能是一项相对简单的任务。例如,我们演示了一个快速而又简单的暴力字典攻击,以便在

Wemo Insight

智能插件的演示中破解复杂的

WPA2

密码(10个字符的字母数字)。然而,这些使用特殊字符的复杂密码会成倍增加暴力攻击的难度。我们于2018年11月16日联系了

Belkin

并向他们披露了这个问题。虽然供应商没有回复此报告,但我们发现最新的固件更新修补了该问题。尽管没有沟通的过程,但我们很高兴看到我们的研究成果进一步巩固了家庭自动化设备。

此漏洞表明,如果用户知道要查找的内容,并非所有漏洞都是否复杂或需要花费大量精力才能完成。这个漏洞的存在完全是因为在缺乏输入和验证的情况下做出了一些糟糕的编码决策。即使此目标不包含敏感数据且仅限于本地网络,但这并不意味着恶意黑客不会针对此类IOT设备进行攻击。对于任何消费者来说,购买新的物联网小工具时,要问自己:“这真的需要连接到互联网吗?

Copyright © 2018 厦门温馨空间有限公司 冀ICP备18011429号