Статический анализатор PVS-Studio позволяет автоматически находить различные проблемы в исходном коде. Он также может обнаруживать фрагменты кода, не соответствующие стандарту проверки безопасности приложений OWASP. По умолчанию эта функция отключена из-за специфики некоторых правил диагностики. Однако вы можете легко включить его и проверить свой код. В этой заметке описаны различные способы проверки кода на соответствие OWASP ASVS с помощью PVS-Studio.

Как включить правила OWASP в PVS-Studio

Описание всех диагностических правил можно найти здесь: Сообщения PVS-Studio. Если вас интересуют диагностические правила из группы OWASP, то вам также могут быть интересны следующие классификации предупреждений PVS-Studio:

Как отмечалось выше, набор правил OWASP по умолчанию отключен. Давайте рассмотрим способы включения и настройки этих правил.

Если вы используете плагин PVS-Studio для IDE

Если вы запускаете анализ с плагином для Visual Studio или какой-либо другой IDE, используйте графический интерфейс, чтобы включить набор правил OWASP.

Для этого зайдите в настройки анализатора. Например, в Visual Studio 2019 откройте Extensions -> PVS-Studio -> Options:

Для других IDE способы включения правил OWASP могут отличаться. Для получения дополнительной информации, в том числе информации о том, как открыть настройки в других IDE, читайте «Знакомство со статическим анализатором кода PVS-Studio в Windows».

В «Параметры» нажмите на вкладку «Обнаруживаемые ошибки» для нужного вам языка. Здесь нужно изменить опцию для группы OWASP:

По умолчанию для группы правил OWASP установлено значение Отключено. Это означает, что все групповые правила OWASP отключены для определенного языка. Чтобы включить их, выберите Пользовательский, Показать все или Скрыть все в зависимости от ваших потребностей. Подробнее об этих и других настройках читайте в документации. Например, раздел Настройки: Обнаруживаемые ошибки содержит описание вкладки Обнаруживаемые ошибки.

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

Обратите внимание, что каждое предупреждение OWASP имеет соответствующий идентификатор SAST и CWE. Кроме того, почти все предупреждения имеют соответствующий CWE. Подробнее о том, как управлять окном вывода предупреждений, читайте здесь: Обработка списка диагностических сообщений в Visual Studio. Аналогичным образом можно настроить параметры окна вывода в других IDE.

Если вы запускаете анализатор из командной строки

Если вы запускаете анализ через интерфейс командной строки, то, скорее всего, вам нужно редактировать файл настроек вручную (т.е. не через графический интерфейс).

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

Как включить правила OWASP в анализаторе C#

Основной способ настроить анализатор C# для любой ОС — отредактировать файл Settings.xml. Это тот же файл Settings.xml, который используется плагинами для Visual Studio, CLion и Rider.

По умолчанию файл имеет следующий путь:

  • Windows: «%APPDATA%\PVS-Studio\Settings.xml»;
  • Linux/macOS: «~/.config/PVS-Studio/Settings.xml».

Также при запуске анализа вы можете передать путь к настройкам в качестве аргумента командной строки. Подробнее об использовании утилит командной строки см. в разделе «Анализ проектов Visual Studio/MSBuild/.NET из командной строки с помощью PVS-Studio».

Настройки анализатора хранятся в формате XML. Чтобы включить набор правил OWASP, сосредоточьтесь на следующих узлах:

  • DisableOWASPAnalysisCs — если узел имеет значение false, набор правил OWASP для анализатора C# будет включен. Если узел true — правила будут отключены;
  • DisableDetectableErrors — узел, содержащий список кодов правил, разделенных пробелом (примеры диагностических кодов: V3163, V5608, V3022). Отображение этих правил будет отключено.

Соответственно, чтобы включить проверку кода на соответствие OWASP, пропишите соответствующие значения в DisableOWASPAnalysis и DisableOWASPAnalysisCs. Также убедитесь, что нужные вам правила не прописаны в узле DisableDetectableErrors.

Как включить набор правил OWASP в анализаторе C++

Windows

Для настройки анализатора C++ в Windows также можно использовать файл Settings.xml (описан выше). Это работает, если вы запускаете анализ со следующими инструментами:

  • плагин для Visual Studio, Rider или CLion;
  • консольная утилита PVS-Studio_Cmd;
  • Интерфейс мониторинга компилятора C и C++.

Чтобы включить набор правил OWASP, установите соответствующие значения для узлов DisableOWASPAnalysis (аналог DisableOWASPAnalysisCs для C++) и DisableDetectableErrors.

Иногда может потребоваться запуск анализатора C++ напрямую (через PVS-Studio.exe). В этом случае вам необходимо настроить параметры с помощью файла *.cfg. Путь к файлу необходимо передать в качестве значения параметра ‘—cfg’:

PVS-Studio.exe --cfg "myConfig.cfg"

Подробнее о том, как запустить анализ таким образом, см. в разделе Прямая интеграция анализатора в системы автоматизации сборки (C/C++). Чтобы включить правила OWASP в файле конфигурации, проверьте значение параметра режим анализа. Это значение позволяет управлять включенными группами диагностических правил. Это должна быть сумма чисел, соответствующих включенным группам. Например, 4 соответствует Общему анализу, а 128 — анализу с включенными правилами OWASP. Если вам нужно использовать только эти две группы, передайте 132 в режим анализа. Если этот параметр не задан (или значение равно 0), то в анализе будут использоваться все доступные группы, включая OWASP.

Более того, этот параметр можно задать как аргумент командной строки:

PVS-Studio.exe --analysis-mode 132 ....

Линукс

Для Linux настраиваем параметры примерно так же, как и при использовании «PVS-Studio.exe». Выполните команду «pvs-studio-analyzer analysis», чтобы запустить анализ. Среди параметров команды стоит упомянуть «анализ-режим» и «cfg».

‘ — analysis-mode’ (или ‘-a’) определяют группы предупреждений, которые будут включены во время анализа. Чтобы включить правила OWASP, «OWASP» должен быть записан в списке групп, разделенных знаком «;». Пример:

pvs-studio-analyzer analyze .... -a GA;MISRA;OWASP

‘—cfg’ (или ‘-c’) позволяет указать путь к специальному конфигурационному файлу — ‘*.cfg’. Этот файл аналогичен файлу, который мы использовали для «PVS-Studio.exe» (описан выше).

Подробнее читайте в разделе Как запустить PVS-Studio на Linux и macOS.

Как включить OWASP в анализаторе Java

Анализатору Java посвящена следующая страница документации: Как запустить PVS-Studio Java. Он предоставляет всю информацию, необходимую для запуска анализа, включения диагностики OWASP и т. д. Чтобы активировать правила OWASP, ниже приведено краткое описание параметров, которые необходимо изменить.

Способ включения набора правил OWASP зависит от инструментов, которые вы используете для проведения анализа.

Например, если вы используете плагин для Maven («pvsstudio-maven-plugin»), то в его конфигурации (в файле «pom.xml») нужно добавить значение «OWASP» в ноду ‹analysisMode›. Также проверьте значения в узлах ‹enabledWarnings› и ‹disabledWarnings›. Пример:

<build>
  <plugins>
    <plugin>
      <groupId>com.pvsstudio</groupId>
      <artifactId>pvsstudio-maven-plugin</artifactId>
      <version>7.14.50353</version>
      <configuration>
        <analyzer>
          <outputType>text</outputType>
          <outputFile>path/to/output.txt</outputFile>
          <analysisMode>GA,OWASP</analysisMode>
        </analyzer>
      </configuration>
    </plugin>
  </plugins>
</build>

Если вы используете плагин для Gradle, откройте файл «build.gradle» и отредактируйте значение «analysmode» в блоке «pvsstudio». Также проверьте «enabledWarnings» и «disabledWarnings». Пример:

apply plugin: com.pvsstudio.PvsStudioGradlePlugin
pvsstudio {
  outputType = 'text'
  outputFile = 'path/to/output.txt'
  analysisMode = ["GA", "OWASP"]
}

Вы также можете настроить оба этих плагина из командной строки (подробнее).

Как отключить и отфильтровать отдельные правила диагностики

После включения набора правил OWASP может оказаться, что срабатывание некоторых правил в вашем проекте не имеет значения. Например, V5606 проверяет код на соответствие позиции OWASP ASVS 7.4.2:

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

Согласно требованию, правило V5606 генерирует сообщение, если обнаруживает пустой блок catch или finally.

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

Общие настройки анализатора

Вы можете скрыть сообщения анализатора через общие настройки анализатора. Измените настройки либо вручную (как описано выше), либо через плагин для IDE:

Использование файла pvsconfig

Преимущества использования pvsconfig

Вы не можете отключить отдельные диагностики (только группы в целом) при изменении настроек в подключаемом модуле IDE или редактировании файла «Settings.xml». Вместо этого сгенерированные сообщения будут просто скрыты при просмотре журнала в среде IDE. В некоторых случаях такое поведение сообщений может быть удобным. Однако в остальных случаях было бы логичнее полностью отключить диагностику.

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

Например, в некоторых правилах, позволяющих проводить анализ испорченных данных, учитываются параметры общедоступных методов, которые являются потенциальными источниками испорченных данных. Объяснение такого поведения вы можете найти в заметке «Зачем проверять значения параметров публичных методов». Анализатор выдает предупреждение на низком уровне достоверности, когда источником потенциально испорченных данных является параметр публичного метода.

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

Файлы pvsconfig позволяют пользователю отключить предупреждения на определенном уровне, а также полностью отключить диагностику, переопределить уровень и т. д.

Как создать pvsconfig

Файлы с расширением pvsconfig позволяют дополнительно настроить параметры анализа. В настоящее время эти файлы можно использовать при анализе проектов C++ и C#.

На странице Подавление ложных срабатываний описаны как возможности отключения диагностики через pvsconfig, так и другие способы исключения нежелательных срабатываний. Описание других возможностей, таких как изменение уровня предупреждений или замена подстрок в сообщениях, находится в разделе Дополнительные настройки диагностики.

Чтобы использовать функциональность, просто добавьте файл с расширением pvsconfig в проект или решение.

Удобнее всего создавать pvsconfig через IDE. Используйте специальный шаблон:

В этом случае созданный вами файл будет содержать различные закомментированные примеры. Это упрощает написание собственных инструкций:

# Example of PVS-Studio rules configuration file. 
# Full documentation is available at
# /en/docs/manual/full/
# /en/docs/manual/0040/
#
# Filtering out messages by specifying a fragment from source code:
# //-V:textFromSourceCode:3001,3002,3003
#
# Turning off specific analyzer rules:
# //-V::3021,3022
#
# Changing in analyzer's output message:
# //+V3022:RENAME:{oldText0:newText0},{oldText1:newText1}
#
# Appends message to analyzer's message:
# //+V3023:ADD:{Message}
#
# Excluding directories from the analysis:
# //V_EXCLUDE_PATH \thirdParty\
# //V_EXCLUDE_PATH C:\TheBestProject\thirdParty
# //V_EXCLUDE_PATH *\UE4\Engine\*
#
# Redefining levels:
# //V_LEVEL_1::501,502
# //V_LEVEL_2::522,783,579
# //V_LEVEL_3::773
#
# Disabling groups of diagnostics:
# //-V::GA
# //-V::GA,OWASP
#
# Disabling messages with specified warning levels:
# //-V::3002:3
# //-V::3002,3008:3
# //-V::3002,3008:2,3
#
# Rule filters should be written without '#' character.

Pvsconfig предоставляет большое количество различных способов настройки анализа — от изменения уровня до изменения самих выходных сообщений или полного отключения диагностики. Давайте рассмотрим некоторые особенности файла pvsconfig.

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

Пример отключения правила

Чтобы отключить, например, правило V5606 (о пустых блоках catch и finally), добавьте в файл следующую строку:

//-V::5606

Пример отключения предупреждений на определенном уровне

Вы также можете отключить диагностические предупреждения на определенном уровне. Ранее мы рассмотрели пример с диагностикой taint, выдающей предупреждения 3-го уровня, если параметр является источником taint. Например, вам нужно исключить предупреждения о потенциальных SQL-инъекциях, где параметр является источником заражения. Добавьте следующую строку в pvsconfig

//-V::5608:3

Поэтому предупреждения 3-го уровня V5608 будут исключены из результатов анализа.

Пример переопределения уровня

У pvsconfig есть еще одна полезная функция: она помогает переопределить уровень предупреждений, выдаваемых диагностикой. Например, можно переопределить уровень всех срабатываний V5609:

//V_LEVEL_2::5609

Эта строка указывает анализатору генерировать предупреждения правила V5609 со вторым (средним) уровнем достоверности.

Вывод

Если у вас возникнут какие-либо проблемы или трудности при работе с анализатором, обратитесь в нашу службу поддержки.