До недавнего времени в своих статьях мы позиционировали PVS-Studio как инструмент для выявления ошибок в коде. При этом мы почти не рассматривали PVS-Studio в контексте безопасности. Попробуем немного исправить эту ситуацию и взглянем на инструмент с точки зрения тестирования защищённости приложений и DevSecOps практик.
PVS-Studio является средством статического тестирования защищённости приложений (Static Application Security Testing, SAST). Другими словами, анализатор PVS-Studio выявляет не только опечатки, мёртвый код и другие ошибки, но и потенциальные уязвимости.
Инструмент работает в среде Windows, Linux, macOS и анализирует код программ на языке С, C++ и C#. К концу 2018 года планируется поддержка языка Java.
Для удобства специалистов, которые будут использовать PVS-Studio как SAST инструмент, анализатор отображает свои предупреждения на Common Weakness Enumeration, SEI CERT Coding Standards, а также поддерживает стандарт MISRA (сейчас находится в процессе реализации).
Таблицы соответствий диагностик PVS-Studio различным стандартам:
- Соответствие CWE
- Соответствие SEI CERT
- Поддержка MISRA (планируем реализовать до конца 2018 года)
Наиболее распространённой классификацией предупреждений SAST инструментов является Common Weakness Enumeration (CWE). Посмотрим, использую язык CWE, как анализатор PVS-Studio помогает предотвратить уязвимости.
Если обратиться к базе данных общеизвестных уязвимостей информационной безопасности (CVE), то выясняется, что часто причиной уязвимостей в программах являются не какие-то недоработки в системе безопасности, а обыкновенные программные ошибки. Национальный институт стандартов и технологий (NIST) подтверждает это, заявляя, что 64% уязвимостей в программах связаны с ошибками в коде.
Именно такие ошибки, которые потенциально могут привести к уязвимостям, и описаны в CWE. Соответственно, если ошибку можно классифицировать как CWE, есть вероятность, что она может эксплуатироваться как уязвимость и в итоге пополнить список CVE. Для наглядности можно использовать изображение воронки:
Есть множество ошибок. Часть из них представляют опасность с точки зрения безопасности и поэтому классифицируются согласно CWE. Некоторые CWE-ошибки можно эксплуатировать и они представляют собой уязвимости.
Да, на практике только очень малая часть из найденных CWE-ошибок представляет опасность и является уязвимостями. Однако если вы разрабатываете security-critical приложения и заботитесь о безопасности пользователей, то должны крайне серьезно отнестись к этим ошибкам. Устраняя CWE-ошибки, вы защищаете своё приложение от многих уязвимостей.
Теперь взаимосвязь между ошибками, PVS-Studio и уязвимостями становится очевидной. Анализатор PVS-Studio находит ошибки и многие из них классифицирует как CWE. Исправляя эти ошибки, вы делаете своё приложение более надёжным. Обнаружение в продукте уязвимости может серьёзно затронуть его репутацию. Исправляя ошибки анализатора, вы существенно сокращаете этот риск на наиболее раннем этапе разработки — написании кода.
Анализатор PVS-Studio, как и любой другой инструмент, не даёт гарантий, что в коде нет уязвимостей. Однако если PVS-Studio предотвратит, например, 50% потенциальных уязвимостей, это уже замечательно.
Дополнительно предлагаем ознакомиться со статьёй "Как PVS-Studio может помочь в поиске уязвимостей?", где показаны ошибки, которые приводили к уязвимостям, и которых можно было бы избежать при использовании в процессе разработке инструмента PVS-Studio.
Начните использовать PVS-Studio в качестве SAST решения: скачать PVS-Studio.
DmitryBabokin
А нет планов сделать облачный вариант PVS-Studio? Так чтобы с интеграцией с гитхабом и популярными сервисами CI. Недавно решил посмотреть что есть на рынке в этой сфере для плюсов и как-то там всё грустно. Начинать смотреть можно вот отсюда github.com/marketplace/category/code-quality Есть ещё всякое, вроде Coverty с интеграций с TravisCI. Но думаю для PVS-Studio это мог бы быть неплохо рынок.
4144
С интеграцией все проще. Можно сделать докер образ с выводом ошибок в спец формате в json, и добавить его в pipeline на gitlab. docs.gitlab.com/ee/ci/examples/sast.html
Для github'а тоже можно, но надо использовать скорее всего другой ci чем travis, и писать руками вывод ошибок.
Но к сожалению с открытыми проектами так использовать PVS-Studio не получится, из-за требования бесплатной версии добавлять спец текст до текста лицензии.
Andrey2008 Автор
Это возможные вектора будущего развития, но решение пока не принято. Сейчас мы заняты поддержкой MISRA и Java.
DmitryBabokin
А бесплатные лицензии для опен сорс проектов есть?
Andrey2008 Автор
Как использовать PVS-Studio бесплатно.