ГОСТ Р 71207–2024
Инструментальное средство PVS-Studio разрабатывается с учётом требований, предъявляемых к статическим анализаторам в ГОСТ Р 71207–2024. PVS-Studio выявляет критические ошибки и может использоваться при разработке безопасного программного обеспечения.
ГОСТ Р 71207–2024 – РАЗРАБОТКА БЕЗОПАСНОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. Статический анализ программного обеспечения. Общие требования.
Разработан ФСТЭК России и ИСП РАН. Впервые введён в действие 01.04.2024.
Стандарт устанавливает:
- требования к внедрению и выполнению статического анализа ПО;
- требования к методам статического анализа, инструментам анализа и к специалистам, участвующим в анализе;
- методику проверки устанавливаемых требований к инструментам анализа.
Входит в комплекс стандартов, направленных на предотвращение уязвимостей в программах, и применяется совместно с ГОСТ Р 56939.
Анализатор PVS-Studio реализует перечисленные в стандарте методы анализа для выявления критических ошибок:
- Анализ программы на синтаксическом уровне (построение AST-дерева, вывод типов);
- Внутрипроцедурный анализ потоков данных (data-flow analysis) и управления (control-flow analysis);
- Межпроцедурный и межмодульный контекстно-чувствительный анализ потока данных;
- Чувствительный к путям выполнения анализ потоков данных и управления;
- Межпроцедурный и межмодульный контекстно-чувствительный анализ помеченных данных (taint checking);
- Сигнатурный поиск (сопоставление с шаблоном);
- Анализ псевдонимов;
- Анализ косвенных вызовов;
- Статистический анализ;
- Анализ иерархии классов.
Это позволяет выявлять в коде программ на языках C, C++, C# и Java критические ошибки следующих типов:
- Ошибки переполнения буфера. Выявляется запись или чтение за пределами выделенной для буфера/массива памяти;
- Ошибки целочисленного переполнения и некорректного совместного использования знаковых и беззнаковых чисел;
- Ошибки некорректного использования системных процедур и интерфейсов, связанных с обеспечением информационной безопасности;
- Ошибки использования чувствительных данных без их предварительной проверки. Подразумеваются данные, прочитанные из внешних файлов, полученные по сети, введённые пользователем и т.д.;
- Ошибки при работе с многопоточными примитивами.
ГОСТ Р 71207–2024 дополнительно перечисляет несколько типов критических ошибок, специфичных для языков C и C++. Анализатор PVS-Studio для C и C++ их также выявляет:
- Ошибки разыменования нулевого указателя;
- Ошибки деления на ноль;
- Ошибки использования форматной строки;
- Ошибки использования неинициализированных переменных;
- Ошибки управления динамической памятью (двойное освобождение, использование освобождённой памяти и т.д.);
- Ошибки утечек памяти, незакрытых файловых дескрипторов и дескрипторов сетевых соединений.
Документация PVS-Studio содержит подробное описание всех типов ошибок, которые находит анализатор. Для каждого типа предупреждения приводятся:
- описание ошибки и объяснение возможных причин её возникновения;
- пример ошибочного кода, для которого выдаётся предупреждение;
- пример исправленного кода или рекомендация по исправлению данного типа ошибки;
- указание соответствия идентификаторам в системе классификации дефектов безопасности MITRE CWE.
Поддерживается выдача отчёта (списка предупреждений) в различных форматах, в том числе в формате открытого стандарта SARIF.
Инструмент разрабатывается в России с 2008 года (запись в Едином Реестре российского ПО N9837) и содержит более 1000 диагностических правил. Возможно использование в полностью закрытом контуре. Является SAST-решением.
Типы критических ошибок, выявляемых PVS-Studio в коде программ, написанных на компилируемых языках (C, C++, C#, Java):
Типы критических ошибок, выявляемых PVS-Studio |
Диагностики |
---|---|
Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.) |
C, C++: V541, V755, V1010
C#: V5608, V5609, V5610, V5611, V5614, V5615, V5616, V5618, V5619, V5620, V5621, V5622, V5623, V5624, V5626, V5627, V5628 |
Ошибки целочисленного переполнения и некорректного совместного использования знаковых и беззнаковых чисел |
C, C++: V569, V605, V658, V784, V1012, V1026, V1028, V1029, V1070, V1081, V1083, V1085, V1112
C#: V3134, V3200, V3204
Java: V6034, V6117, V6124 |
Ошибки переполнения буфера (записи или чтения за пределами выделенной для буфера памяти) |
C, C++: V512, V518, V557, V582, V594, V635, V643, V645, V752, V781, V1038, V1111
C#: V3106, V3184
Java: V6025, V6079 |
Ошибки некорректного использования системных процедур и интерфейсов, связанных с обеспечением информационной безопасности (шифрования, разграничения доступа и пр.) |
C, C++: V597, V618, V631, V642, V1057, V1072, V1109, V5014
C#: V3039, V5601, V5612, V5613, V5617
Java: V5305, V6109 |
Ошибки при работе с многопоточными примитивами (интерфейсами запуска потоков на выполнение, синхронизации и обмена данными между потоками и пр.) |
C, C++: V513, V712, V720, V744, V1011, V1018, V1025, V1036, V1088, V1089
C#: V3032, V3054, V3079, V3082, V3083, V3089, V3090, V3147, V3167, V3168, V3190, V5604, V5605
Java: V5304, V6064, V6070, V6074, V6082, V6095, V6102 |
Согласно требованиям стандарта, PVS-Studio дополнительно выявляет следующие типы критических ошибок в коде программ на языках C и C++. Для других языков эти типы ошибок не считаются критичными:
Типы критических ошибок, выявляемых PVS-Studio |
Диагностики |
---|---|
Ошибки разыменования нулевого указателя |
C, C++: V522, V595, V664, V713, V757, V769, V1004 |
Ошибки деления на ноль |
C, C++: V609 |
Ошибки управления динамической памятью (выделения, освобождения, использования освобожденной памяти) |
C, C++: V515, V554, V585, V586, V599, V611, V613, V630, V641, V680, V697, V723, V726, V748, V749, V752, V758, V772, V774, V1002, V1006, V1062 |
Ошибки использования форматной строки |
C, C++: V510, V541, V576, V618 |
Ошибки использования неинициализированных переменных |
C, C++: V573, V614, V670, V679, V730, V788, V1007, V1050, V1077, V1086 |
Ошибки утечек памяти, незакрытых файловых дескрипторов и дескрипторов сетевых соединений |
C, C++: V599, V701, V773, V1020, V1023, V1100, V1106, V1110 |