MISRA: повышение безопасности встраиваемых систем через SAST
Михаил Гельвих, 01/07/25
Встраиваемые системы управляют автомобилями, медицинским оборудованием и промышленными объектами, где ошибки могут приводить не только к финансовым потерям, но и угрожать жизням людей. Рассмотрим, как стандарт MISRA и статические анализаторы, такие как PVS-Studio, помогают обеспечить надежность и безопасность кода в критически важных приложениях.
Автор: Михаил Гельвих, руководитель отдела технического сопровождения ООО “ПВС”
Почему требования к ПО для встраиваемых систем так высоки
Встраиваемые системы фундаментально отличаются от обычного программного обеспечения. Они функционируют в условиях жестких ресурсных ограничений: память часто измеряется килобайтами, вычислительная мощность минимальна, а энергопотребление строго лимитировано, особенно для автономных устройств.
Критическая особенность – работа в режиме реального времени с детерминированным поведением. Задержка реакции системы даже на миллисекунды может иметь катастрофические последствия. Например, в системах управления торможением автомобиля или в кардиостимуляторах временные характеристики не менее важны, чем корректность вычислений.
В отличие от обычного ПО, встраиваемые системы напрямую взаимодействуют с физическим миром через датчики и исполнительные механизмы, что требует особого внимания к обработке входных данных и контролю выходных сигналов. Ошибка в коде может привести не к "синему экрану смерти", а к реальной аварии. Кроме того, типичный срок службы встраиваемой системы может достигать 10–20 лет без возможности обновления. Это означает, что все потенциальные проблемы должны быть выявлены и устранены до начала эксплуатации.
В дополнение ко всему, эти системы часто эксплуатируются в экстремальных условиях – высокие температуры, вибрация, электромагнитные помехи, – всё это требует исключительной надежности программного обеспечения. Как же ее обеспечить?
Стандарт MISRA: что это такое и для чего он нужен?
Для решения проблемы надежности программного обеспечения в 1994 г. была создана организация MISRA, которая выпустила одноименный стандарт. Первоначальной целью организации была разработка руководства по созданию безопасного программного обеспечения для автомобильных электронных систем.
Успех MISRA объясняется практическим подходом: стандарт не изобретал новых языков программирования, а лишь определял безопасное подмножество существующих языков C и С++, исключая потенциально опасные конструкции и неоднозначное поведение.
MISRA использует четкую иерархию правил по степени их важности:
- обязательные (mandatory) – нарушение этих правил недопустимо, поскольку ведет к серьезным рискам;
- необходимые (required) – допускаются исключения, но каждое отклонение должно быть документировано;
- рекомендуемые (advisory) – отражают лучшие практики, соблюдение которых улучшает качество кода, однако они не являются обязательными.
Уникальная особенность MISRA – концепция документированных отклонений (deviations). Признавая невозможность слепого следования всем правилам в реальных проектах, стандарт требует формального процесса для каждого отклонения: составления отчетов (MISRA Compliance), анализа рисков, обоснования необходимости и утверждения ответственным лицом.
Стандарт MISRA делает акцент на использование средств автоматизированной проверки исходного кода, таких как статические анализаторы, классифицируя каждое правило как разрешимое (decidable) или неразрешимое (undecidable). Разрешимые правила позволяют статическим анализаторам однозначно определить соответствие, тогда как неразрешимые указывают на случаи, требующие дополнительной проверки со стороны разработчиков.
Рис. 1. Пример отчета MISRA Compliance, полученный с помощью PVS-Studio
Ключевые ограничения стандарта MISRA
Стандарт MISRA вводит ряд строгих ограничений, направленных на повышение безопасности и надежности программного кода. Рассмотрим основные из них.
Работа с указателями, памятью и битовыми операциями
Запрещена арифметика указателей, преобразование типов и динамическое выделение памяти, что вынуждает использовать статические структуры и итеративные алгоритмы. Битовые операции разрешены только для беззнаковых типов, что исключает неявные преобразования с потерей точности.
Ограничение на использование препроцессора и форматных строк
Препроцессорные директивы применяются лишь для включения заголовков, макросы должны быть оформлены с обязательным использованием скобок и без переменного числа аргументов. Аналогичные строгие требования распространяются и на форматные строки для предотвращения атак, связанных с их неправильной обработкой.
Организация кода и детерминированное поведение
Код должен быть четко структурирован: имена переменных – уникальные, модули – логически разделены. Исключаются конструкции с неопределенным поведением (например, использование неинициализированных переменных, выход за границы массивов, переполнение знаковых целых чисел), а функции ограничиваются по числу точек выхода, глубине вложенности и цикломатической сложности.
Благодаря этим ограничениям MISRA эффективно предотвращает большинство распространенных дефектов безопасности, обеспечивая высокий уровень защиты для критически важных систем.
Рис. 2. Просмотр MISRA предупреждений PVS-Studio в плагине для IDE Qt Creator
Зачем российским компаниям внедрять стандарт в разработку?
Стандарт накладывает большое количество довольно строгих ограничений. Что же получают российские компании в обмен на такие "оковы", кроме и так понятного повышения надежности и безопасности?
Международная интеграция и экспорт
Несмотря на санкционные ограничения и сложности с международной сертификацией, наличие сертификата MISRA остается мощным конкурентным преимуществом, поскольку клиенты ориентируются на признанные международные стандарты качества.
Импортозамещение и технологический суверенитет
Сертификация по MISRA позволяет демонстрировать соответствие мировым требованиям и способствует созданию отечественного ПО, способного конкурировать с зарубежными аналогами, что повышает доверие на внутреннем рынке.
Доступ к международному опыту
Использование проверенных методик и инструментов, основанных на международных стандартах, критически важно для создания безопасных и надежных систем.
Выход на новые рынки
Соответствие MISRA открывает возможности для выхода на рынки Азии и Ближнего Востока, усиливая конкурентоспособность российских разработок.
Упрощение взаимодействия с регуляторами
При наличии внутренних требований, зачастую аналогичных рекомендациям MISRA, применение стандарта облегчает работу с национальными заказчиками и регуляторами.
Таким образом, интеграция и сертификация по стандарту MISRA становится стратегическим инструментом, позволяющим российским компаниям не только совершенствовать процессы разработки и повышать надежность продукции, но и уверенно конкурировать как на внутреннем, так и на международном рынках.
Практические советы по внедрению MISRA
Внедрение MISRA требует комплексного подхода к обеспечению безопасности и качества кода, поскольку ручное отслеживание соблюдения всех правил практически невозможно. Поэтому крайне важно интегрировать эффективный статический анализатор, который поддерживает актуальную версию стандарта и обеспечивает оперативное выявление нарушений. Автоматизированная проверка на ранних этапах разработки позволяет значительно сократить трудозатраты и повысить надежность проекта.
Российский статический анализатор PVS-Studio (запись в едином реестре российского ПО No 9837) полностью соответствует указанным требованиям. Он автоматизирует рутинную проверку множества аспектов стандарта, позволяя разработчикам сосредоточиться на действительно критичных задачах. Особое внимание заслуживает обширный набор диагностических правил, включающих как правила общего назначения, так и правила микрооптимизаций.
Первый набор позволяет обнаруживать потенциальные уязвимости и критические ошибки (согласно ГОСТ Р 71207–2024), а набор правил микрооптимизаций направлен на выявление проблемных мест в коде и улучшение его производительности.
Следующим этапом становится выбор подмножества правил с учетом специфики проекта. В этом плане стандарт позволяет проявить гибкость: вы вправе исключить неприменимые для вашего проекта правила или изменить их уровень, что поможет адаптировать процесс проверки к уникальным особенностям и требованиям конкретной системы.
Интеграция MISRA в процесс разработки предполагает включение автоматизированных проверок в CI/CD-конвейер, что обеспечивает обнаружение проблем на самых ранних этапах. Автоматизированный анализ в сочетании с ручным код-ревью создает мощный механизм контроля, позволяющий гарантировать соответствие стандарту и поддерживать высокое качество кода.
Наконец, успех проекта во многом зависит от обучения команды. Регулярные образовательные программы, создание внутренних руководств и назначение ответственных за соблюдение стандартов – помогают разработчикам быстро освоить требования MISRA и применять их на практике.
Предложите вашей команде разработки бесплатно попробовать PVS-Studio в течение месяца по промокоду asutp_itsec и на практике оценить возможности инструмента по выявлению дефектов безопасности в соответствии со стандартом MISRA.