Безопасность пароля WiFi

Есть ли какие-либо рекомендации по безопасности паролей? Следующее взято из учебника по Wi-Fi.

#include <SPI.h>
#include <WiFi.h>

char ssid[] = "yourNetwork"; // ваш сетевой SSID (имя) 
char pass[] = "secretPassword"; // ваш сетевой пароль
int keyIndex = 0; // номер индекса сетевого ключа (требуется только для WEP)

Хотя я согласен с тем, что учебник предназначен для изучения того, как использовать щит, я бы предположил, что жесткое кодирование пароля в скетч оставляет это открытым для злоумышленников. Так ли это на самом деле? Если да, то существуют ли какие-либо стратегии для ужесточения скетча, например, с помощью зашифрованного хранилища?

Я относительный новичок в физических вычислениях и Arduino, так что извините, если я упускаю из виду что-то очевидное.

, 👍13

Обсуждение

Любая система, которая должна передать пароль между MCU и стандартным модулем Wi-Fi в *cleartext*, легко открыта для атаки любым, кто имеет физический доступ, просто обнюхивая последовательный, spi или любой другой канал между ними. Инструменты для этого продаются за $6-24., @Chris Stratton

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

На фронте избегания жесткого кодирования я только что нашел следующее: https://www.instructables.com/id/Avoid-Hard-Coding-WiFi-Credentials-on-Your-ESP8266/ Он в основном создает свою собственную сеть для решения проблемы начальной загрузки. Что делает это хорошим способом упаковать устройство и для кого-то другого., @Dilum Ranatunga

Я не так обеспокоен тем, что кто-то взламывает аппаратное обеспечение на моем столе, чтобы получить пароль Wi-Fi. Я обеспокоен последствиями совместного использования кода жесткого кодирования пароля в источник. Есть ли способ читать из переменных среды вместо жесткого кодирования, например? Тогда я могу поделиться своими скетчами на github без беспокойства., @Matt Manuel


2 ответа


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

12

На самом деле вы вступаете в очень сложную и трудную область.

Да, наличие простого текстового пароля в вашем скетче-это риск. Он хранится во флэш-памяти в виде обычного текста. Если злоумышленник может получить доступ к содержимому флэш-памяти с помощью каких-либо средств (какими бы они ни были), он может получить этот пароль Wi-Fi.

Вы могли бы подумать, что ответом будет шифрование пароля, но это не так. Проблема с зашифрованным паролем, подобным этому, заключается в том, что его необходимо расшифровать, чтобы использовать его. Это означает, что и зашифрованный пароль, и ключ шифрования хранятся вместе во флэш-памяти. Если вы можете получить одно, вы можете получить другое, и, следовательно, шифрование недействительно. Безопасность шифрования зависит от полного разделения зашифрованных данных и ключа, используемого для их шифрования/дешифрования. В конце концов, вы же не оставляете ключ от своего дома в замке входной двери, когда выходите, не так ли? Это точно то же самое.

Так что же вы делаете?

Что ж, существует множество различных подходов к обеспечению безопасности. В этом случае есть одна конкретная точка зрения, которая работает лучше всего:

Безопасность Через Неизвестность

Ваша система (в значительной степени) уникальна. Никто, кроме вас, точно не знает, что он делает и как он это делает, или как вы с ним взаимодействуете. Случайному наблюдателю не очевидно, что это такое и что с этим можно сделать. Это означает, что они не будут знать, как проникнуть в него.

В большинстве случаев использование уязвимостей в системах зависит от того, что эти системы являются повсеместными - то есть повсюду; их легко получить. Короче говоря, легко выяснить, что это такое, как они работают, и даже в определенной степени перепроектировать их. Злоумышленники не смогут сделать это с вашей системой, так как вы единственный человек в мире, владеющий ею.

Однако это далеко не идеально, и вы не должны полагаться только на безопасность из-за Неизвестности.

Простое запутывание пароля (не фактическое шифрование, а просто сохранение его неочевидным способом) может помочь, так как в этом случае нелегко увидеть, где в дампе памяти будет находиться пароль. Разбить его и разбросать по всему помещению тоже может быть полезно.

В принципе, нет простого ответа, кроме как максимально затруднить злоумышленнику поиск конфиденциальных вещей и никому не рассказывать, что вы сделали, чтобы скрыть это ;)

,

Уровень-до Мадженко за тщательную разбивку. Я видел некоторые крипто-библиотеки для arduino, и ваша единственная забота-это ключ для вашей строки. Я использовал некоторые биты, уникальные для систем (и которые можно было извлечь из C, когда-то просто имя пользователя и имя хоста), когда мне приходилось запутывать строки, но я не думаю, что это хорошая практика. Если нападающие (которые нападают на ваш arduino, возможно, внутри вашего дома?) сбросьте его память, у вас, вероятно, есть более серьезные проблемы, требующие дробовика. Но если вы настаиваете, я рекомендую найти несколько битов, уникальных для mcu (возможно, серийный номер), и с их помощью проверить ключ wpa., @user400344


3

К сожалению, в настоящее время у меня нет точного ответа на ваш вопрос, но я хотел бы предупредить вас о Безопасности через подход Неизвестности, предложенный Майенко. Этот подход может быть разумным для чего-то очень домашнего, но он сильно обескураживает исследователей и экспертов.

Например, если вы взглянете на Руководство по общей безопасности сервера, вы прочитаете между "Принципом безопасности сервера":

Открытая конструкция—Система: безопасность не должна зависеть от секретности реализации или ее компонентов.

Поэтому старайтесь всегда использовать стандартный подход, если можете.

,