«Ржавая» Ip-Камера: Прошивка На Rust

До появления ботнета Mirai только особо интересующиеся знали, что находится внутри обычных IP-камер.

В большинстве случаев он работает под управлением обычного Linux, часто с паролем root по умолчанию, а то и вообще без него: у нас в офисе стоит такая камера, с прошивкой от декабря 2016 года и беспарольным root-telnet. А что дальше, какой софт работает на этом линуксе? Есть крутые статьи датакомпбой о поиске ошибка, которой не существует , там пока разрозненная информация, но в целом ситуация такова: IP камера имеет специально пропатченное ядро, которое дает программе доступ через специальную библиотеку к оборудованию, производящему сжатые видеокадры.

Печальная реальность такова, что очень часто это программное обеспечение написано не лучшим образом.

Достаточно сказать, что большинство камер, которые висят на улице, сильно страдают от большого расстояния до сервера, ведь авторы их прошивок владеют искусством потери данных по TCP. Мы решили исправить эту ситуацию собственной прошивкой, и сделали ставку на Rust.



Рабочие условия

Вам нужно сделать пару мелочей: разобраться с SDK, написать код, который настраивает железо, получает кадры H264 и отправляет их в сеть.

Пара мелочей, особенно если учесть, насколько легко и просто развернуть это все на IP-камеры и отладить.

Ну и оставшаяся мелочь: мы решили написать этот код на Rust. Rust был выбран в качестве эксперимента из-за его удивительного свойства: гарантия целостности памяти во время компиляции при отсутствии среды выполнения.

Это означает, что мы можем рассчитывать на возможность контролировать распределение памяти, что очень важно, учитывая ограничения ресурсов.

Почему не работают Go, Erlang или Java/C#? Потому что у IP-камеры есть флешка на 8 мегабайт и 128 мегабайт памяти, половина из которой отведена у ядра под нужды видео.

Понятно, что камеры бывают разные, но всегда стараются сделать минимум, чтобы не завышать стоимость без надобности.

На одной камере мы увидели флешку на 64 мегабайта, туда конечно можно расширить, но вполне хватит и совсем крохотных флешек.

Итак, мы видим обычную картинку на дешевом фотоаппарате за 3000 рублей:

   

# free total used free shared buffers cached Mem: 60128 17376 42752 0 2708 4416 -/+ buffers/cache: 10252 49876 Swap: 0 0 0 # cat /proc/cpuinfo Processor

Теги: #ip камера #Rust #оборудование #встроенное #Rust
Вместе с данным постом часто просматривают: