Как предотвратить взлом Arduino, подключенного к Интернету?

У меня есть Arduino (с датчиками окружающей среды, выполняющими измерения), подключенный к Интернету через Ethernet. Его можно взломать? Может ли кто-нибудь получить к нему доступ через Интернет и загрузить свой собственный код C/C++? Если да, то как я могу предотвратить это?

Обновление (03/03/2023): Последнее соображение: предположим, что я закрепил USB-разъем, и никто не может получить к нему доступ. Однако я использую последовательный интерфейс Arduino MEGA 2560. Итак, Serial_1 постоянно читает. Может ли кто-нибудь с физическим доступом к Arduino внедрить вредоносный код через Serial_1, чтобы изменить код внутри моего Arduino и получить доступ к информации?

, 👍1

Обсуждение

есть ли у него загрузчик Ethernet или библиотека ArduinoOTA?, @Juraj

Я использую Arduino MEGA 2560 R3 + оригинальный Arduino Ethernet Shield 2.... если это поможет..., @just_learning

В зависимости от архитектуры вашего решения риск может заключаться в том, что ваша домашняя сеть будет подключена к Интернету. Если ваша система Arduino предназначена для приема входящего трафика из Интернета, скажем, на ней работает веб-сервер, и вы настроили переадресацию портов на своем маршрутизаторе для поддержки этого, то вы подвергаете свою сеть такому риску., @6v6gt


1 ответ


Лучший ответ:

1

Это зависит от того, что вы считаете "взломанным".

Заботитесь ли вы о том, чтобы кто-то читал данные или изменял их по пути к цели? Или вы предоставляете конечные точки для запуска чего-то в вашем проекте из Интернета, что только вы можете сделать? Затем вам нужно подумать об аутентификации и шифровании. Хотя я предполагаю, что эти данные будут опубликованы в любом случае, так что это не большая проблема. Но вы должны записывать каждую конечную точку, которую вы предоставляете Интернету, и каждый запрос, который вы делаете. Затем решите, какой уровень безопасности вам нужен по отдельности. Открытые конечные точки легко найти, и вы должны сами решить, могут ли другие использовать их.

Если вы имеете в виду проникновение в устройство и выполнение оттуда вредоносного кода: устройства Интернета вещей часто уязвимы по двум причинам. У них часто есть ОС (например, небольшая ОС Linux), которая плохо защищена (часто с использованием стандартного пароля). И они часто получают обновления через Интернет. Если кто-то сможет перехватить процесс обновления, может быть доставлен вредоносный код. У Arduino нет ОС, так что это не проблема. И угнать процесс обновления будет невозможно, если вы не предоставите возможность обновления через сеть. Это немного усложняет обновление вашего кода (поскольку вам нужно подключить Arduino через USB или что-то подобное, чтобы запрограммировать его), но делает его более безопасным. Таким образом, никто (даже вы) не сможет внедрить вредоносный код в ваш проект без физического доступа к Arduino. В ответ на комментарий Jurajs: обновление по сети обычно выполняется загрузчиком Ethernet или библиотекой ArduinoOTA (обновления по воздуху). Если вы не используете эти или подобные проекты, то в этом отношении вы будете в безопасности.


С незнакомцами, имеющими физический доступ к устройству, дело обстоит иначе. Чтобы перепрограммировать Arduino, потребуется доступ к последовательному порту (RX0 и TX0) и возможность сброса Arduino (либо контакт сброса, либо способ его включения и выключения), либо доступ к контактам ISP и контакту сброса.

Если вы можете защитить саму плату Arduino от физического доступа и предоставить доступ только к интерфейсу Serial1 и заземлению/5V, то вы будете в безопасности, поскольку загрузчик прослушивает только Serial (RX0 и TX0). Но имейте в виду, что кто-то все равно может взломать ваш проект грубой силой — в зависимости от того, как вы его физически защитили. В этот момент ничто не может помешать им перезаписать ваш код. Только вы можете оценить, насколько велика вероятность этого и насколько это плохо.

Еще один момент: если кому-то удастся взломать ваш проект, он может прочитать программу и протолкнуть ее через деассемблер. Это не дает им код C++ - они не видят код C++, только ассемблер и не имеют значимых имен переменных - но если они достаточно определены, они могут прочитать учетные данные, которые вы могли жестко закодировать или сохранить в EEPROM. Хотя, особенно для датчиков окружающей среды, я бы сказал, что вероятность того, что кто-то пойдет на такое, очень мала. Если вы считаете, что опасность достаточно велика для некоторых неудобств, вы можете взглянуть на защиту кода (защита памяти программы от чтения), хотя это все еще не полностью блокирует перепрограммирование.

В целом: предотвращение физического доступа — важный шаг в обеспечении безопасности. Вы сами должны оценить, насколько высокий уровень безопасности вам действительно нужен для вашего проекта.

,

Я обновил свой вопрос... пожалуйста, прочитайте его еще раз!! Всем большое спасибо за помощь..., @just_learning

@just_learning Я добавил несколько абзацев об этом в свой ответ, @chrisl