研究人员在基于海思SoC的DVR、NVR和IP摄像机等设备固件中发现一个0 day漏洞(后门)。攻击者利用该漏洞可以获取root shell权限,并完全控制设备。
技术细节
有漏洞的DVR/NVR/IP摄像机设备运行在busybox提供的最小工具集的Linux上。BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。硬件是基于ARM的CPU,大小在数十到数百兆之间。
有漏洞的固件中运行着macGuarder或dvrHelper进程,会接收TCP 9530端口的连接。代码和日志字符串表明macGuarder之前是一个单独的进程,之后其功能合并到了dvrHelper进程中,并作为一个单独的线程。
之前版本的固件将dvrHelper编译进了busybox中,作为一个额外的applet。这可能违反了GNU GPL licence。
后门激活过程如下:
· 客户端打开到设备TCP 9530端口的连接,发送字符串OpenTelnet:OpenOnce和表明整个消息长度的字节。这一步在所有版本的后门中都是有的。这一步之后如果没有响应,那么telnetd可能已经打开了。
· 服务器(设备)会用字符串randNum:XXXXXXXX进行响应,其中XXXXXXXX是8位随机十进制数。
· 客户端使用其预共享的密钥,构建加密密钥。加密密钥是接收到的随机数和PSK的连接。
· 客户端用加密密钥解密随机数,并在字符串randNum:后发送。整个消息前面会加上表明整个消息长度的字节。
· 服务器会从文件/mnt/custom/TelnetOEMPasswd加载预共享的密钥,如果该文件不存在就使用默认密钥2wj9fsa2。
· 服务器对随机数进行加密,并验证结果与来自客户端的字符串是否相同。如果验证成功,服务器发送字符串verify:OK,如果验证失败,服务器发送verify:ERROR。
· 客户端加密字符串Telnet:OpenOnce,并加上完整的长度字节和CMD: string,并发回给服务器。
· 服务器提权和解密接收的命令。如果解密的结果与字符串Telnet:OpenOnce相同,就响应Open:OK,启用debug 端口9527,并开启telnet daemon。
除了使用对称加密外,整个认证过程使用了一些HMAC 挑战-响应认证。对称密文对长度大于8字节的密钥使用了3DES-EDE2,对短密钥使用了简单DES。
研究人员分析发现成功认证需要了解PSK和实现对称块密文。研究人员发现telnet daemon激活后,会接收以下login/password对之一:
Login Password root xmhdipc root klv123 root xc3511 root 123456 root jvbzd root hi3518
这些口令既可以从固件中恢复,也可以通过暴力破解/etc/passwd文件中的哈希值来得到。使用hashcat和GPU只需要几小时就可以获得。
Debug端口9527也接收相同的login/password对,同时提供一些shell访问和功能来控制设备。对Web UI账户来说,攻击者可能可以重置口令或获取/mnt/mtd/Config/Account*文件的口令哈希值。
受影响的设备
有数十个品牌和上百个型号的产品受到该漏洞的影响,具体参见https://github.com/tothi/pwn-hisilicon-dvr。研究人员预计受影响的联网设备可能在数十万到上百万之间。
检查设备是否受影响的最简单方式是利用下面的PoC代码进行检测。
PoC
PoC代码参见 https://github.com/Snawoot/hisilicon-dvr-telnet
会话示例:
$ telnet 198.51.100.23 Trying 198.51.100.23... telnet: Unable to connect to remote host: Connection refused $ ./hs-dvr-telnet 198.51.100.23 2wj9fsa2 Sent OpenTelnet:OpenOnce command. randNum:46930886 challenge=469308862wj9fsa2 verify:OK Open:OK $ telnet 198.51.100.23 Trying 198.51.100.23... Connected to 198.51.100.23. Escape character is '^]'. LocalHost login: root Password:
如果出现以下情况,那么设备就受到该漏洞的影响:
· Telnet端口在 hs-dvr-telnet运行后打开了。
· 设备响应hs-dvr-telnet的查询。即使由于错误的PSK,验证失败了,但可以从固件中提取出正确的PSK。
· hs-dvr-telnet 等待响应,但telnet端口打开了。
安全建议
从之前的经验来看,可能固件厂商并不会及时发布安全补丁。因此,研究人员建议限制这些设备对不可信用户的网络访问,关闭受该漏洞影响的端口,包括23、9530、9527。
还没有评论,来说两句吧...