Во встраиваемых устройствах есть риск извлечения SD карты и использования её для посторонних целей. В этом случае помогает аппаратный пароль SD карты. Установка пароля не даёт проводить с картой никаких операций. Обычные PC такую карту просто не видят.
В начальном загрузчике модуля S7V30 с микроконтроллером Synergy S7G2 на базе Azure RTOS реализован механизм установки и снятия паролей с SD карт. В этой статье покажу как использовать встроенный веб-сервер Azure RTOS с TLS для операций с SD картой.
Как ставится пароль на SD карту
В спецификации физического уровня SD карт(Physical Layer Simplified Specification) в параграфе 4.3.7 Card Lock/Unlock operation есть описание установки и снятия пароля . Установка/снятие пароля производятся командой CMD42. Пароль может содержать до 16 байт. Пароль записывается в энергонезависимую память карты. Командой CMD42 выполняется как запись и стирание пароля, так и снятие защиты и установка защиты.
Если в карту записан пароль, то после подачи питания его надо ввести командой CMD42, чтобы карта начала нормально функционировать. Данные на карте после ввода пароля с флагом снятия зашиты остаются доступны до выключения питания. Если пароль от карты утерян, той же командой CMD42 остается возможность полностью стереть карту с потерей форматирования . Однако есть карты, которые и на команду полного стирания могут содержать отдельный пароль.
Драйвер SD карты Azure RTOS на Synergy в модуле S7V30 был модифицирован таким образом, чтобы при каждом включении питания проверять установку пароля на SD карте и снятие защиты с карты в случае если она запаролена. В начальном загрузчике был добавлен параметр для хранения пароля SD карты. Исходные тексты проекта доступны в репозитарии начального загрузчика. Параметры загрузчика хранятся во внутренней EEPROM чипа в формате JSON в сжатом и сдублированном виде.
Почему нужно WEB приложение
В ходе разработки модуля S7V30 для диагностики и выполнения операций обычно применяется эмулятор терминала VT100. Поэтому установка/снятие пароля и полного стирания карты были в начале реализованы в режиме терминала. Но работа с терминалом требует соответствующей квалификации. Для большей доступности было решено реализовать операции с SD картой через WEB приложение. Для предотвращения утечек пароля в сеть наш веб-сервер защищён протоколом с шифрованием и дополнительной авторизацией.
Сложность представляет то, что все файлы WEB приложения находятся на той же защищаемой SD карте (применяется урезанная версия модуля без SPI Flash). Из-за этого команды полного стирания карты в WEB приложении нет, но она есть в терминале.
Про особенности реализации защищённого веб-сервера из пакета Azure RTOS NetX Duo рассказано в этой статье. Встроенный в модуль веб-сервер работает с быстрым аппаратным шифрованием и протоколами TLS 1.2 или 1.3 (настраивается при компиляции). Кроме этого включена базовая аутентификация в http севере стека NetX Duo, т.е. при заходе в приложение нужно ввести пароль. Проект в репозитарии хранится с само-подписанным сертификатом. Чтобы браузеры на PC не выкидывали постоянно предупреждение об этом, сертификат надо явно инсталлировать в систему компьютера.
Почему снова выбран JQuery mobile для WEB приложения
С поры первой публикации о применении jQuery mobile на модуле с Synergy версии фреймворка уже ушли далеко вперёд. В данном случае применяем версию 1.4.5.
JQuery mobile позволяет разрабатывать одно-файловые приложения с современным отзывчивым стилем адаптированным под мобильные дивайсы.
Всё приложение в одном файле облегчает работу встроенного веб-сервера, поскольку убирает массу повторных запросов при переходе между страницами.
Сам jQuery mobile реализован в нескольких сравнительно небольших .js и .css файлах. Это важно, поскольку экономит трафик и память встраиваемых устройств. На сайте проекта jQuery mobile есть возможность создать кастомные файлы стилей и скриптов с ещё более уменьшенным размером.
Привлекает возможность стилизации своих приложений используя билдер стилей jQuery mobile. Я воспользовался данной возможностью и создал свой файл стилей S7V30_theme.min.css размером всего в 18 килобайт.
jQuery mobile по прежнему хорошо поддерживается в Dreamweaver. В этой среде разработки одно-файловые приложения на jQuery mobile можно разрабатывать и визуализировать постранично. В отличие от обычных редакторов, где страницы приложения сливаются в одно сплошное нагромождение виджетов.
В последнее время появилось дополнительное преимущество jQuery mobile и самого базового фреймворка jQuery - это хорошая поддержка со стороны ChatGPT. В ChatGPT можно найти ответы на все вопросы связанные с разработкой на jQuery mobile. Правда в области embedded разработки у ChatGPT ещё получается плохо.
Поскольку модуль S7V30 не так уж и слаб, я не стал ужимать файлы jQuery mobile до минимума и помещать их во внутреннюю Flash микроконтроллера, но при желании это не трудно сделать.
Как это работает
Содержимое html файла приложения можно посмотреть здесь. В jQuery mobile все делается с помощью AJAX, поэтому масса специальных классов и в формах не используются обычные кнопки типа submit.
Прием и обработка сервером методов POST и GET производится в этом файле. Работа непосредственно с SD картой реализована здесь. Установка пароля или смена пароля не приводят к блокировке карты немедленно. Карта окажется заблокированной когда с неё снимут и снова подключат питание. Начальный загрузчик при выполнения программного рестарта принудительно выключает и включает питание у SD карты. Таким образом подачей команды рестарта из приложения можно проверить корректность холодного запуска карты и разблокировку. Пароль может быть любой длинны от 1 до 16 символов из перечня допустимых символов (перечень придумал я сам исходя из соображений удобства)
Для более полного анализа SD карты кнопкой Get SD card CSD на экран выводится содержимое структуры CSD карты. В этой структуре закодированы основные физические характеристики карты. Установка и сброс пароля на содержимое CSD не влияют.
Кроме функции работы с SD картой через данное приложение можно загрузить новую прошивку в устройство. Как было сказано в предыдущей статье, прошивки должны быть упакованы в специальный защищённый формат.
Для целей отладки в настройках можно отключить шифрование TLS у WEB сервера. Настройки доступны через терминал. Доступ к терминалу возможен через VCOM порт USB или через Telnet. В Telnet возможны подключения через Wi-Fi, RNDIS, CDC ECM.
Поскольку загрузчик оснащен протоколом mDNS, то к модулю в локальной сети можно обращаться сразу по доменному имени S7V30 без необходимости знать IP адрес устройства.
Репозитарий проектов модуля S7V30 находится здесь