Riscue的安全专家Kevin Valk研究了他的连接设备——云控制温控器的安全性,并发现了一系列令人担忧的问题。这篇文章展示了如何破坏现代物联网设备,以及如何提高安全性。最后,Kevin向连接设备的开发人员提出建议以改善他们抵御潜在的网络攻击的能力,这些网络攻击可能导致拒绝服务,知识产权被(去掉)窃取和客户(用户)数据泄露。
我的名字是Kevin Valk,是一名Riscure的(移动)安全分析师,(e.g. 支付,HCE,MOPS等)。不久前,我购买了一个名为“Anna from Plugwis ”的IoT温控器使我能够更好的调节屋内的温度。当设置Anna的时候,你需要访问web接口来配置设备。我记得在指定的设置页面上,我收到了包含完整的Lua堆栈回溯的状态码为500的页面。你可以想象,当我意识到这个设备可能是我的安全防线中潜在的安全漏洞时,这使我毛骨悚然。
为了让我放心,我进行了一次小小的安全测试来验证我家里的Anna是足够安全的...然而我发现我错的是多么离谱...
对于任何具有基本电子知识的有安全意识的人来说,PCB就像一个宝库;所有都清楚的标记,并有一些调试头部来启动。你可以清晰的看到主微控制器,RAM和Flash。而且,跟踪5-pin引脚标头表明这是一个UART调试接口。当然,这被在产品中被禁用了?! '''
AP121 (AR9331) U-Boot R03 for AME (redacted)
DRAM: 64 MB DDR2 16-bit FLASH: Winbond W25Q128 (16 MB) CLOCKS: 400/400/200/33 MHz (CPU/RAM/AHB/SPI)
LED on during eth initialization...
Hit any key to stop autobooting: 0
Booting image at: 0x9F050000
Image name: MIPS OpenWrt Linux-3.7.9 Created: 2018-03-07 12:24:17 UTC Image type: MIPS Linux Kernel Image (lzma compressed) Data size: 1000748 Bytes = 977.3 kB Load address: 0x80060000 Entry point: 0x80060000
Uncompressing kernel image... OK! Starting kernel... '''
唉,将UART电缆连接到UART并按下一个键即可停止自动启动(autobooting) 进程后,我们获得了对Anna的运行时控制。U-Boot 暴露的CLI接口可以以多种方式使用,包括读取flash闪存。这引起了我的兴趣,我想进一步的了解,为此,我需要dump出整个文件系统。
可以使用现成的工具直接读取闪存IC(winbond 25Q128FV)从而获得文件系统。然而,我们已经可以访问U-Boot shell,为什么不是用它?
''' for x in range(0, 2): base_address = 0x9F000000 size = 1024 1024 16 blocksize = 1024 * 4 print('Starting dumping') with open('dump {0:d}_{1:08X}.bin'.format(x, base_address), 'wb') as f: for j in range (0, size // block_size): com.write('md.b {offset:x} {block_size:x}\n'.format( offset=base_address + j * block_size, block_size=block_size).encode('ascii') ) com.readline()
''' 一小段Python脚本和两个转储之后,我们成功获得了完整flash IC的正确转储。从最初的U-Boot shell开始,我们已经知道在这个设备上使用了自定义版本的OpenWrt 。这意味着我们会有一个只读root文件系统的SquashFS 分区和所有用户数据的JFFS2 分区。
根文件系统事实上是一个自定义的OpenWrt ,其显著不同的是,这是一个巨大的Lua程序。Lua )是一种脚本语言,通常会在文本编译器中打开文件便可直接看到源代码。然而,出于性能原因,Lua脚本可以编译成字节码,这样可以直接被Lua 虚拟机执行。就像大多数字节码编译语言,同样也存在着名为LuaDec 的Lua反编译器,我希望能够轻松获得原始代码...我再一次错的离谱...
当打开文件系统上的一些Lua文件时,我看到了以下数据: 它看起来当然不像文本,但它也不像正常的字节码。进一步的研究表明这是一种Plugwise自定义的加密方案,其所有产品用它来保护知识产权(IP)。 一些逆向一段时间后,我们发现一个简单的Python脚本能够解密被加密的字节码和源代码。加密密钥被放在了Lua解释器中,因此可以通过静态分析轻松获得。 ''' import sys, sys, binascii, struct, lzma, tempfile from Crypto.Cipher import AES
KEY = binascii.unhexlify('00000000000000000000000000000000') # REDACTED HEADER_1 = b'\x1clUZ' HEADER_2 = b'\x1bLuz'
with open(sys.argv[1], 'rb') as f: header = f.read(4)
''' 解密所有的文件后,我们最终得到了原始源代码(包括注释和TODO's)和字节码。可以进行进一步的分析通过特别构造的HTTP请求找到其他的可能危害系统的方式。这是非常有趣的攻击向量,因为web界面运行在root用户权限。
在研究文件系统和web界面期间,一个名为SSH中继的功能不断出现。通常,SSH中继通过设置反向隧道 来绕过防火墙。Anna温控器安装在了位置网络中,SSH中继可以用于从外部访问设备。
通过进一步的研究,这正是Plugwis访问现场部署Anna后的做法。实现此功能可能有许多正当理由,但是如果没有安全的完成,它必然将在消费者家庭网络中造成巨大的安全漏洞。为此,我决定研究反向隧道是如何创建的。
Pulgwise有一个复杂的动态HTTP API来让设备与后端连接。终端中的一个用来获取在后端登录的私钥,并设置反向隧道。如果远程服务器上的SSH用户没有被合理的保护,攻击者可以使用此私钥来获得后端的非特权shell。
尽管使用SSH反向隧道的架构不是最好的,但如果设置正确也没错。为了验证攻击者是否无法轻易破坏服务器,我执行了与Anna相同API的请求来获得一个私钥。使用私钥我可以尝试设置交互式SSH shell,期望尝试是失败的,因为(这样攻击)只需要隧道。
''' Last login: Sat Jun 16 18:29:42 2018
https://aws.amazon.com/amazon-linux-ami/2014.03-release-notes/ 59 package(s) needed for security, out of 336 available Run "sudo yum update" to apply all updates. Amazon Linux version 2018.03 is available. [sshrelay_fc81b@ip-10-36-41-6 ~]$ ''' 到我收到这条消息时,你可以理解我的恐惧。我立刻终止了SSH会话,并思考发生了什么。我们不仅获得了低权限的shell,而且系统运行着2014年的镜像。这意味着有许多权限提升漏洞可用于在此系统上来获取root权限。没人知道其他的服务器是如何连接的,以及中继服务器上的用户系统可以怎样通过Plugwise后端网络横向移动。在联系Plugwise之前,我只想确认一个最终问题。如果攻击者知道Plugwise中继服务器的IP,攻击者是否可以执行端口扫描并直接连接到部署到家庭网络中的设备?
在中继服务器上执行了简单的端口扫描,我看到了以下开放的端口列表
''' Discovered open port 22/tcp on 18.202.0.0 Discovered open port 42371/tcp on 18.202.0.0 Discovered open port 42104/tcp on 18.202.0.0 ... Discovered open port 43690/tcp on 18.202.0.0 Discovered open port 43370/tcp on 18.202.0.0 '''
总计有205个反向SSH隧道直连在一些家庭网络中的Plugwise设备。幸运的是,设备中的SSH服务器只允许root用户使用SSH key登录。然而,事实是,这些设备穿过家庭网络防火墙并监听公开可访问的服务器是远非理想的。
在2018-06-16 Riscure开始了它的协作披露程序并发送具有未发现问题的细节的最初邮件。Riscure和Plugwise在此后到写这篇博文前多次交流来解决最紧迫的问题。通过大量的环节措施,我们可以声明他们更新了所有的后端服务器并完全锁定了SSH中继用户。
这个产品很有意思,因为它没有重要的安全对策,除了感觉不成比例的Lua应用程序。然而,定制的安全Lua解释器很容易被攻破因为它的安全性是含糊的。
在分析此设备时,我们发现了常见错误,Riscure希望分享一些常见的提升嵌入式和IoT设备安全性的方法。下面的列表还远未完成,但提供了强化IoT安全的基本指导。
原文地址:https://www.riscure.com/blog/on-the-security-or-lack-thereof-of-the-connected-iot-thermostat/
翻译:看雪翻译小组 sudozhange 校对:看雪翻译小组 wanring
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!