Конференция BLACK HAT USA. Как Голливудский хакер использует камеры наблюдения. Часть 1
Мы можем также использовать эту ошибку для получения или замены зашифрованного пароля администратора, который хранится в /etc/privpasswd.
![](https://habrastorage.org/r/w780q1/webt/_o/vj/ks/_ovjkseaaz-oy3lfadexjrvtsho.jpeg)
Мы можем вытянуть содержимое из этого файла. Как видите, в нём находится имя пользователя root и зашифрованный пароль.
![](https://habrastorage.org/r/w780q1/webt/ks/xi/wf/ksxiwfxwvunaektxeno1idlc1zq.jpeg)
На данный момент у нас есть 2 варианта: можно попробовать расшифровать пароль с помощью такого инструмента, как John the Ripper:
![](https://habrastorage.org/r/w780q1/webt/7o/ua/hh/7ouahhpqja4nntiipe4xe9g5of8.jpeg)
Если это не сработает, черт с ним – у нас есть root, и мы просто перезапишем этот файл. В любом случае мы получаем доступ к «админке», и так же, как и в случае с предыдущей камерой, снова будем иметь права как администратора, так и root-пользователя.
![](https://habrastorage.org/r/w780q1/webt/oq/sk/_v/oqsk_vcpqjfpb7t7u0gr4if3oey.jpeg)
Эти уязвимости имеют место в большинстве камер IQ InVision, включая 3 и 7 серии, серию Sentinel, Alliance-Pro, Alliance-MX и Alliance-Mini. Я не стану перечислять все модели, иначе останусь тут навсегда, весь перечень этих камер имеется в интернете в списке Shodan Dork. Печально то, что, как известно, камеры этого производителя широко используются в школах, полицейских участках, банках, казино, финансовых и консалтинговых компаниях, службе DHL и так далее.
Я посмотрел, что на сегодня самой дорогой камерой является модель N5072 компании 3SVision. Её цена обозначена фразой «Свяжитесь с нами», так что я сразу понял, что не могу себе её позволить. С этой камерой у меня были некоторые проблемы, потому что для всех остальных камер я мог просто зайти на сайт производителя, скачать прошивку и проанализировать код на предмет уязвимостей. Мне не нужно было покупать устройство, по крайней мере, для того чтобы провести начальное тестирование.
![](https://habrastorage.org/r/w780q1/webt/vj/fm/gw/vjfmgwkf2nz-2h4ce9dm_f8mifu.jpeg)
Но когда я зашёл на сайт производителя скачать прошивку для этой камеры, передо мной появилось всплывающее окно JavaScript, предлагающее ввести свой пароль. Я сразу перепробовал все самые распространенные пароли: love, sex, god, но это не сработало. Но, в конце концов, сработал пароль tab=4. И знаете, почему? Потому что если вы посмотрите на JavaScript, который отправляет пароль обратно на сервер, мне даже не нужно объяснять, что вы там увидите (смех в зале), это просто великолепно.
![](https://habrastorage.org/r/w780q1/webt/za/aa/l-/zaaal-1foxxhd6ixwdsz_pzrb2s.jpeg)
До тех пор, пока вы не получите правильный пароль, вас просто перенаправляет на текущий URL с амперсандом tab=4 в конце строки. Поскольку я достаточно грамотный, чтобы понять, что это такое, я ввёл эту штуку в качестве пароля и зашёл на страницу загрузки прошивки.
Подобный подход не сулит ничего хорошего для безопасности их системы. То, что в прошивке они используют кастомный веб-сервер httpd, выглядит довольно безобидно, но если посмотреть на строки в этом двоичном файле, то можно заметить, что все они прекрасно настраиваются.
![](https://habrastorage.org/r/w780q1/webt/eq/ny/14/eqny14l2qobedn2cxg_gs4eanuo.jpeg)
Поэтому я решил, что раз это выглядит действительно настраиваемым, мне нужно рассмотреть то, как их веб-сервер управляет аутентификацией. Теперь, когда я знаю, что камеры используют базовый HTTP устройства для проверки подлинности, я использую для дешифровки base64. Если вы знакомы с аутентификаций через http, то знаете, что здесь логин и пароль объединены, а потом закодированы в base64.
![](https://habrastorage.org/r/w780q1/webt/wp/g6/qf/wpg6qfuxetda18sr14nqy178kya.jpeg)
Поэтому я начал просматривать код для перекрестных ссылок, в которых упоминается b64_decode. Всё, что они делают, когда расшифровывают ваш пароль, это передают его на проверку b64_decode, и отлично, всё в порядке, они расшифровали ваш пароль. Затем они делают два сравнения строк: строки с жёстко закодированным параметром 3sadmin и ещё одной жёстко закодированной строкой 27988303.
Раньше я думал, что нельзя быть настолько тупым, чтобы размещать жестко закодированные вещи в своём HTTP сервере, так как подобное не заслуживает доверия, но оно продолжает работать.
![](https://habrastorage.org/r/w780q1/webt/ue/pc/oe/uepcoeckvijnpdcc8m0n3qwpkvy.jpeg)
Таким образом, можно получить доступ к любой камере 3SVision и стать администратором. Это дает вам доступ к видео кассовых аппаратов, тайванских контрольно-пропускных пунктов и подвалов российских промышленных предприятий.
Но смотреть на всё это видео довольно быстро становится скучным, поэтому я захотел добраться до root. К счастью, их код изобилует всякими небезопасными системными вызовами, и для злоумышленника открывается широчайшее поле для атаки, особенно если он входит в систему как администратор. Лучший тому пример – это обработчик видеозаписи records.cgi.
![](https://habrastorage.org/r/w780q1/webt/jv/zk/zy/jvzkzyx7ihm3xdhnpwaabwxaotg.jpeg)
Не все, но многие из этих камер поддерживают локальное хранилище, поэтому вы можете, скажем, вставить внутрь камеры свою карту памяти SD и сохранять на ней видеозаписи для себя. Вам также предоставляется возможность управлять некоторыми основными файлами через интерфейс администратора, и это делается через функцию do_records на странице cgi. Сgi – это не физическая страница на диске. Когда веб-сервер видит, что вы запросили запись CGI, то он вызывает обработчик функции do_records, который проверяет, какое действие вы выполняете. Например, если вы хотите удалить файл, вы должны передать ему значение команды aRemove, равное «remove».
![](https://habrastorage.org/r/w780q1/webt/kj/a1/-1/kja1-1-nxvskzv07qnr91radrbe.jpeg)
Кроме этого, вы должны сообщить, какой именно файл хотите удалить.
![](https://habrastorage.org/r/w780q1/webt/eo/ud/m4/eoudm4e2e3saetpwvncgb0dephw.jpeg)
Это имя файла вставляется в команду RM, которая передается системе.
![](https://habrastorage.org/r/w780q1/webt/fr/tt/us/frttuszt_u67a2wpp9nymedxxrw.jpeg)
Я думаю, вы уже поняли, к чему это может привести. Вместо имени файла можно вставить команду, которая вызовет перезагрузку системы, и так далее. При этом мы получим полный контроль над системой, как это было в случаях со взломом предыдущих камер.
![](https://habrastorage.org/r/w780q1/webt/wu/yk/n3/wuykn3sklwmpefudoejwxipbn-i.jpeg)
Это срабатывает практически на всей линейке продуктов 3SVision, причём затрагивает не только камеры, но и их видео-сервер, потому что используют тот же веб-сервер. Когда я проводил свои исследования, то обнаружил ещё одну компанию под названием A-Linking, которая использует в своих камерах ту же самую прошивку. Но они изменили жёстко запрограммированные учетные данные на что-то другое. Так что у них всё равно имеются эти жёстко закодированные данные, но теперь они отличаются от учётных данных, применяемых в прошивке камер 3SVision. Я не буду перечислять все модели таких камер, просто замечу, что все они имеются в рейтинге уязвимостей Shodan Dork.
![](https://habrastorage.org/r/w780q1/webt/bh/iz/qd/bhizqddyiutycelkh7xvoums6xm.jpeg)
Учитывая их большую стоимость по сравнению с камерами других производителей это особенно интересно, к тому же, как известно, эти камеры используются на иностранных военных, энергетических и промышленных предприятиях. Если вы увидели их на Shodan Dork, будьте осторожны с продажей этих камер за границу и не вините меня, если за вами придут китайские военные.
Итак, что даёт то, о чём я вам рассказал? Я проникаю в вашу сеть, я вас вижу и у меня есть root-права. Это прекрасная возможность для любого злоумышленника, учитывая, что большинство из этих камер также подключены к внутренней сети. Вы можете удалённо получить к ним доступ, проникнуть внутрь, получить root-права, залезть в компьютер на базе Linux и оттуда делать всё что угодно с их локальной сетью.
Здесь я отступил немного назад и сказал: «ok, это всё здорово, но что я могу проделать с самой камерой»? Я получил root-доступ к камере, это потрясающе, но если вы подойдёте к обычному администратору систем наблюдения и скажете ему, что имеете root-доступ к камере, он даже не поймёт, что это значит. Поэтому я захотел сделать что-то более интересное, то, что действительно продемонстрирует все возможности. Я захотел перехватить видеопоток, который выглядит вот так:
![](https://habrastorage.org/r/w780q1/webt/7v/rw/ft/7vrwftrag-3ce3mxa1rale08cgk.jpeg)
И заменить его чем-то, что выглядит вот так:
![](https://habrastorage.org/r/w780q1/webt/4q/oa/3b/4qoa3bhqpgfbslhwr4lsho2ip3s.jpeg)
Это своего рода классический взлом по-голливудски, когда вы хотите проникнуть на охраняемый объект, напичканный камерами наблюдения, и хакер из вашей группы должен взломать эту камеру так, чтобы она показывала, что там никого нет, хотя в действительности там кто-то есть. Для доказательства возможности такого трюка я выбрал камеру наблюдения Trendnet TV-IP410WN.
![](https://habrastorage.org/r/w780q1/webt/ru/8n/ds/ru8ndsofvem7t4gw_tcmlztvyco.jpeg)
Я выбрал её по нескольким причинам. Прежде всего, я могу себе позволить её покупку, что является большим плюсом. Во-вторых, в ней имеется бэкдор-аккаунт:
![](https://habrastorage.org/r/w780q1/webt/nz/ke/us/nzkeus-9v1abkue8qtngldszexm.jpeg)
Позволяющий добраться вот до этих файлов:
![](https://habrastorage.org/r/w780q1/webt/zy/bu/jt/zybujtxkuw2gxo2bt4escas5kh8.jpeg)
Которые имеют очень широко распространённую уязвимость, позволяющую произвести инъекцию команд:
![](https://habrastorage.org/r/w780q1/webt/ip/ml/hr/ipmlhre-0ungitbi8go9znmh3oe.jpeg)
Что в свою очередь, может быть очень просто использовано для отправки в камеру нужных нам пакетов:
![](https://habrastorage.org/r/w780q1/webt/iq/na/tu/iqnatufjxtpwl9mhcfws0mgk9oy.jpeg)
![](https://habrastorage.org/r/w780q1/webt/14/3o/tn/143otn3vyhctqylq3nthlsxqx8g.jpeg)
Здесь есть те же возможности для взлома, о которых я говорил раньше, только в данном случае у нас имеется более дешёвая камера.
Как оказалось, эта конкретная ошибка стала известна ещё в 2011 году. Но проблема заключалась в том, что воспользоваться этой информацией не смог бы ни я, ни кто-либо другой, потому что в описании этой уязвимости не было ни перечня устройств, в которых она присутствовала, ни указаний на конкретную прошивку, так что все проигнорировали это сообщение. Поэтому если бы вы обратились к Google с запросом «уязвимость камер TV-IP410WN», вы бы ничего не нашли.
Ещё одна проблема не предоставления подобной информации состоит в том, что эта уязвимость остаётся неизвестна не только для людей, занимающихся обеспечением компьютерной безопасности, но для производителей и поставщиков продукции. Это не позволяет им определить, какие прошивки и в каких моделях камер необходимо исправить. Так что эти устройства до сих пор продаются повсюду с тем же багом — Shodan Dork указывает на более чем 28 тысяч таких камер.
Итак, предположим, что здесь показано изображение видеоканала, наблюдаемого администратором, что наиболее соответствует целям нашего эксперимента. Будем считать, что администратор просматривает это видео через веб-интерфейс, а не через какой-то пользовательский сервис, RTPID или что-то в этом роде.
![](https://habrastorage.org/r/w780q1/webt/xm/x2/kn/xmx2knftmnfmvdmq_qu6xzcwi1g.jpeg)
Если взять изображение с этой конкретной камеры, просматриваемое в браузере, то можно увидеть, что за просмотр этого потокового видео отвечает процесс mjpg.cgi.
![](https://habrastorage.org/r/w780q1/webt/un/wr/tx/unwrtx6ewaprecviax73gvhsngg.jpeg)
C помощью инъекции команды мы можем просмотреть, какие процессы запущены, а затем фактически «убить» все процессы mjpg.cgi:
![](https://habrastorage.org/r/w780q1/webt/hn/ha/kt/hnhakttuchdksbpbaaos_nrzpxq.jpeg)
Что приведёт к эффекту временной «заморозки» изображения видеоканала администратора. Это произойдёт потому, что браузер будет показывать ему последний полученный им образ и не будет больше получать никаких изображений с этой камеры. Но мы не станем так поступать, потому что если администратор обновит браузер или осуществит навигацию на новую страницу, а потом вернётся к просмотру с камеры, передача потокового видео возобновиться и он увидит изображение в режиме реального времени.
Поэтому мы постараемся заменить файл mjpg.cgi, что не должно представлять трудностей – двух строк скрипта bash будет достаточно.
![](https://habrastorage.org/r/w780q1/webt/ra/io/r3/raior3oskir8ivcezhcpcxpyfl4.jpeg)
В частности, все, что вам нужно сделать, это заменить эту страницу cgi на диске скриптом, который возвращает некоторые основные заголовки браузеру, а затем с помощью команды cat вставить в передачу статическое JPEG изображение пустого лифта. Это может быть изображение goatse, всё, что угодно. Но в нашем случае администратор теперь постоянно будет видеть пустой лифт независимо от того, что там фактически происходит.
![](https://habrastorage.org/r/w780q1/webt/ol/45/sa/ol45sank4y7_j1fkxg_41d9z1hc.jpeg)
На самом деле это намного интереснее выглядит в «живом» видео, так что если боги демонстрации сегодня будут со мной, у нас будет всё в порядке. Итак, как видно на экране, моя камера охраняет моё сокровище – бутылку пива. Видите, я беру её, и камера это отображает. Сейчас я применю один эксплойт в виде вот этого скрипта, который «убьёт» видео в реальном времени и заменит его статичным файлом изображения, о чём я только что рассказал.
Он также предоставит мне административные права для управления камерой и настроит секретный URL, чтобы я всё-таки мог посмотреть подлинное видео в то время как канал администратора продолжает транслировать «замороженное» видео. На экране вы видите, как идёт отправка этого эксплойта.
![](https://habrastorage.org/r/w780q1/webt/u0/tr/h_/u0trh_1v7b7rua7n8talrteltk4.jpeg)
Итак, всё прошло отлично, он вернул мне учетные данные пользователя – логин администратора и пароль securecam1234.
![](https://habrastorage.org/r/w780q1/webt/30/s1/hm/30s1hm-vlhumogzlqc5mazvzeq0.jpeg)
Он также сообщает мне, что URL-адрес настроен так, что я могу посмотреть реальный видео-канал, так что если я сейчас перейду на свой хакерский браузер, введу учётные данные, то смогу увидеть, что происходит.
![](https://habrastorage.org/r/w780q1/webt/0u/88/u2/0u88u2vahb3m74hr7kz7um9hyow.jpeg)
Итак, если кто-то заберёт бутылку, я об этом узнаю:
![](https://habrastorage.org/r/w780q1/webt/7r/kv/lv/7rkvlvdm1mew2ksqjcyn52nvfze.jpeg)
А администратор – нет, у него бутылка так и останется на столе.
![](https://habrastorage.org/r/w780q1/webt/bu/ge/ie/bugeiex6lotb5q0lvnqarhjt4pa.jpeg)
Итак, несколько заключительных соображений по этому поводу, на которых я хочу остановиться. Я представил вам далеко не всеобъемлющий список уязвимых камер, мои исследования не носили такого характера. В действительности таких камер намного больше, и большинство из них очень просто взломать.
Практически каждая камера покажет номер модели на странице входа или странице ввода учётных данных, даже если вы не прошли аутентификацию, в зависимости от того, каким способом они проверяют эту аутентификацию. Если злоумышленник знает номер модели, не зная об этой камере больше ничего, он может зайти в Google, найти сайт производителя и скачать прошивку.
Возможно, вам понадобится ещё узнать, что tab=4, но получив прошивку, вы сможете заняться поиском уязвимостей данной камеры, даже не покупая её.
Это именно то, что я сделал со всеми этими камерами – всё было проделано с помощью анализа прошивки, все эксплойты созданы на её основе и я не приобрёл ни одной камеры. Затем достаточно было использовать Binwalk для анализа и распаковки прошивки, а IDA и Qemu для деассемблирования и эмуляции, если это было необходимо, после чего меня ждала победа.
А теперь я отвечу на ваши вопросы. По поводу безопасности камер скажу так: я мог бы пару часов описывать все камеры, безопасность которых я исследовал, но среди них не было ни одной камеры, которая бы была отлично защищена. Между тем, существуют производители, с продукцией которых у меня просто не было возможности ознакомиться, потому не было денег купить такую камеру, так как они не предоставляют возможность бесплатно скачать прошивку. Поэтому я не беру на себя смелость утверждать, что надёжных камер наблюдения вообще не бывает.
Меня спрашивают, можно ли заменить статическое изображение при взломе чем-то динамическим. Проще всего было бы вставить нечто вроде файла анимации.gif, это было бы чисто хакерское решение. Однако я думаю, что вполне можно написать свой собственный cgi, который позволит показывать видео в режиме реального времени. Я для этого слишком ленив, несмотря на моё демо. Но если вы знаете концепцию этих устройств, то можете сделать с ними всё, что захотите.
Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps до декабря бесплатно при оплате на срок от полугода, заказать можно тут.
Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?
Мы можем также использовать эту ошибку для получения или замены зашифрованного пароля администратора, который хранится в /etc/privpasswd.
![](https://habrastorage.org/webt/_o/vj/ks/_ovjkseaaz-oy3lfadexjrvtsho.jpeg)
Мы можем вытянуть содержимое из этого файла. Как видите, в нём находится имя пользователя root и зашифрованный пароль.
![](https://habrastorage.org/webt/ks/xi/wf/ksxiwfxwvunaektxeno1idlc1zq.jpeg)
На данный момент у нас есть 2 варианта: можно попробовать расшифровать пароль с помощью такого инструмента, как John the Ripper:
![](https://habrastorage.org/webt/7o/ua/hh/7ouahhpqja4nntiipe4xe9g5of8.jpeg)
Если это не сработает, черт с ним – у нас есть root, и мы просто перезапишем этот файл. В любом случае мы получаем доступ к «админке», и так же, как и в случае с предыдущей камерой, снова будем иметь права как администратора, так и root-пользователя.
![](https://habrastorage.org/webt/oq/sk/_v/oqsk_vcpqjfpb7t7u0gr4if3oey.jpeg)
Эти уязвимости имеют место в большинстве камер IQ InVision, включая 3 и 7 серии, серию Sentinel, Alliance-Pro, Alliance-MX и Alliance-Mini. Я не стану перечислять все модели, иначе останусь тут навсегда, весь перечень этих камер имеется в интернете в списке Shodan Dork. Печально то, что, как известно, камеры этого производителя широко используются в школах, полицейских участках, банках, казино, финансовых и консалтинговых компаниях, службе DHL и так далее.
Я посмотрел, что на сегодня самой дорогой камерой является модель N5072 компании 3SVision. Её цена обозначена фразой «Свяжитесь с нами», так что я сразу понял, что не могу себе её позволить. С этой камерой у меня были некоторые проблемы, потому что для всех остальных камер я мог просто зайти на сайт производителя, скачать прошивку и проанализировать код на предмет уязвимостей. Мне не нужно было покупать устройство, по крайней мере, для того чтобы провести начальное тестирование.
![](https://habrastorage.org/webt/vj/fm/gw/vjfmgwkf2nz-2h4ce9dm_f8mifu.jpeg)
Но когда я зашёл на сайт производителя скачать прошивку для этой камеры, передо мной появилось всплывающее окно JavaScript, предлагающее ввести свой пароль. Я сразу перепробовал все самые распространенные пароли: love, sex, god, но это не сработало. Но, в конце концов, сработал пароль tab=4. И знаете, почему? Потому что если вы посмотрите на JavaScript, который отправляет пароль обратно на сервер, мне даже не нужно объяснять, что вы там увидите (смех в зале), это просто великолепно.
![](https://habrastorage.org/webt/za/aa/l-/zaaal-1foxxhd6ixwdsz_pzrb2s.jpeg)
До тех пор, пока вы не получите правильный пароль, вас просто перенаправляет на текущий URL с амперсандом tab=4 в конце строки. Поскольку я достаточно грамотный, чтобы понять, что это такое, я ввёл эту штуку в качестве пароля и зашёл на страницу загрузки прошивки.
Подобный подход не сулит ничего хорошего для безопасности их системы. То, что в прошивке они используют кастомный веб-сервер httpd, выглядит довольно безобидно, но если посмотреть на строки в этом двоичном файле, то можно заметить, что все они прекрасно настраиваются.
![](https://habrastorage.org/webt/eq/ny/14/eqny14l2qobedn2cxg_gs4eanuo.jpeg)
Поэтому я решил, что раз это выглядит действительно настраиваемым, мне нужно рассмотреть то, как их веб-сервер управляет аутентификацией. Теперь, когда я знаю, что камеры используют базовый HTTP устройства для проверки подлинности, я использую для дешифровки base64. Если вы знакомы с аутентификаций через http, то знаете, что здесь логин и пароль объединены, а потом закодированы в base64.
![](https://habrastorage.org/webt/wp/g6/qf/wpg6qfuxetda18sr14nqy178kya.jpeg)
Поэтому я начал просматривать код для перекрестных ссылок, в которых упоминается b64_decode. Всё, что они делают, когда расшифровывают ваш пароль, это передают его на проверку b64_decode, и отлично, всё в порядке, они расшифровали ваш пароль. Затем они делают два сравнения строк: строки с жёстко закодированным параметром 3sadmin и ещё одной жёстко закодированной строкой 27988303.
Раньше я думал, что нельзя быть настолько тупым, чтобы размещать жестко закодированные вещи в своём HTTP сервере, так как подобное не заслуживает доверия, но оно продолжает работать.
![](https://habrastorage.org/webt/ue/pc/oe/uepcoeckvijnpdcc8m0n3qwpkvy.jpeg)
Таким образом, можно получить доступ к любой камере 3SVision и стать администратором. Это дает вам доступ к видео кассовых аппаратов, тайванских контрольно-пропускных пунктов и подвалов российских промышленных предприятий.
Но смотреть на всё это видео довольно быстро становится скучным, поэтому я захотел добраться до root. К счастью, их код изобилует всякими небезопасными системными вызовами, и для злоумышленника открывается широчайшее поле для атаки, особенно если он входит в систему как администратор. Лучший тому пример – это обработчик видеозаписи records.cgi.
![](https://habrastorage.org/webt/jv/zk/zy/jvzkzyx7ihm3xdhnpwaabwxaotg.jpeg)
Не все, но многие из этих камер поддерживают локальное хранилище, поэтому вы можете, скажем, вставить внутрь камеры свою карту памяти SD и сохранять на ней видеозаписи для себя. Вам также предоставляется возможность управлять некоторыми основными файлами через интерфейс администратора, и это делается через функцию do_records на странице cgi. Сgi – это не физическая страница на диске. Когда веб-сервер видит, что вы запросили запись CGI, то он вызывает обработчик функции do_records, который проверяет, какое действие вы выполняете. Например, если вы хотите удалить файл, вы должны передать ему значение команды aRemove, равное «remove».
![](https://habrastorage.org/webt/kj/a1/-1/kja1-1-nxvskzv07qnr91radrbe.jpeg)
Кроме этого, вы должны сообщить, какой именно файл хотите удалить.
![](https://habrastorage.org/webt/eo/ud/m4/eoudm4e2e3saetpwvncgb0dephw.jpeg)
Это имя файла вставляется в команду RM, которая передается системе.
![](https://habrastorage.org/webt/fr/tt/us/frttuszt_u67a2wpp9nymedxxrw.jpeg)
Я думаю, вы уже поняли, к чему это может привести. Вместо имени файла можно вставить команду, которая вызовет перезагрузку системы, и так далее. При этом мы получим полный контроль над системой, как это было в случаях со взломом предыдущих камер.
![](https://habrastorage.org/webt/wu/yk/n3/wuykn3sklwmpefudoejwxipbn-i.jpeg)
Это срабатывает практически на всей линейке продуктов 3SVision, причём затрагивает не только камеры, но и их видео-сервер, потому что используют тот же веб-сервер. Когда я проводил свои исследования, то обнаружил ещё одну компанию под названием A-Linking, которая использует в своих камерах ту же самую прошивку. Но они изменили жёстко запрограммированные учетные данные на что-то другое. Так что у них всё равно имеются эти жёстко закодированные данные, но теперь они отличаются от учётных данных, применяемых в прошивке камер 3SVision. Я не буду перечислять все модели таких камер, просто замечу, что все они имеются в рейтинге уязвимостей Shodan Dork.
![](https://habrastorage.org/webt/bh/iz/qd/bhizqddyiutycelkh7xvoums6xm.jpeg)
Учитывая их большую стоимость по сравнению с камерами других производителей это особенно интересно, к тому же, как известно, эти камеры используются на иностранных военных, энергетических и промышленных предприятиях. Если вы увидели их на Shodan Dork, будьте осторожны с продажей этих камер за границу и не вините меня, если за вами придут китайские военные.
Итак, что даёт то, о чём я вам рассказал? Я проникаю в вашу сеть, я вас вижу и у меня есть root-права. Это прекрасная возможность для любого злоумышленника, учитывая, что большинство из этих камер также подключены к внутренней сети. Вы можете удалённо получить к ним доступ, проникнуть внутрь, получить root-права, залезть в компьютер на базе Linux и оттуда делать всё что угодно с их локальной сетью.
Здесь я отступил немного назад и сказал: «ok, это всё здорово, но что я могу проделать с самой камерой»? Я получил root-доступ к камере, это потрясающе, но если вы подойдёте к обычному администратору систем наблюдения и скажете ему, что имеете root-доступ к камере, он даже не поймёт, что это значит. Поэтому я захотел сделать что-то более интересное, то, что действительно продемонстрирует все возможности. Я захотел перехватить видеопоток, который выглядит вот так:
![](https://habrastorage.org/webt/7v/rw/ft/7vrwftrag-3ce3mxa1rale08cgk.jpeg)
И заменить его чем-то, что выглядит вот так:
![](https://habrastorage.org/webt/4q/oa/3b/4qoa3bhqpgfbslhwr4lsho2ip3s.jpeg)
Это своего рода классический взлом по-голливудски, когда вы хотите проникнуть на охраняемый объект, напичканный камерами наблюдения, и хакер из вашей группы должен взломать эту камеру так, чтобы она показывала, что там никого нет, хотя в действительности там кто-то есть. Для доказательства возможности такого трюка я выбрал камеру наблюдения Trendnet TV-IP410WN.
![](https://habrastorage.org/webt/ru/8n/ds/ru8ndsofvem7t4gw_tcmlztvyco.jpeg)
Я выбрал её по нескольким причинам. Прежде всего, я могу себе позволить её покупку, что является большим плюсом. Во-вторых, в ней имеется бэкдор-аккаунт:
![](https://habrastorage.org/webt/nz/ke/us/nzkeus-9v1abkue8qtngldszexm.jpeg)
Позволяющий добраться вот до этих файлов:
![](https://habrastorage.org/webt/zy/bu/jt/zybujtxkuw2gxo2bt4escas5kh8.jpeg)
Которые имеют очень широко распространённую уязвимость, позволяющую произвести инъекцию команд:
![](https://habrastorage.org/webt/ip/ml/hr/ipmlhre-0ungitbi8go9znmh3oe.jpeg)
Что в свою очередь, может быть очень просто использовано для отправки в камеру нужных нам пакетов:
![](https://habrastorage.org/webt/iq/na/tu/iqnatufjxtpwl9mhcfws0mgk9oy.jpeg)
![](https://habrastorage.org/webt/14/3o/tn/143otn3vyhctqylq3nthlsxqx8g.jpeg)
Здесь есть те же возможности для взлома, о которых я говорил раньше, только в данном случае у нас имеется более дешёвая камера.
Как оказалось, эта конкретная ошибка стала известна ещё в 2011 году. Но проблема заключалась в том, что воспользоваться этой информацией не смог бы ни я, ни кто-либо другой, потому что в описании этой уязвимости не было ни перечня устройств, в которых она присутствовала, ни указаний на конкретную прошивку, так что все проигнорировали это сообщение. Поэтому если бы вы обратились к Google с запросом «уязвимость камер TV-IP410WN», вы бы ничего не нашли.
Ещё одна проблема не предоставления подобной информации состоит в том, что эта уязвимость остаётся неизвестна не только для людей, занимающихся обеспечением компьютерной безопасности, но для производителей и поставщиков продукции. Это не позволяет им определить, какие прошивки и в каких моделях камер необходимо исправить. Так что эти устройства до сих пор продаются повсюду с тем же багом — Shodan Dork указывает на более чем 28 тысяч таких камер.
Итак, предположим, что здесь показано изображение видеоканала, наблюдаемого администратором, что наиболее соответствует целям нашего эксперимента. Будем считать, что администратор просматривает это видео через веб-интерфейс, а не через какой-то пользовательский сервис, RTPID или что-то в этом роде.
![](https://habrastorage.org/webt/xm/x2/kn/xmx2knftmnfmvdmq_qu6xzcwi1g.jpeg)
Если взять изображение с этой конкретной камеры, просматриваемое в браузере, то можно увидеть, что за просмотр этого потокового видео отвечает процесс mjpg.cgi.
![](https://habrastorage.org/webt/un/wr/tx/unwrtx6ewaprecviax73gvhsngg.jpeg)
C помощью инъекции команды мы можем просмотреть, какие процессы запущены, а затем фактически «убить» все процессы mjpg.cgi:
![](https://habrastorage.org/webt/hn/ha/kt/hnhakttuchdksbpbaaos_nrzpxq.jpeg)
Что приведёт к эффекту временной «заморозки» изображения видеоканала администратора. Это произойдёт потому, что браузер будет показывать ему последний полученный им образ и не будет больше получать никаких изображений с этой камеры. Но мы не станем так поступать, потому что если администратор обновит браузер или осуществит навигацию на новую страницу, а потом вернётся к просмотру с камеры, передача потокового видео возобновиться и он увидит изображение в режиме реального времени.
Поэтому мы постараемся заменить файл mjpg.cgi, что не должно представлять трудностей – двух строк скрипта bash будет достаточно.
![](https://habrastorage.org/webt/ra/io/r3/raior3oskir8ivcezhcpcxpyfl4.jpeg)
В частности, все, что вам нужно сделать, это заменить эту страницу cgi на диске скриптом, который возвращает некоторые основные заголовки браузеру, а затем с помощью команды cat вставить в передачу статическое JPEG изображение пустого лифта. Это может быть изображение goatse, всё, что угодно. Но в нашем случае администратор теперь постоянно будет видеть пустой лифт независимо от того, что там фактически происходит.
![](https://habrastorage.org/webt/ol/45/sa/ol45sank4y7_j1fkxg_41d9z1hc.jpeg)
На самом деле это намного интереснее выглядит в «живом» видео, так что если боги демонстрации сегодня будут со мной, у нас будет всё в порядке. Итак, как видно на экране, моя камера охраняет моё сокровище – бутылку пива. Видите, я беру её, и камера это отображает. Сейчас я применю один эксплойт в виде вот этого скрипта, который «убьёт» видео в реальном времени и заменит его статичным файлом изображения, о чём я только что рассказал.
Он также предоставит мне административные права для управления камерой и настроит секретный URL, чтобы я всё-таки мог посмотреть подлинное видео в то время как канал администратора продолжает транслировать «замороженное» видео. На экране вы видите, как идёт отправка этого эксплойта.
![](https://habrastorage.org/webt/u0/tr/h_/u0trh_1v7b7rua7n8talrteltk4.jpeg)
Итак, всё прошло отлично, он вернул мне учетные данные пользователя – логин администратора и пароль securecam1234.
![](https://habrastorage.org/webt/30/s1/hm/30s1hm-vlhumogzlqc5mazvzeq0.jpeg)
Он также сообщает мне, что URL-адрес настроен так, что я могу посмотреть реальный видео-канал, так что если я сейчас перейду на свой хакерский браузер, введу учётные данные, то смогу увидеть, что происходит.
![](https://habrastorage.org/webt/0u/88/u2/0u88u2vahb3m74hr7kz7um9hyow.jpeg)
Итак, если кто-то заберёт бутылку, я об этом узнаю:
![](https://habrastorage.org/webt/7r/kv/lv/7rkvlvdm1mew2ksqjcyn52nvfze.jpeg)
А администратор – нет, у него бутылка так и останется на столе.
![](https://habrastorage.org/webt/bu/ge/ie/bugeiex6lotb5q0lvnqarhjt4pa.jpeg)
Итак, несколько заключительных соображений по этому поводу, на которых я хочу остановиться. Я представил вам далеко не всеобъемлющий список уязвимых камер, мои исследования не носили такого характера. В действительности таких камер намного больше, и большинство из них очень просто взломать.
Практически каждая камера покажет номер модели на странице входа или странице ввода учётных данных, даже если вы не прошли аутентификацию, в зависимости от того, каким способом они проверяют эту аутентификацию. Если злоумышленник знает номер модели, не зная об этой камере больше ничего, он может зайти в Google, найти сайт производителя и скачать прошивку.
Возможно, вам понадобится ещё узнать, что tab=4, но получив прошивку, вы сможете заняться поиском уязвимостей данной камеры, даже не покупая её.
Это именно то, что я сделал со всеми этими камерами – всё было проделано с помощью анализа прошивки, все эксплойты созданы на её основе и я не приобрёл ни одной камеры. Затем достаточно было использовать Binwalk для анализа и распаковки прошивки, а IDA и Qemu для деассемблирования и эмуляции, если это было необходимо, после чего меня ждала победа.
А теперь я отвечу на ваши вопросы. По поводу безопасности камер скажу так: я мог бы пару часов описывать все камеры, безопасность которых я исследовал, но среди них не было ни одной камеры, которая бы была отлично защищена. Между тем, существуют производители, с продукцией которых у меня просто не было возможности ознакомиться, потому не было денег купить такую камеру, так как они не предоставляют возможность бесплатно скачать прошивку. Поэтому я не беру на себя смелость утверждать, что надёжных камер наблюдения вообще не бывает.
Меня спрашивают, можно ли заменить статическое изображение при взломе чем-то динамическим. Проще всего было бы вставить нечто вроде файла анимации.gif, это было бы чисто хакерское решение. Однако я думаю, что вполне можно написать свой собственный cgi, который позволит показывать видео в режиме реального времени. Я для этого слишком ленив, несмотря на моё демо. Но если вы знаете концепцию этих устройств, то можете сделать с ними всё, что захотите.
Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps до декабря бесплатно при оплате на срок от полугода, заказать можно тут.
Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?