Статический анализ кода STM32: практический пример

Ниже представлен отчет о статическом анализе кода нашего аппаратного ключа администратора.
Приветствую, коллеги!
Хочу поделиться весьма специфическим опытом анализа исходного кода. Предвидя скепсис опытных инженеров: да, этот путь тернист и полон нюансов 😊
Суть задачи была проста: требовалось защитить консоль управления нашего оборудования, использующую стандартный USB-UART мост на базе FT232. Традиционные методы аутентификации через логин и пароль оказались неприемлемы из-за избыточных корпоративных требований: регулярная смена паролей, сложная система логирования, жесткие критерии к длине и составу символов (с обязательным сочетанием всех типов знаков) и прочая бюрократия. Вместо того чтобы пытаться подстроить ПО под эти формальности, мы решили вопрос на аппаратном уровне.
Решением стал аппаратный ключ администратора (АКА). Устройство разрывает USB-соединение между АРМ и контроллером, общаясь по свободным линиям с использованием протокола challenge-response. Общий секрет не передается напрямую, что делает перехват данных бессмысленным. Кому интересны технические детали реализации — готов обсудить в комментариях или личных сообщениях.
В условиях сжатых сроков разработку ключа доверили стажеру, который в качестве платформы выбрал «BluePill» на базе STM32. Несмотря на определенную «любительскую» репутацию этой связки, решение оказалось удивительно живучим: с момента внедрения не было зафиксировано ни одного сбоя. Да, использование Arduino для промышленных задач — решение спорное, но оно выполнило свою функцию.
Перейдем к сути — анализу кода. Заказчики потребовали верифицировать качество ПО, что стало для нас неожиданным вызовом. Мы рассчитывали, что наличие открытых исходников упростит задачу, но на деле возникли сложности.
Выбор инструментов для статического анализа был невелик: Cppcheck против PVS Studio. Последний — продукт мощный, но платный и ориентированный на глубокий поиск специфических ошибок, что в наших условиях казалось избыточным. Мы остановились на бесплатном Cppcheck.
Преимущества Cppcheck для нашей задачи:
-
Поддержка архитектуры ARM Cortex M.
-
Толерантность к нетипичному синтаксису, характерному для встраиваемых систем.
-
Автономность: для анализа не требуется процесс компиляции, достаточно исходного кода.
-
Эффективное обнаружение критических уязвимостей: разыменование неинициализированных указателей, выход за границы массивов, утечки памяти.
Однако просто просканировать папку проекта с Arduino IDE было недостаточно. Первая проблема заключается в специфическом «диалекте» Wiring, перегруженном макросами, которые анализатор не всегда распознает корректно.
Вторая сложность — пути к заголовочным файлам. При попытке проанализировать проект на рабочей машине IDE «подтянула» тысячи лишних зависимостей от других плат, превращая лог в бесконечный список. В итоге мы создали «чистую» среду разработки с минимальным набором библиотек, сократив количество путей до двух тысяч. Это значительно упростило жизнь.
В-третьих, необходимо использовать ключ `—platform=arm32-wchar_t4`, который задает корректные настройки для архитектуры Cortex-M.
И последнее: в ряде мест мы использовали директивы `// cppcheck-suppress`, чтобы исключить заведомо корректные, но запутанные для анализатора участки кода. Это эффективнее, чем тратить время на бесконечные споры с инструментом.
Итог анализа оказался продуктивным: Cppcheck выявил десяток реальных ошибок, которые мы успешно устранили. Примечательно, что все недочеты были в нашем коде — библиотеки из состава STM32Duino оказались вполне надежными.
Резюмируя: для серьезных, масштабных Embedded-проектов лучше использовать PVS Studio, но для локальных задач Cppcheck — вполне достойный и бесплатный инструмент.
Для наглядности прикладываю рендер обратной стороны устройства. Готов ответить на любые вопросы!

ИИ играет в «Данетки» и «Поле чудес»: Яндекс создал тест на логику для нейросетей
Скрытая опасность: марсоход NASA Perseverance определил, какие риски Марс таит для астронавтов
Huawei Enjoy 100 Pro Max станет смартфоном компании с рекордно ёмким аккумулятором
Xiaomi 18 Pro и 18 Pro Max скоро выйдут на глобальный рынок: устройства уже засветились в итальянском магазине
В работе Telegram произошёл сбой
Xiaomi представила в Европе фитнес-браслет Smart Band 11, который работает без подзарядки до 21 дня
Щёлк — и экран треснул: Apple признала дефект дисплеев iPhone Duo
Минцифры предупредило москвичей о трёх днях нестабильной работы мобильного интернета