1 апреля 2024 года введён в действие новый ГОСТ "Статический анализ программного обеспечения". Если в ГОСТ Р 56939–2016 говорится о необходимости использования статического анализа при разработке безопасного программного обеспечения (РБПО), то ГОСТ Р 71207–2024 уточняет, что именно это означает.
В стандарте:
- перечислены требования к инструментам статического анализа;
- указано, какие ошибки они должны находить;
- какие технологии использовать;
- описан порядок внедрения в процесс разработки;
- описан процесс регулярного использования;
- и так далее.
Информация в ГОСТ очень плотная, и её тяжело сразу воспринять, если вы ранее не имели дело со статическим анализом кода и РБПО. Поэтому я подготовил и провёл цикл из 5 вебинаров, где разобрал различные аспекты ГОСТ и примерами пояснил некоторых термины.
Вебинары вытекают один из другого, но в принципе они достаточно независимые, и вы можете начать знакомиться с новым ГОСТ с просмотра любого из них. Но обо всём по порядку.
ГОСТ Р 71207–2024
Существует ГОСТ Р 56939–2016 "Защита информации. Разработка безопасного программного обеспечения. Общие требования". Кстати, в этом году планируется выход его нового варианта.
В этом стандарте говорится, что РБПО включает в себя выполнение статического анализа кода. Однако что именно означает статический анализа кода? Правильно ли он используется? На эти вопросы как раз и отвечает новый стандарт ГОСТ Р 71207–2024.
Полное название — ГОСТ Р 71207-2024: Защита информации. Разработка безопасного программного обеспечения. Статический анализ программного обеспечения. Общие требования.
Введён в действие 01.04.2024. Введён впервые. Разработан ФСТЭК России и ИСП РАН.
Стандарт применяется совместно с ГОСТ Р 56939 и устанавливает требования к:
- внедрению и выполнению статического анализа ПО;
- методам статического анализа;
- инструментам анализа;
- специалистам, участвующим в анализе;
- методике проверки соответствия статических анализаторов ГОСТ (испытательными лабораториями).
Если вы хотите лучше разобраться в теме РБПО, то могу предложить, например, серию учебных курсов "Разработка безопасного программного обеспечения" от учебного центра "МАСКОМ". Я же рассказываю только про один из аспектов РБПО, связанный с анализом кода.
PVS-Studio
PVS-Studio — это статический анализатор кода для языков C, C++, C#, Java. Входит в реестр отечественного ПО: N 9837.
Я, как один из основателей PVS-Studio, естественно не мог пройти мимо появления ГОСТ Р 71207–2024. Как минимум нам нужно было его внимательно прочитать, чтобы узнать, какие усовершенствования требуются анализатору.
И действительно, по итогам изучения ГОСТ появился список задач по доработкам. Например, выяснилось, что существовавший в PVS-Studio механизм аннотаций функций не позволяет задавать процедуры-источники и процедуры-стоки чувствительных данных. Такая возможность конфигурирования требуется согласно ГОСТ, если инструмент реализует анализ помеченных данных.
Или, например, ГОСТ вводит такое важно понятие, как критическая ошибка. Вернее, важно не само понятие, а то, что стандарт перечисляет конкретные типы ошибок, которые относятся к критическим и которые должны в обязательном порядке выявляться анализаторами кода. PVS-Studio умеет выявлять критические ошибки, однако не было возможности включить фильтр, чтобы посмотреть именно их. Это логично: пока не было ГОСТ, не было списка, а следовательно и не было функции для их фильтрации.
Можно сказать, что теперь инструментальное средство PVS-Studio разрабатывается с учётом требований, предъявляемых к статическим анализаторам в ГОСТ Р 71207–2024.
Чтобы запланировать список улучшений в PVS-Studio, мне пришлось внимательно ознакомиться со стандартом. Полученными знаниями я решил поделиться в серии из пяти вебинаров. Думаю, не удивительно, что информация в них представлена глазами разработчика статических анализаторов кода. В вебинарах я не только рассказываю про ГОСТ, но и рассматриваю множество примеров, демонстрирующих разные типы ошибок или технологии их поиска.
Если вы не уверены, что готовы смотреть пять вебинаров, то можете посмотреть этот обзорный доклад.
Конференция Giga Conf 2024. Андрей Карпов. Использование статического анализатора в разработке безопасного программного обеспечения (ГОСТ Р 71207-2024) на примере PVS-Studio. (презентация)
В принципе в нём всё тоже самое, только более крупными мазками. Невозможно в один 35-минутный доклад вместить такую большую тему. В вебинарах это рассматривается в более спокойном темпе и в пять раз подробнее.
Вебинар N1. Общее описание и актуальность
В первом вебинаре я рассказываю, почему полезно, что сформулировали понятие статического анализа кода. Немного баек про его неправильное использование и использование устаревших инструментов. Рассмотрим некоторые базовые требования, описанные в ГОСТ к анализаторам и документации.
Вебинар PVS-Studio. Андрей Карпов. ГОСТ Р 71207–2024. Статический анализ программного обеспечения. Общее описание и актуальность. (презентация)
Вебинар N2. Терминология
ГОСТ даёт очень краткие определения многих терминов, и это описание может тяжело восприниматься неподготовленным читателем. В вебинаре я постарался раскрыть смысл наиболее важных на мой взгляд терминов и сопроводить их поясняющими примерами. Некоторые термины, которые будут рассмотрены:
- анализ потока данных;
- анализ помеченных данных;
- сигнатурный анализ;
- межпроцедурный контекстно-чувствительный анализ;
- модельный вариант (ошибки);
- критическая ошибка;
- и так далее.
Вебинар PVS-Studio. Андрей Карпов. ГОСТ Р 71207–2024 — Статический анализ программного обеспечения. Терминология. (презентация)
Особое место занимают критические ошибки, поэтому я посвятил им отдельный вебинар. Однако некоторые другие термины не менее интересны, и о них тоже хочется поговорить подробнее. Например, я подал заявку на конференцию SafeCode с докладом "Модельные варианты ошибок, или как статические анализаторы находят ошибки, которые не могут искать".
SafeCode 2024 Autumn. Конференция по безопасности приложений. 30 октября. Online.
Конференция о современных практиках AppSec для разработчиков. Здесь действующие специалисты делятся инструментами и практикой безопасной разработки.
Надеюсь, заявку примут. А пока, пользуясь случаем, приглашаю послушать мой предыдущий доклад с весенней SafeCode: "Ошибки в коде: ожидания и реальность".
Вебинар N3. Критические ошибки
На примерах разобрал те критические ошибки, которые должны выявляться статическими анализаторами кода. Критические ошибки — это дефекты в коде, которые анализаторы должны обнаруживать в первую очередь. Наличие таких ошибок является потенциальной угрозой безопасной работе приложений (потенциальными уязвимостями). Такие названия, как "деление на ноль", говорят сами за себя. Но для неподготовленного читателя стандарта может быть непонятно, как именно выглядят, например, ошибки некорректного совместного использования знаковых и беззнаковых чисел.
Вебинар PVS-Studio. Андрей Карпов. ГОСТ Р 71207–2024 — Статический анализ программного обеспечения. Критические ошибки. (презентация)
Для интерпретируемых языков критические ошибки это:
- ошибки непроверенного использования чувствительных данных;
- ошибки некорректного использования системных процедур и интерфейсов, связанных с обеспечением информационной безопасности;
- ошибки при работе с многопоточными примитивами.
Для компилируемых языков:
- ошибки непроверенного использования чувствительных данных;
- ошибки некорректного использования системных процедур и интерфейсов, связанных с обеспечением информационной безопасности;
- ошибки при работе с многопоточными примитивами;
- ошибки целочисленного переполнения и некорректного совместного использования знаковых и беззнаковых чисел;
- ошибки переполнения буфера.
Дополнительно для C и C++:
- ошибки разыменования нулевого указателя;
- ошибки деления на ноль;
- ошибки управления динамической памятью;
- ошибки использования форматной строки;
- ошибки использования неинициализированных переменных;
- ошибки утечек памяти, незакрытых файловых дескрипторов и дескрипторов сетевых соединений.
Вебинар N4. Технологии анализа кода
Чтобы обеспечить поиск критических ошибок на высоком уровне, стандарт описывает методы анализа, которые должны быть реализованы в статических анализаторах. Посмотрели на практических примерах, как работают технологии статического анализа, и какие ошибки можно с их помощью выявлять:
- анализ иерархии классов;
- внутрипроцедурный анализ потоков данных и управления;
- межмодульный контекстно-чувствительный анализ потока данных;
- статистический анализ (да-да, именно статистический :);
- и так далее.
Вебинар PVS-Studio. Андрей Карпов. ГОСТ Р 71207–2024 — Статический анализ программного обеспечения. Технологии анализа кода. (презентация)
Вебинар N5. Процессы
Вебинар о процессах внедрения и использования инструментов статического анализа кода. Достаточно ли регулярно запускать анализатор, но не смотреть на отчёты? Конечно, нет. Хотя, к сожалению, такое встречается в жизни. Стандарт регламентирует, когда и кем предупреждения должны просматриваться, и в какие сроки ошибки должны исправляться. Рассмотрели эти и другие аспекты регулярного использования статических анализаторов в процессе РБПО.
Вебинар PVS-Studio. Андрей Карпов. ГОСТ Р 71207–2024 — Статический анализ программного обеспечения. Процессы. (презентация)
Дополнительные ссылки
- Приглашаю подписаться на мой Telegram-канал "Бестиарий программирования", где я наблюдаю за багами и рассуждаю о качестве кода.
- МАСКОМ УЦ — Вебинар N 1 серии вебинаров по разработке безопасного ПО — Давайте разбираться вместе!