导语:FireEye 红队(Red Team)的研究人员组件发现了Logitech Harmony Hub物联网设备的漏洞。利用这些漏洞可以通过SSH来获取设备root权限。
简介
FireEye 红队(Red Team)的研究人员组件发现了Logitech Harmony Hub物联网设备的漏洞。利用这些漏洞可以通过SSH来获取设备root权限。Harmony Hub是用来连接和控制家中不同种类设备的家庭控制系统。攻击者从本地网络中利用这些漏洞可以控制与Hub相连的设备,还可以以Hub为执行空间(execution space)去攻击本地网络上的其他设备。因为Harmony Hub设备列表包括支持智能门锁,智能温度计和其他智能家居设备,所以Hub中的漏洞会将用户置于巨大的风险之中。
2018年1月,FireEye向Logitech通报了漏洞。Logitech更新了固件(4.15.96)来解决FireEye发现的这些漏洞。
Red Team发现的漏洞有:
· 不适当的证书验证;
· 不安全的更新过程;
· 开发者在生产固件镜像中留下的调试标志;
· 空root密码
Red Team将发现的这些漏洞组合在一起来获取Harmony Hub的管理访问权限。本文描述发现和分析的过程,并描述对设备严格安全测试的必要性。
设备分析
设备准备
公开资料显示Harmony Hub的测试点上存在通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)接口。研究人将通过跳线连接到测试的平板,就可以用插入USB串线的逻辑门电路(TTL)来连接Harmony Hub。通过boot日志可以发现Harmony Hub是以U-Boot 1.1.4启动的,允许的是Linux内核。
图1 从UART接口导出的boot日志
启动后,因为内核没有配置任何的console接口,所以console就不再返回输出数据了。研究人员在U-boot中重新配置了内核boot参数来监视整个boot过程,但是没有发现什么有用的信息。而且因为UART接口被配置为transmit,所以在该接口不会有其他的交互。因此,研究人员将关注的方向转移到理解Linux操作系统和允许在Harmony Hub上的相关软件。
固件恢复和提取
Harmony Hub的设计师用Android或iOS应用通过蓝牙进行初始化配置的。研究人员用hostapd创建了一个无线网络,并在测试的安卓设备上安装了Burp Suite Pro CA证书来拦截Harmony手机应用程序发送的流量和Harmony Hub接收的流量。一旦初始化配对完成,Harmony应用就会在本地网络搜索Harmony Hub,然后通过基于HTTP的API与Harmony Hub通信。
一旦连接成功,Harmony应用会发送两个不同的请求到Harmony Hub的API,这两个请求会让Harmony Hub去检查更新。
图2 迫使Harmony Hub检查更新的请求
图3 Harmony Hub检查固件更新
如果有更新,Logitech服务器就会发送含有新固件版本URL的响应。通过使用自签名的证书来拦截Harmony Hub发送的HTTPS流量可以证明Harmony Hub忽视了无效的SSL证书。
图4 服务器发送含有更新固件URL的响应
如果有更新,Logitech服务器就会发送含有新固件版本URL的响应。通过使用自签名的证书来拦截Harmony Hub发送的HTTPS流量可以证明Harmony Hub忽视了无效的SSL证书。
研究人员提取了固件并对文件进行了检查。研究人员发现,文件系统镜像是用lzma压缩的SquashFS文件系统,这也是嵌入式设备常见的一种格式。研究人员用unsqashfs_all.sh脚本来自动执行发现unsquashfs正确版本的过程来提取文件系统镜像。
图5 用firmware-mod-kit工具提取文件系统
在提取了文件系统的内容后,研究人员检查了harmony Hub操作系统的配置细节。检查发现了生产镜像中的不同的调试细节,比如没有删除kernel模块。
图6 文件系统中未删除的Linux内核对象
查看/etc/passwd发现root用户没有配置密码。因此,如果开启了dropbear SSH服务器,就可以通过SSH登录在没有root密码的情况下获取Harmony Hub的root访问权限。
图7 /etc/passwd表明没有配置root用户密码
研究人员还发现,如果文件系统中存在/etc/tdeenable文件,那么在初始化时会开启一个dropbear SSH服务器的实例。
图8 如果/etc/tdeenable文件存在,/etc/init.d/rcS脚本会开启dropbear SSH服务器
劫持更新过程
在初始化过程中,Harmony Hub会查询Logitech API上的GetJson2Uris终端来获取一个URL列表来为不同的进程使用,比如检查固件更新的URL和获取更新软件包信息的URL。
图9 获取URL终端列表的请求
研究人员拦截并修改了服务器响应中的JSON对象来把GetUpdates成员指向研究人员所有的IP地址。
图10 修改后的JSON对象成员
与固件更新过程相似,Harmony Hub会发送一个POST请求给含有内部软件包当前版本信息的GetUpdates指定的一个终端。图11是一个对HEOS包的请求示例。
图11 含有HEOS包当前版本的JSON请求对象
如果POST请求中的sysBuild参数与服务器的当前版本信息不匹配,服务器就会响应一个含有新包版本信息的最初响应。Harmony Hub会忽略这个最初的响应并发送第二个请求。第二个响应含有指向更新包的多个URL。
图12 含有软件更新URL的JSON响应
研究人员下载并检查了响应对象的pkg文件,该文件事实上是zip,含有一些简单的文件等级。
图13 .pkg文件等级
文件manifest.json含有如何用存档的内容来构建Harmony Hub更新的信息。
图14 mainfest.json文件的内容
如果mainfest文件存在与archive中,那么Harmony Hub的更新过程执行的脚本就是由安装器的mainfest文件的参数决定的。研究人员修改了脚本来创建/etc/tdeenable文件,这会让boot过程开启SSH接口。
图15 修改后的update.sh 文件
研究人员创建了含有.pkg扩展的新的恶意archive,这是位于本地web服务器上的。当下次Harmony Hub通过修改后的GetJson2URIs响应消息中提供的URL检查更新时,研究人员就发送一个指向该更新修改后的响应消息。Harmony Hub会提取恶意的更新包,在Harmony Hub重启后,SSH接口就开启了。这允许研究人员以空密码登录root用户访问设备。
图16 重启后SSH接口开启了
结论
因为Harmony Hub与许多的IoT设备一样,使用通用处理器架构,攻击者可以很容易地将恶意工具添加到被入侵的Harmony Hub中,这也就增加了目标攻击的整体影响。Logitech的工程师与FireEye研究人员一起协作很快地修复了漏洞,在4.15.96版本修复了这些漏洞。