РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025)

Материал из 0x1.tv

(перенаправлено с «20251004J»)
Докладчик

Доклад посвящён вопросам применения статического анализа программного обеспечения (СПО) в обеспечении безопасности и качества разрабатываемых систем. Рассматриваются ключевые понятия и цели статического анализа, его роль в процессе разработки безопасного программного обеспечения (РБПО), а также современные стандарты, включая ГОСТ Р 71207–2024.

Особое внимание уделено испытаниям статических анализаторов под патронажем ФСТЭК России, целям и задачам этих испытаний, а также роли компании «Базальт СПО» в их проведении. Представлены результаты этапа «Домашнее задание», обсуждаются инструменты CodeChecker и CodeChecker-alt-suite, а также практические этапы их применения.

Доклад также затрагивает перспективы развития статического анализа, ожидания от инструментов, их эффективность и возможности внедрения в процесс обеспечения безопасности СПО.

Видео[править вики-текст]

Презентация[править вики-текст]

РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025).pdf

Thesis[править | править вики-текст]

Ключевые слова: статический анализ, инструменты, ГОСТ Р 71207–2024.

Статический анализ: понятие, роль и практические примеры[править | править вики-текст]

Статический анализ является одной из ключевых практик разработки безопасного программного обеспечения (РБПО) наряду с фаззингом и композиционным анализом. Совместное применение этих методов обеспечивает комплексный подход к анализу исходного кода и способствует повышению доверия к создаваемому ПО.

Статический анализ — это метод исследования программного обеспечения, при котором исходный код проверяется без запуска программы с помощью специальных инструментов — статических анализаторов. Они автоматически проверяют логику условий, использование переменных, корректность типов и другие аспекты программы.

Существуют свободные инструменты, которые показывают хорошие результаты для С/C++: от простого Cppcheck[1] для быстрого анализа кода до более сложного Clang Static Analyzer[2], поддерживающего почти все виды анализа, включая межмодульный и контекстно-чувствительный. В ходе небольшого исследования было выявлено, что различные анализаторы хорошо обнаруживают разные типы ошибок, поэтому возникла необходимость объединить их результаты. В настоящий момент мы используем для этого платформу CodeChecker[3].

CodeChecker — это платформа для обработки результатов статического анализа кода, которая объединяет отчёты нескольких анализаторов, хранит их и визуализирует.

CodeChecker-alt-suite[4] представляет собой пакет, включающий набор свободных инструментов с их настройкой в соответствии с требованиями ГОСТ Р 71207–2024[5], а также методику запуска анализа.

Практические примеры исправления ошибок, найденных с помощью статического анализа:

  • Запускается исследование с помощью инструмента статического анализа.
  • Получаем срабатывание статического анализатора и проверяем её на ложноположительность:
389-ds-base(v3.1.3):
ldap/servers/slapd/tools/ldclt/parser.c:

141. if (variant[1] != '=')
142.    field->var = -1;
143. else {
144.    if ((variant[0] < VAR_MIN) || (variant[0] > VAR_MAX)) {
145.        fprintf(stderr, "Error: bad variable in %s : \"%s\"\n", fname, line);
146.        fprintf(stderr, "Error: must be in [%c-%c]\n", VAR_MIN, VAR_MAX);
147.        return (-1);
148.    }
149.    field->var = variant[0] - VAR_MIN;
150.    variant++; /* Skip variable name */
151.    variant++; /* Skip '=' */

        OVERFLOW_UNDER_CHECK: Accessing an element of array 'obj->var' of size 7 at parser.c:156 can lead to a buffer overflow, since the index 'field->var' can have an out of range value 7, as indicated by a preceding conditional expression at parser.c:144.

156.    if (obj->var[field->var] == NULL)
157.        //OVERFLOW_UNDER_CHECK
158.        obj->var[field->var] = (char *)malloc(MAX_FILTER);
159.    }

ldap/servers/slapd/tools/ldclt/ldclt.h:

323. #define VAR_MIN 'A'
324. #define VAR_MAX 'H'
325. typedef struct vers_object
326. {
327.     vers_attribute attribs[MAX_ATTRIBS];
328.     int attribsNb;
329.     vers_attribute *rdn;
330.     char *rdnName;
331.     char *var[VAR_MAX - VAR_MIN];
332.     char *fname;
333. } vers_object;

Испытания статических анализаторов и их оценка[править | править вики-текст]

Для оценки достаточности и полноты анализа используется ГОСТ Р 71207–2024 «Статический анализ программного обеспечения», который описывает порядок проведения анализа, виды выявляемых ошибок и типы методик анализа. Поэтому для проверки применимости ГОСТ Р 71207–2024 на практике ФСТЭК России организовала испытания статических анализаторов[6]. Эти испытания стали уникальным событием, демонстрирующим востребованность статического анализа для обеспечения безопасности программного обеспечения. Основное внимание уделялось технологическим возможностям инструментов, определяемым стандартом.

Цели и задачи испытаний включают:

  • оценку технологических возможностей статических анализаторов исходного кода;
  • формирование публичных методик оценки и критериев применимости анализаторов в различных видах исследований.

Компания «Базальт СПО» участвует в испытаниях не только как член жюри, но и в качестве активного участника, исследуя возможности свободных статических анализаторов по методике, подготовленной рабочей группой.

В ходе испытаний был создан набор открытых тестов, который позволяет получить первоначальную оценку возможностей различных решений статического анализа.

Для CodeChecker-alt-suite эти результаты выглядят следующим образом: FN — 14.7 %, FP — 35.4 % по всему набору открытых тестов, что соответствует пункту 8.4 ГОСТ Р 71207–2024 (долю ошибок первого рода — не более 50 %; долю ошибок второго рода — не более 50 %).

Перспективы развития[править | править вики-текст]

В планах — синхронизация выработанных методик с ГОСТ Р 71207–2024 с учётом реальных условий, оценка возможностей различных анализаторов для повышения эффективности статического анализа, выявление их недостатков и определение направлений дальнейшего развития.

Существует также потенциал для расширения и на другие языки программирования. Уже проведено первичное исследование, которое позволило выявить возможные инструменты для их интеграции.


РБПО для СПО в действии — статический анализ и опыт его применения (OSSDEVCONF-2025)!.jpg

Примечания и ссылки[править вики-текст]

  1. Cppcheck // cppcheck.net. URL: http://cppcheck.net/manual.html (дата обращения: 10.09.2025).
  2. Clang Static Analyzer // clang.llvm.org. URL: https://clang.llvm.org/docs/ClangStaticAnalyzer.html (дата обращения: 10.09.2025).
  3. CodeChecker // CodeChecker. URL: https://codechecker.readthedocs.io/en/latest/ (дата обращения: 10.09.2025).
  4. Пакет CodeChecker-alt-suite // packages.altlinux.org. URL: https://packages.altlinux.org/ru/sisyphus/srpms/CodeChecker-alt-suite/ (дата обращения: 10.09.2025).
  5. ГОСТ Р 71207–2024 // protect.gost.ru. URL: https://protect.gost.ru/v.aspx?control=8&id=246347 (дата обращения: 10.09.2025).
  6. Испытания статических анализаторов // ib-bank.ru. URL: https://ib-bank.ru/bisjournal/post/2388 (дата обращения: 10.09.2025).