海思0 day漏洞分析 - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com

海思0 day漏洞分析

ang010ela 漏洞 2020-02-11 11:20:00
收藏

导语:研究人员在基于海思SOC的DVR、NVR和IP摄像机等设备固件中发现一个0 day漏洞。

研究人员在基于海思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#summary。研究人员预计受影响的联网设备可能在数十万到上百万之间。

检查设备是否受影响的最简单方式是利用下面的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。


本文翻译自:https://habr.com/en/post/486856/如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论