Как уберечь IP камеру от ботнета Mirai с Flussonic Agent
На самом деле несекьюрность IP камер это в целом секрет Полишинеля и причин тому много: это исторически сложившаяся практика работы с ними, сложность доступа к ним, инертность производителей.
Я хочу рассказать о некоторых аспектах этой проблемы и какие могут быть шаги, чтобы снизить остроту этой проблемы.
Текущее положение дел
Итак, сейчас в мире продаются миллионы IP камер. Первая же ссылка из интернета заявляет про 200 миллионов камер безопасности, и эта цифра выглядит вполне разумно.
Не все CCTV камеры — IP, до сих пор продается огромное количество аналоговых камер. Аналоговые камеры понятны, в своём роде удобны, предсказуемы: ведь в них нет никакого глючащего софта, всё аппаратное. Но даже несмотря на последний всплеск AHD и HDCVI, IP камеры в силу лучшего качества картинки и большей гибкости замещают аналог (прекрасный повод аргументированно обсудить столь интересный вопрос в комментариях).
IP камера состоит из сенсора, чипа по обработке и кодированию видео, процессора для общей обработки, периферии типа GPIO, SDcard и Ethernet, софта внутри всего этого, объектива и корпуса.
Несмотря на кажущееся гигантское разнообразие IP камер на рынке (кажется, «производителей» как минимум много тысяч, может ещё больше), на самом деле тех, кто реально что-то делает внутри очень немного. Если понизить ценовую планку, выкинув из рассмотрения таких уважаемых грандов как Axis, то в ценовом диапазоне, скажем, «до $150 за камеру» окажется совсем немного фирм.
Порядка 3–4 производителей сенсоров, 4–6 производителей чипов+процессоров (это комбинированный чип), несколько тех, кто собирает всё на плату. Корпуса — и те не особо разнообразны, зато целый Шеньжень тех, кто готов это собрать, скрутить и наклеить нужный логотип на коробку. А вот самое интересное — это те, кто делает софт. Во многом их инженерные решения открыли дорогу Mirai.
Таких тоже немного, здесь не получилось вырасти большому количеству производителей. Вся информация достаточно скрыта и это источник проблемы. Внутри почти всех камер стоит обычный линукс с модулями к ядру. Эти модули позволяют сконфигурировать чип, обрабатывающий видео с сенсора и получать это видео в памяти программы. Есть камеры, которые без линукса: там фактически одна большая программа, живущая в ring 0 (если так можно говорить про ARM), но это очень дорого в разработке и сегодня редкость. Дальше отправить видео в сеть — дело техники, и вот это дело как раз решено достаточно посредственно.
Мало того, что большинство дешевых камер освоили тонкое искусство потери данных по TCP, так там ещё и почти везде один и тот же пароль, идущий в серии. Что мы, собственно говоря, и видели из исходников ботнета.
И это мы ещё не будем здесь рассказывать про волшебные магические UDP пакеты, которые позволяют менять настройки сети. Весь тот бред, над которым мы смеемся в голливудских фильмах про «я вошел в их систему, сейчас переключу их видеокамеры на статическую картинку» вовсе не бред, а горькая и жестокая реальность.
Откуда берется такая беспечность производителей? Ведь их поведение вызывает ассоциацию прежде всего с анекдотом про Вовочку и слово, которого нет, хотя сам объект вроде как есть. Добиться от производителя прошивки какой-либо конкретной информации о кишках камеры очень и очень сложно, они, как правило, придерживаются той позиции, что это закрытое устройство, в котором вроде как и линукса-то никакого нет. А может и есть, но вас это не касается, не смотрите туда, смотрите в наши рекламные проспекты.
Предпосылки
Постараемся подумать о том, что могло к этому привести.
Во-первых, тематика видеонаблюдения традиционно вертится вокруг изолированных сетей. Всё это выросло из 4 камер, подключенных напрямую к монитору перед охранником в мозаику (мы, кстати, серверную мозаику умеем делать и очень круто, но внезапно это не для охранника, а для экономии места). Охранник сидит с дубинкой в руках всю смену и в течение 1250 миллисекунд срывается в сторону любой проблемы. Нейросеть обрабатывает любые отклонения похлеще вашей Nvidia Tesla. Правда иногда любит выпить или вздремнуть, чем здорово портит всю картину.
Подключение к такой сети требует для начала физического присутствия, а против этого можно теми же самыми камерами прикрыть траекторию прохода кабеля. Говорят, что у угрюмых людей эти кабели убраны чуть ли не в герметичные трубки с повышенным давлением, чтобы при просверливании к кабелю срабатывал датчик давления.
Важно понимать: до сих пор практически никто не предлагает даже TLS шифрования видео, уходящего с камер! Вся тематика видеонаблюдения не особо рассчитана на внутреннюю безопасность самой видеоинфраструктуры. По крайней мере, не настолько, насколько об этом раздувают щеки те, кто с радостью берет деньги на борьбу со страшными угрозами.
Во-вторых, IP камеры обычно всё-таки являются частью целой инфраструктуры по решению задач охраны и являются частью програмно-аппаратно-человеческо-сервисного комплекса. Т.е. традиционно IP камера втыкается в регистратор, к нему охранник, охраннику кнопку, к кнопке группа быстрого реагирования. То, что сегодня вдруг люди начали вешать камеры себе в подъезд, а города вешают камеры на улицах тысячами — всё это идет немного вразрез с тем, для чего это всё планировалось. Т.е. возникли новые форматы использования очень удачного устройства, для которых это устройство не особо предназначено.
В-третьих, IP камера — это очень изолированное устройство. Чрезвычайно сложно взять IP камеру в руки и настроить конкретно её, ведь в ней практически нет никаких интерфейсов ввода-вывода.
Это тема для отдельной статьи и мы про это расскажем, но давайте просто запомним этот момент: IP камеру действительно неудобно настраивать.
Онлайн
Итак, IP камеры внезапно стали нужны как OTT устройства, с онлайн доступом к ним. Термин OTT — over the top — означает, что сервис оказывается не в контролируемой сети, а через публичный интернет или хотя бы через стык нескольких сетей. Т.е. в условиях, когда никакой гарантии скорости не будет и можно говорить лишь о достаточно эфемерном понятии, как «скорость интернета». Однако, как мы уже выяснили, «скорости интернета» от камеры в Бразилии до серверов Dyn вполне хватило, чтобы те голову поднять не могли.
Там, где раньше вешалась изолированная система, терминировавшаяся на охраннике, теперь возникло устройство, к которому ходят через интернет за видео. Посмотреть: как там дела в своём маленьком магазинчике,
стоит ли всё ещё почтовый ящик перед домом, как там детки в садике играют. Безусловно, производители камер (преимущественно китайцы, потому что только их камеры можно себе позволить) ответили на вызов рынка. Появились мобильные приложения (на IP камерах на сегодняшний день практически отсутствует возможность увидеть видео без ActiveX, так что веб-доступ к видео камеры по сути не предлагают), которые ходят напрямую к камере и показывают видео.
Тут возникла интересная ситуация: для онлайн доступа людей начали приучивать к выставлению каких-то портов наружу. Многие из таких клиентов не пользуются даже стандартным протоколом RTSP,
вместо него гоняют видео по интересной и экзотической штуке, идущей по протоколу 34567 (мы потихоньку разбираем его структуру), но кому есть до этого дело, когда проще выставить все порты наружу. И кому же может понадобиться моя маленькая камера, которая смотрит на парковку перед домом?
Т.е. важной предпосылкой запуска Mirai послужило то, что производители для предоставления онлайн доступа массово заставили людей разобраться с пробросом портов и массово выставили в интернет устройства, способные генерировать десятки мегабит трафика, причем в своей массе это устройства с одним и тем же рутовым паролем. Просто прекрасно, не находите? Всё это богатство лежало здесь под ногами последние лет 5 минимум.
Как эту проблему будут решать сейчас — пока непонятно, и это уже не совсем наша компетенция. Можно массово пройтись по всем камерам, найденным в интернете, и превратить их в кирпич, можно массово их запатчить, можно заставить провайдеров их блокировать. Мы хотим поговорить о другом: как сегодня не превращать камеру в члена такого ботнета.
Современный доступ к камерам
Прогресс не стоит на месте и сегодня сформировалось два базовых способа доступа к IP камерам онлайн: напрямую и через сервер в интернете.
Доступ напрямую разумен в случае с локальной сетью, но как мы уже выяснили, напрямую ходить к современной IP камере по интернету — идея не всегда хорошая. Даже когда устранят проблемы с безопасностью, сохранится проблема с одновременным доступом к камерам. Так, например, в детских садах умилительно выглядит просьба администраторов родителям не заходить на камеры больше чем по четыре одновременно.
Сегодня очень много ADSL интернета, ключевая особенность которого — A, asymmetric. Можно много скачивать, но отдавать много уже тяжело.
Так что поговорим про онлайн сервисы, предоставляющие доступ к камерам.
Онлайн сервис по доступу к камерам (VSaaS, video surveillance as a service) помимо возможности смотреть камеру удаленно может предложить ещё интересные возможности, самая главная из которых — удаленный регистратор. Очень часто видеорегистратор, устройство на которое пишется видео, первым страдает при противоправных действиях. Когда видео сразу утекло в интернет, то его оттуда уже очень сложно достать, задача примерно такого же характера, как попытка запихать взятку в дорожную камеру. Да, это конечно не спасет сами камеры и всё равно запись прервется, но шанс отнести в полицию фотографии злоумышленников растет.
Скажете, дорого писать всё видео в интернет? Совсем недавно одна мысль о просмотре фильмов онлайн пугала и заставляла хвататься за кошелек, а сегодня это уже норма вместо полок с CD. То же самое и с неиспользуемым обратным направлением трафика: почему бы не загрузить, особенно если сервис предоставляет ваш провайдер. Некоторые делают запись в облако по движению, но здесь и по сей день есть доводы как за, так и против. Чего будет стоить экономия пары тысяч рублей, если камера не запишет те самые 10 минут, которые были нужны? С другой стороны, для многих случаев переключение камеры в режим записи по детекции движения делает сам облачный сервис практически бесплатным для его поставщика.
Как же добираются до камер интернет-сервисы, особенно OTT, т.е. не владеющие каналом связи до камеры?
Связь с камерами
Как можно сделать более безопасной связь камеры с онлайн сервисом, не выставляя её наружу? Через канал связи непосредственно с сервисом.
Давайте поднимем что-нибудь типа VPN туннеля или будем публиковать видео с камеры на сервер и тогда уберем проблему с mirai. Некоторые китайцы здесь пошли дальше и продают камеры, которые якобы работают только с их сервисом. Здесь, правда, ситуация опять как с Вовочкой и запретным словом, потому что несмотря на заверения китайских менеджеров, на таких камерах всё-таки есть RTSP сервер, да и логин со стандартным паролем.
Наши дорогие юго-восточные соседи здесь создают массу других интересных источников для будущих проблем. Так, например, нам попала в руки камера с онлайн-сервисом по доступу к этой камере на борту. В камере была такая чудесная возможность, как посылка почты при срабатывании детектора движения. Производитель камеры решил пойти backendless путем и зашил на все камеры один и тот же логин-пароль от одного аккаунта на сайте 163.com (это такой китайский mail.ru). Как вы понимаете, можно не только посмотреть, что интересного есть у других покупателей этой камеры, но и послать что-нибудь интересное и очень активное покупателям такой камеры.
Но давайте вернемся в более стандартную на сегодняшний день ситуацию: онлайн-доступ к камере дополняет традиционную работу с регистратором, а сама камера за NAT-ом и снаружи не видна.
Мы видели два базовых способа получить видео с камеры: какой-то софт на камере публикует видео на сервер, т.е. является инициатором начала передачи видео, и какой-то софт на камере делает камеру доступной для сервера в интернете (читай VPN туннель).
Второй способ почти всегда является гораздо более практичным, поскольку позволяет серверу самому решать, когда ему брать видео, какого качества или вообще брать скриншоты с камеры.
В первом же случае необходимо продумывать сложные механизмы обратной связи, чтобы всегда можно было сказать «горшочек, не вари», иначе вы сами себе сделаете микро-mirai: 1000 камер, пытающихся залить мегабитный поток не туда, куда нужно, вполне себе тянет на солидную проблему.
Давайте немного посмотрим на то, какие бывают варианты организовать VPN туннель или что-то похожее.
OpenVPN
Самым простым вариантом традиционно является OpenVPN. Серверная часть бесплатная и относительно несложно настраивается, когда нужно сделать 100–300 камер. Главный плюс openvpn в том, что он уже есть из коробки в проекте buildroot, с помощью которого собираются прошивки большинства камер.
OpenVPN клиент запускается на камере, каким-то образом при первом старте получает сертификат и дальше ходит к сервису. С той стороны есть стриминговый сервер, который видит, что камера подключилась, и начинает с неё забирать видео, скриншоты или делать какие-то другие вещи.
VPN подход ещё удобен тем, что вся вариативность логики на стороне сервиса. Там гораздо проще и удобнее что-то обновлять, поддерживать, изменять, чем на камере. Цена ошибки на камере — потеря не только камеры, но ещё и клиента, да ещё и веселых и приятных обсуждений по форумам.
Есть у такого подхода и свои недостатки.
VPN — это всё-таки мощный механизм для решения очень общих задач и достаточно ресурсоемкий для сервера. К сожалению, мы не получили никаких практических данных о том, можно ли на одном сервере принять гигабит трафика через OpenVPN и отправить его в стриминговый сервер, но судя по всему — это перебор.
Совершенно точно можно сказать, что использование OpenVPN — это минимум удвоение серверной инфраструктуры по сравнению с обычной системой, потому что надо гнать трафик сначала на отдельный OpenVPN сервер, а потом уже на стриминговый сервер.
Мы в Эрливидео разработали собственное решение для доступа к камерам за NAT, требующее установки на камеру нашего агента. Он работает по-другому.
Flussonic Agent
Итак, мы поставили перед собой цель разработать некоторый софт, ставящийся на камеру для того, чтобы добраться до камеры с сервера в интернете.
Мы отказались от идеи делать отдельно VPN сервер, отдельно стриминговый — ведь трафик ожидается большой на каждый сервер, зачем его дублировать между разным софтом. Наш агент подсоединяется напрямую к Flussonic и отдает видео с камеры сразу в функцию разбора RTSP, т.е. это не обобщенный транспорт, а специализированная штука для доставки видео и скриншотов с камеры на Flussonic с минимальными затратами.
Также мы решили несколько вопросов, а именно: на какой адрес идти этому агенту и что делать, если Flussonic выключится.
С выключением Flussonic мы решили поступить двухфазной схемой протокола: сначала агент соединяется с координатором (endpoint в нашей терминологии) и потом уже от него идет к стриминговому серверу. Если endpoint упал уже после подключения к стримеру, то ничего страшного, работа продолжается.
С адресом endpoint ситуация хитрее. Поскольку мы не сервисная компания, а софтверная, то мы продаем людям софт для организации их сервисов. Таким образом мы не можем зашить один фиксированный адрес в агента, надо чтобы это было настраиваемым. Здесь мы также продумали несложное техническое решение, позволяющее отправить агента на нужный адрес при первичной активации.
В итоге у нас есть свой несложный механизм получения доступа к камере, находящейся за NAT-ом. Даже с включенным шифрованием он менее ресурсоёмкий, чем низкоуровневый OpenVPN, и, в отличие от последнего, помогает решить «баг, которого нет», ведь все данные быстро забираются нашим агентом, а из него уже с помощью хозбытового libevent льются в интернет.
На сервере уже сам Flussonic решает согласно своих настроек, что ему надо пойти к камере и забрать с неё видео или скриншот, или даже начать обратную аудиотрансляцию.
Такие подходы (штатный vpn, публикация с камеры, самодельный туннель) позволяют снизить риск от выставления камеры в интернет. В следующих статьях мы расскажем о том, как мы заливаем нашего агента на камеры, как он работает в сервисе по предоставлению видео с камер пользователям, какие есть интересные моменты с его настройкой и, что самое интересное, как камера привязывается к пользователю — тут целая уйма вариантов. Ещё в черновиках есть про собственную прошивку IP камеры — пишите в комментариях, что интереснее.