SlideShare une entreprise Scribd logo
1  sur  40
SAST, борьба с потенциальными
уязвимостями
Андрей Карпов
Зачем слушать этот доклад?
• Пока все
рассаживаются,
немного юмора
• Уязвимости - это те
же самые ошибки.
Зачем их выделять в
отдельный класс?
• Последствия!
2
Как стать ценным программистом/специалистом
DevOps экспертом по безопасности
3
Докладчик
• Карпов Андрей Николаевич, 1981
• Присутствует на Habrahabr под именем
Andrey2008 - habr.com/users/andrey2008/
• Технический директор ООО «СиПроВер»
• MVP в категории Developer Technologies
• Intel Black Belt Software Developer
• Один из основателей проекта PVS-Studio
(статический анализатор кода для языков
C/C++/C#/Java).
• karpov@viva64.com
4
Своевременное обнаружение
уязвимостей
NIST: National
Institute of
Standards and
Technology
5
Обзор кода
• Старый добрый метод поиска ошибок и
уязвимостей: обзор кода
• Преимущества:
– обмен опытом
– поиск высокоуровневых ошибок
• Минусы:
– Очень дорого
– В больших проектах сложно заметить некоторые
ошибки
6
Обзор кода - анекдот в тему
Жила-была девочка, и была у нее кофточка. И когда девочка
надевала кофточку, кофточка начинала душить девочку. Пошла
девочка к маме и рассказала ей обо всем. Мама выслушала ее и
купила ей другую кофточку.
И в самом деле, нельзя же одну кофточку носить десять лет.
7
Обзоры кода - это замечательно, но
их стало недостаточно
• MS DOS 1.0 : 4 000 строк кода
• Ядро Linux 1.0.0 : 176 250 строк кода
• Ядро Linux 4.11.7 в 100 раз больше: 18 373 471
строк кода
• Photoshop 1.0 : 128 000 строк кода
• Photoshop CS 6 : 10 000 000 строк кода
8
Статический анализ кода
• Автоматический процесс обзора кода
• Преимущества:
– Малозатратно
– Анализатор не устаёт
– Анализатор знает про ошибочные паттерны, о которых не
догадываются программисты
• Минусы:
– Искусственный интеллект пока не создан
– Нельзя найти высокоуровневые ошибки
• Не ищите "серебряную пулю"
9
Static Application Security Testing
(SAST)
• Статическое
тестирование
защищённости
приложений
• С точки зрения
программиста, ошибки
почти не отличаются от
потенциальных
уязвимостей
• Зато они отличаются
опасностью
Ошибка Уязвимость
10
Dynamic application security testing
(DAST)
• Динамический анализ кода
• Санитайзеры
• Преимущества:
– Нет ложных срабатываний
• Недостатки:
– Медленно
– Часто нужны специальные входные данные
11
SAST или DAST ?
SAST
DAST
Все уязвимости
12
Две разновидности SAST
• Поиск известных CVE
• Профилактика новых CVE
13
Поиск известных CVE
• Важно и полезно
• Аналогия: антивирусы
• Нет ложных срабатываний
• Но находится только то, что уже известно
• Особенно полезно в больших старых проектах
14
А что делать с новым кодом?
• Неэффективно искать именно уязвимости
• Надо устранять в коде дефекты, которые могут
стать причинами уязвимостей
• Это проще и полезнее
• Аналогия: строительство
15
Common Weakness Enumeration
(CWE)
16
Выявление потенциальных
уязвимостей
• Нет разницы между просто ошибкой и
потенциальной уязвимостью
• Но есть ошибки, которые более тяготеют к
проблемам безопасности
• Для их выявления полезно реализовать
специализированные диагностики
17
Технология анализа потока
управления на примере PVS-Studio
• В начале поясню, что это такое
• Далее рассмотрим специализированную
диагностику V1010
18
static const int kDaysInMonth[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
bool ValidateDateTime(const DateTime& time) {
if (time.year < 1 || time.year > 9999 ||
time.month < 1 || time.month > 12 ||
time.day < 1 || time.day > 31 ||
time.hour < 0 || time.hour > 23 ||
time.minute < 0 || time.minute > 59 ||
time.second < 0 || time.second > 59) {
return false;
}
if (time.month == 2 && IsLeapYear(time.year)) {
return time.month <= kDaysInMonth[time.month] + 1;
} else {
return time.month <= kDaysInMonth[time.month];
}
}19
static const int kDaysInMonth[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
bool ValidateDateTime(const DateTime& time) {
if (time.year < 1 || time.year > 9999 ||
time.month < 1 || time.month > 12 ||
time.day < 1 || time.day > 31 ||
time.hour < 0 || time.hour > 23 ||
time.minute < 0 || time.minute > 59 ||
time.second < 0 || time.second > 59) {
return false;
}
if (time.month == 2 && IsLeapYear(time.year)) {
return time.month <= kDaysInMonth[time.month] + 1;
} else {
return time.month <= kDaysInMonth[time.month];
}
}20
static const int kDaysInMonth[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
bool ValidateDateTime(const DateTime& time) {
if (time.year < 1 || time.year > 9999 ||
time.month < 1 || time.month > 12 ||
time.day < 1 || time.day > 31 ||
time.hour < 0 || time.hour > 23 ||
time.minute < 0 || time.minute > 59 ||
time.second < 0 || time.second > 59) {
return false;
}
if (time.month == 2 && IsLeapYear(time.year)) {
return time.month <= kDaysInMonth[time.month] + 1;
} else {
return time.month <= kDaysInMonth[time.month];
}
}21
static const int kDaysInMonth[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
bool ValidateDateTime(const DateTime& time) {
if (time.year < 1 || time.year > 9999 ||
time.month < 1 || time.month > 12 ||
time.day < 1 || time.day > 31 ||
time.hour < 0 || time.hour > 23 ||
time.minute < 0 || time.minute > 59 ||
time.second < 0 || time.second > 59) {
return false;
}
if (time.month == 2 && IsLeapYear(time.year)) {
return time.month <= kDaysInMonth[time.month] + 1;
} else {
return time.month <= kDaysInMonth[time.month];
}
} time.day22
PVS-Studio: V1010
• В 2018 году появилась специализированная
диагностика V1010, которая выявляет
использование недостоверных данных
(полученных извне) без их проверки
• Диагностика поможет выявлять
потенциальные уязвимости, которые можно
классифицировать как CWE-20: Improper Input
Validation
23
Пример V1010 в проекте NcFTP
static int NcFTPConfirmResumeDownloadProc(....)
{
....
(void) fgets(newname, sizeof(newname) - 1, stdin);
newname[strlen(newname) - 1] = '0';
if (newname[0] == '0') {
....
}
V1010 Unchecked tainted data is used in index: 'strlen(newname)'. ncftp cmds.c
1228
24
Пример V1010 в проекте NcFTP
25
Многие уязвимости могут быть выявлены
классическими диагностиками
• Если обратиться к базе CVE, то выясняется, что часто
причиной уязвимостей в программах являются не какие-то
недоработки в системе безопасности, а обыкновенные
программные ошибки.
• Национальный институт стандартов и технологий (NIST)
подтверждает это, заявляя, что 64% уязвимостей в
программах связаны с ошибками в коде.
26
Несколько примеров простых
ошибок, приводящих к уязвимостям
• "Случай из практики. Ваш продукт нашёл
уязвимость в коде". (с) Кто-то на конференции C++
CoreHard Autumn 2017
https://youtu.be/g5JrD4QGvWA?t=42m32s
• "Это всё слова. Покажи мне код". (c) Линус
Торвальдс
27
CVE-2014-1266static OSStatus
SSLVerifySignedServerKeyExchange(.....)
{
OSStatus err;
....
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
goto fail;
....
fail:
SSLFreeBuffer(&signedHashes);
SSLFreeBuffer(&hashCtx);
return err;
}
PVS-Studio:
• V640 / CWE-483 The code's operational logic does not
correspond with its formatting. The statement is
indented to the right, but it is always executed. It is
possible that curly brackets are missing.
• V779 / CWE-561 Unreachable code detected. It is
possible that an error is present
28
CVE-2012-2122
PVS-Studio: V642 Saving the 'memcmp' function result inside the 'char' type
variable is inappropriate. The significant bits could be lost breaking the program's
logic. password.c
typedef char my_bool;
my_bool
check_scramble(const char *scramble_arg, const char *message,
const uint8 *hash_stage2)
{
....
return memcmp(hash_stage2, hash_stage2_reassured, SHA1_HASH_SIZE);
}
29
Оно того стоит?
• Да, используя SAST, можно предотвратить многие
уязвимости ещё на этапе разработки
• Стоимость:
– Инструменты SAST дороги
– Разработчикам нужно тратить время на работу с SAST
инструментами
30
За безопасность необходимо платить,
а за ее отсутствие – расплачиваться.
31
Внедрение инструментов статического
анализа в цикл разработки ПО
• К сожалению, статические анализаторы - это сложные
инструменты, и «нужно уметь их готовить»
• Далее рассмотрим:
– Неправильные подходы
– Самое главное: регулярность
– PVS-Studio: быстрый старт
– Внедрение в большой проект и 100500 срабатываний
– PVS-Studio: работа с отчётом
– SonarQube
32
Неправильные подходы
• Запуск перед релизом
– Аналогия с предупреждениями компилятора
– «Но вы ведь сами разово проверяете проекты и
пишете статьи»
У нас другая цель.
• «Почему я не люблю синтетические тесты»
https://www.viva64.com/ru/b/0471/
33
Самое главное: регулярность
• Идея в том, чтобы ошибки и потенциальные
уязвимости обнаруживалась как можно раньше
• Варианты:
– каждый раз после компиляции
– ночные запуски анализатора
• Пояснение. Да, уязвимости можно искать время от
времени, но пользователь утонет в сообщениях и
будет невнимателен
34
PVS-Studio: быстрый старт
• Отдельного внимания заслуживает возможность быстро
попробовать PVS-Studio на любом проекте
• Для этого можно отследить запуски компилятора и собрать всю
необходимую для анализа информацию
• Windows:
– Утилита Standalone
– Инструкция: http://www.viva64.com/ru/m/0033/
• Linux/macOS
– Утилита pvs-studio-analyzer
– Инструкция: см. «Быстрый старт» в документе
http://www.viva64.com/ru/m/0036/
35
Внедрение в большой проект и 100500
срабатываний
• PVS-Studio и другие профессиональные
анализаторы предлагают массовое
подавление срабатываний
• Как это работает
• А что делать с техническим долгом?
36
PVS-Studio: работа с отчётом
• Плагины (Visual Studio, SonarQube)
• Конвертер (open source)
• Рассылка сообщений по почте
• Недавняя фича PVS-Studio: HTML отчёт
37
SonarQube
• «Контролируем качество кода с помощью платформы
SonarQube»
http://www.viva64.com/ru/b/0452/
38
Ах да, не забудьте взглянуть на
PVS-Studio как SAST решение
• PVS-Studio для DevSecOps
• https://www.viva64.com/ru/sast/
39
Подходите пообщаться после
выступления!
• Сайт PVS-Studio: https://www.viva64.com
• Контакты: CTO Андрей Карпов. karpov@viva64.com
• Подписывайтесь на нас:
– Telegram: pvsstudio_rus
– Twitter: @Code_Analysis
40

Contenu connexe

Tendances

Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1m2rus
 
Статические анализаторы кода как DevSecOps решение
Статические анализаторы кода как DevSecOps решениеСтатические анализаторы кода как DevSecOps решение
Статические анализаторы кода как DevSecOps решениеAndrey Karpov
 
Как создать качественный статический анализатор
Как создать качественный статический анализаторКак создать качественный статический анализатор
Как создать качественный статический анализаторAndrey Karpov
 
SAST, CWE, SEI CERT и другие умные слова из мира информационной безопасности
SAST, CWE, SEI CERT и другие умные слова из мира информационной безопасностиSAST, CWE, SEI CERT и другие умные слова из мира информационной безопасности
SAST, CWE, SEI CERT и другие умные слова из мира информационной безопасностиAndrey Karpov
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"DataArt
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиAndrey Karpov
 
Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...Andrey Karpov
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаcorehard_by
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
 
Статический анализ кода: современный взгляд
Статический анализ кода: современный взглядСтатический анализ кода: современный взгляд
Статический анализ кода: современный взглядAndrey Karpov
 
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)Vladimir Kochetkov
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммыPlatonov Sergey
 
Программа для регрессионного тестирования анализаторов PVS-Studio, CppCat
Программа для регрессионного тестирования анализаторов PVS-Studio, CppCatПрограмма для регрессионного тестирования анализаторов PVS-Studio, CppCat
Программа для регрессионного тестирования анализаторов PVS-Studio, CppCatAndrey Karpov
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокTatyanazaxarova
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with SeleniumSergey Shvets
 
Unit tests final
Unit tests finalUnit tests final
Unit tests finalcorehard_by
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверPlatonov Sergey
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаAndrey Karpov
 

Tendances (20)

Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
Статические анализаторы кода как DevSecOps решение
Статические анализаторы кода как DevSecOps решениеСтатические анализаторы кода как DevSecOps решение
Статические анализаторы кода как DevSecOps решение
 
Как создать качественный статический анализатор
Как создать качественный статический анализаторКак создать качественный статический анализатор
Как создать качественный статический анализатор
 
SAST, CWE, SEI CERT и другие умные слова из мира информационной безопасности
SAST, CWE, SEI CERT и другие умные слова из мира информационной безопасностиSAST, CWE, SEI CERT и другие умные слова из мира информационной безопасности
SAST, CWE, SEI CERT и другие умные слова из мира информационной безопасности
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщики
 
Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Статический анализ кода: современный взгляд
Статический анализ кода: современный взглядСтатический анализ кода: современный взгляд
Статический анализ кода: современный взгляд
 
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 
Программа для регрессионного тестирования анализаторов PVS-Studio, CppCat
Программа для регрессионного тестирования анализаторов PVS-Studio, CppCatПрограмма для регрессионного тестирования анализаторов PVS-Studio, CppCat
Программа для регрессионного тестирования анализаторов PVS-Studio, CppCat
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with Selenium
 
Unit tests final
Unit tests finalUnit tests final
Unit tests final
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-сервер
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 

Similaire à SAST, борьба с потенциальными уязвимостями

DevSecOps против восстания машин
DevSecOps против восстания машинDevSecOps против восстания машин
DevSecOps против восстания машинAndrey Karpov
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
 
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...Tatyanazaxarova
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeTatyanazaxarova
 
Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт
Облегчаем процесс разработки с помощью статического анализа кода: Наш опытОблегчаем процесс разработки с помощью статического анализа кода: Наш опыт
Облегчаем процесс разработки с помощью статического анализа кода: Наш опытAndrey Karpov
 
PT ESC - кто полечит доктора?
PT ESC - кто полечит доктора?PT ESC - кто полечит доктора?
PT ESC - кто полечит доктора?Alexey Kachalin
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Andrey Karpov
 
Что DevOps должен знать про статический анализ кода?
Что DevOps должен знать про статический анализ кода?Что DevOps должен знать про статический анализ кода?
Что DevOps должен знать про статический анализ кода?Andrey Karpov
 
Как команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы TizenКак команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы TizenAndrey Karpov
 
Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеTatyanazaxarova
 
Использование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийИспользование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийSQALab
 
RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.Olesya Shelestova
 
Андрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибокАндрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибокSQALab
 
Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Andrey Karpov
 
Безопасная разработка (СТАЧКА 2015)
Безопасная разработка (СТАЧКА 2015)Безопасная разработка (СТАЧКА 2015)
Безопасная разработка (СТАЧКА 2015)Alexey Kachalin
 
Применение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОПрименение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОAndrey Karpov
 
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Tatyanazaxarova
 
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасность
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасностьКак оценить пользу от ИБ и увязать с нею инвестиции в безопасность
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасностьVsevolod Shabad
 

Similaire à SAST, борьба с потенциальными уязвимостями (20)

DevSecOps против восстания машин
DevSecOps против восстания машинDevSecOps против восстания машин
DevSecOps против восстания машин
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMerge
 
Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт
Облегчаем процесс разработки с помощью статического анализа кода: Наш опытОблегчаем процесс разработки с помощью статического анализа кода: Наш опыт
Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт
 
PT ESC - кто полечит доктора?
PT ESC - кто полечит доктора?PT ESC - кто полечит доктора?
PT ESC - кто полечит доктора?
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в коде
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
 
Что DevOps должен знать про статический анализ кода?
Что DevOps должен знать про статический анализ кода?Что DevOps должен знать про статический анализ кода?
Что DevOps должен знать про статический анализ кода?
 
Как команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы TizenКак команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы Tizen
 
Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработке
 
Использование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийИспользование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложений
 
RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.
 
Андрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибокАндрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибок
 
Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?
 
Безопасная разработка (СТАЧКА 2015)
Безопасная разработка (СТАЧКА 2015)Безопасная разработка (СТАЧКА 2015)
Безопасная разработка (СТАЧКА 2015)
 
Применение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОПрименение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПО
 
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
 
Secure development
Secure developmentSecure development
Secure development
 
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасность
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасностьКак оценить пользу от ИБ и увязать с нею инвестиции в безопасность
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасность
 

Plus de Andrey Karpov

60 антипаттернов для С++ программиста
60 антипаттернов для С++ программиста60 антипаттернов для С++ программиста
60 антипаттернов для С++ программистаAndrey Karpov
 
60 terrible tips for a C++ developer
60 terrible tips for a C++ developer60 terrible tips for a C++ developer
60 terrible tips for a C++ developerAndrey Karpov
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesAndrey Karpov
 
PVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature OverviewPVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature OverviewAndrey Karpov
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокAndrey Karpov
 
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Andrey Karpov
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesAndrey Karpov
 
Does static analysis need machine learning?
Does static analysis need machine learning?Does static analysis need machine learning?
Does static analysis need machine learning?Andrey Karpov
 
Typical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaTypical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaAndrey Karpov
 
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)Andrey Karpov
 
Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Andrey Karpov
 
C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerAndrey Karpov
 
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareThe Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareAndrey Karpov
 
Static Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineStatic Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineAndrey Karpov
 
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsSafety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsAndrey Karpov
 
The Great and Mighty C++
The Great and Mighty C++The Great and Mighty C++
The Great and Mighty C++Andrey Karpov
 
Static code analysis: what? how? why?
Static code analysis: what? how? why?Static code analysis: what? how? why?
Static code analysis: what? how? why?Andrey Karpov
 
Zero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youZero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youAndrey Karpov
 

Plus de Andrey Karpov (20)

60 антипаттернов для С++ программиста
60 антипаттернов для С++ программиста60 антипаттернов для С++ программиста
60 антипаттернов для С++ программиста
 
60 terrible tips for a C++ developer
60 terrible tips for a C++ developer60 terrible tips for a C++ developer
60 terrible tips for a C++ developer
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error Examples
 
PVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature OverviewPVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature Overview
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
PVS-Studio в 2021
PVS-Studio в 2021PVS-Studio в 2021
PVS-Studio в 2021
 
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' Mistakes
 
Does static analysis need machine learning?
Does static analysis need machine learning?Does static analysis need machine learning?
Does static analysis need machine learning?
 
Typical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaTypical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and Java
 
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
 
Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?
 
C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical Reviewer
 
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareThe Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
 
Static Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineStatic Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal Engine
 
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsSafety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
 
The Great and Mighty C++
The Great and Mighty C++The Great and Mighty C++
The Great and Mighty C++
 
Static code analysis: what? how? why?
Static code analysis: what? how? why?Static code analysis: what? how? why?
Static code analysis: what? how? why?
 
Zero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youZero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for you
 

SAST, борьба с потенциальными уязвимостями

  • 1. SAST, борьба с потенциальными уязвимостями Андрей Карпов
  • 2. Зачем слушать этот доклад? • Пока все рассаживаются, немного юмора • Уязвимости - это те же самые ошибки. Зачем их выделять в отдельный класс? • Последствия! 2
  • 3. Как стать ценным программистом/специалистом DevOps экспертом по безопасности 3
  • 4. Докладчик • Карпов Андрей Николаевич, 1981 • Присутствует на Habrahabr под именем Andrey2008 - habr.com/users/andrey2008/ • Технический директор ООО «СиПроВер» • MVP в категории Developer Technologies • Intel Black Belt Software Developer • Один из основателей проекта PVS-Studio (статический анализатор кода для языков C/C++/C#/Java). • karpov@viva64.com 4
  • 6. Обзор кода • Старый добрый метод поиска ошибок и уязвимостей: обзор кода • Преимущества: – обмен опытом – поиск высокоуровневых ошибок • Минусы: – Очень дорого – В больших проектах сложно заметить некоторые ошибки 6
  • 7. Обзор кода - анекдот в тему Жила-была девочка, и была у нее кофточка. И когда девочка надевала кофточку, кофточка начинала душить девочку. Пошла девочка к маме и рассказала ей обо всем. Мама выслушала ее и купила ей другую кофточку. И в самом деле, нельзя же одну кофточку носить десять лет. 7
  • 8. Обзоры кода - это замечательно, но их стало недостаточно • MS DOS 1.0 : 4 000 строк кода • Ядро Linux 1.0.0 : 176 250 строк кода • Ядро Linux 4.11.7 в 100 раз больше: 18 373 471 строк кода • Photoshop 1.0 : 128 000 строк кода • Photoshop CS 6 : 10 000 000 строк кода 8
  • 9. Статический анализ кода • Автоматический процесс обзора кода • Преимущества: – Малозатратно – Анализатор не устаёт – Анализатор знает про ошибочные паттерны, о которых не догадываются программисты • Минусы: – Искусственный интеллект пока не создан – Нельзя найти высокоуровневые ошибки • Не ищите "серебряную пулю" 9
  • 10. Static Application Security Testing (SAST) • Статическое тестирование защищённости приложений • С точки зрения программиста, ошибки почти не отличаются от потенциальных уязвимостей • Зато они отличаются опасностью Ошибка Уязвимость 10
  • 11. Dynamic application security testing (DAST) • Динамический анализ кода • Санитайзеры • Преимущества: – Нет ложных срабатываний • Недостатки: – Медленно – Часто нужны специальные входные данные 11
  • 12. SAST или DAST ? SAST DAST Все уязвимости 12
  • 13. Две разновидности SAST • Поиск известных CVE • Профилактика новых CVE 13
  • 14. Поиск известных CVE • Важно и полезно • Аналогия: антивирусы • Нет ложных срабатываний • Но находится только то, что уже известно • Особенно полезно в больших старых проектах 14
  • 15. А что делать с новым кодом? • Неэффективно искать именно уязвимости • Надо устранять в коде дефекты, которые могут стать причинами уязвимостей • Это проще и полезнее • Аналогия: строительство 15
  • 17. Выявление потенциальных уязвимостей • Нет разницы между просто ошибкой и потенциальной уязвимостью • Но есть ошибки, которые более тяготеют к проблемам безопасности • Для их выявления полезно реализовать специализированные диагностики 17
  • 18. Технология анализа потока управления на примере PVS-Studio • В начале поясню, что это такое • Далее рассмотрим специализированную диагностику V1010 18
  • 19. static const int kDaysInMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; bool ValidateDateTime(const DateTime& time) { if (time.year < 1 || time.year > 9999 || time.month < 1 || time.month > 12 || time.day < 1 || time.day > 31 || time.hour < 0 || time.hour > 23 || time.minute < 0 || time.minute > 59 || time.second < 0 || time.second > 59) { return false; } if (time.month == 2 && IsLeapYear(time.year)) { return time.month <= kDaysInMonth[time.month] + 1; } else { return time.month <= kDaysInMonth[time.month]; } }19
  • 20. static const int kDaysInMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; bool ValidateDateTime(const DateTime& time) { if (time.year < 1 || time.year > 9999 || time.month < 1 || time.month > 12 || time.day < 1 || time.day > 31 || time.hour < 0 || time.hour > 23 || time.minute < 0 || time.minute > 59 || time.second < 0 || time.second > 59) { return false; } if (time.month == 2 && IsLeapYear(time.year)) { return time.month <= kDaysInMonth[time.month] + 1; } else { return time.month <= kDaysInMonth[time.month]; } }20
  • 21. static const int kDaysInMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; bool ValidateDateTime(const DateTime& time) { if (time.year < 1 || time.year > 9999 || time.month < 1 || time.month > 12 || time.day < 1 || time.day > 31 || time.hour < 0 || time.hour > 23 || time.minute < 0 || time.minute > 59 || time.second < 0 || time.second > 59) { return false; } if (time.month == 2 && IsLeapYear(time.year)) { return time.month <= kDaysInMonth[time.month] + 1; } else { return time.month <= kDaysInMonth[time.month]; } }21
  • 22. static const int kDaysInMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; bool ValidateDateTime(const DateTime& time) { if (time.year < 1 || time.year > 9999 || time.month < 1 || time.month > 12 || time.day < 1 || time.day > 31 || time.hour < 0 || time.hour > 23 || time.minute < 0 || time.minute > 59 || time.second < 0 || time.second > 59) { return false; } if (time.month == 2 && IsLeapYear(time.year)) { return time.month <= kDaysInMonth[time.month] + 1; } else { return time.month <= kDaysInMonth[time.month]; } } time.day22
  • 23. PVS-Studio: V1010 • В 2018 году появилась специализированная диагностика V1010, которая выявляет использование недостоверных данных (полученных извне) без их проверки • Диагностика поможет выявлять потенциальные уязвимости, которые можно классифицировать как CWE-20: Improper Input Validation 23
  • 24. Пример V1010 в проекте NcFTP static int NcFTPConfirmResumeDownloadProc(....) { .... (void) fgets(newname, sizeof(newname) - 1, stdin); newname[strlen(newname) - 1] = '0'; if (newname[0] == '0') { .... } V1010 Unchecked tainted data is used in index: 'strlen(newname)'. ncftp cmds.c 1228 24
  • 25. Пример V1010 в проекте NcFTP 25
  • 26. Многие уязвимости могут быть выявлены классическими диагностиками • Если обратиться к базе CVE, то выясняется, что часто причиной уязвимостей в программах являются не какие-то недоработки в системе безопасности, а обыкновенные программные ошибки. • Национальный институт стандартов и технологий (NIST) подтверждает это, заявляя, что 64% уязвимостей в программах связаны с ошибками в коде. 26
  • 27. Несколько примеров простых ошибок, приводящих к уязвимостям • "Случай из практики. Ваш продукт нашёл уязвимость в коде". (с) Кто-то на конференции C++ CoreHard Autumn 2017 https://youtu.be/g5JrD4QGvWA?t=42m32s • "Это всё слова. Покажи мне код". (c) Линус Торвальдс 27
  • 28. CVE-2014-1266static OSStatus SSLVerifySignedServerKeyExchange(.....) { OSStatus err; .... if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail; if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail; .... fail: SSLFreeBuffer(&signedHashes); SSLFreeBuffer(&hashCtx); return err; } PVS-Studio: • V640 / CWE-483 The code's operational logic does not correspond with its formatting. The statement is indented to the right, but it is always executed. It is possible that curly brackets are missing. • V779 / CWE-561 Unreachable code detected. It is possible that an error is present 28
  • 29. CVE-2012-2122 PVS-Studio: V642 Saving the 'memcmp' function result inside the 'char' type variable is inappropriate. The significant bits could be lost breaking the program's logic. password.c typedef char my_bool; my_bool check_scramble(const char *scramble_arg, const char *message, const uint8 *hash_stage2) { .... return memcmp(hash_stage2, hash_stage2_reassured, SHA1_HASH_SIZE); } 29
  • 30. Оно того стоит? • Да, используя SAST, можно предотвратить многие уязвимости ещё на этапе разработки • Стоимость: – Инструменты SAST дороги – Разработчикам нужно тратить время на работу с SAST инструментами 30
  • 31. За безопасность необходимо платить, а за ее отсутствие – расплачиваться. 31
  • 32. Внедрение инструментов статического анализа в цикл разработки ПО • К сожалению, статические анализаторы - это сложные инструменты, и «нужно уметь их готовить» • Далее рассмотрим: – Неправильные подходы – Самое главное: регулярность – PVS-Studio: быстрый старт – Внедрение в большой проект и 100500 срабатываний – PVS-Studio: работа с отчётом – SonarQube 32
  • 33. Неправильные подходы • Запуск перед релизом – Аналогия с предупреждениями компилятора – «Но вы ведь сами разово проверяете проекты и пишете статьи» У нас другая цель. • «Почему я не люблю синтетические тесты» https://www.viva64.com/ru/b/0471/ 33
  • 34. Самое главное: регулярность • Идея в том, чтобы ошибки и потенциальные уязвимости обнаруживалась как можно раньше • Варианты: – каждый раз после компиляции – ночные запуски анализатора • Пояснение. Да, уязвимости можно искать время от времени, но пользователь утонет в сообщениях и будет невнимателен 34
  • 35. PVS-Studio: быстрый старт • Отдельного внимания заслуживает возможность быстро попробовать PVS-Studio на любом проекте • Для этого можно отследить запуски компилятора и собрать всю необходимую для анализа информацию • Windows: – Утилита Standalone – Инструкция: http://www.viva64.com/ru/m/0033/ • Linux/macOS – Утилита pvs-studio-analyzer – Инструкция: см. «Быстрый старт» в документе http://www.viva64.com/ru/m/0036/ 35
  • 36. Внедрение в большой проект и 100500 срабатываний • PVS-Studio и другие профессиональные анализаторы предлагают массовое подавление срабатываний • Как это работает • А что делать с техническим долгом? 36
  • 37. PVS-Studio: работа с отчётом • Плагины (Visual Studio, SonarQube) • Конвертер (open source) • Рассылка сообщений по почте • Недавняя фича PVS-Studio: HTML отчёт 37
  • 38. SonarQube • «Контролируем качество кода с помощью платформы SonarQube» http://www.viva64.com/ru/b/0452/ 38
  • 39. Ах да, не забудьте взглянуть на PVS-Studio как SAST решение • PVS-Studio для DevSecOps • https://www.viva64.com/ru/sast/ 39
  • 40. Подходите пообщаться после выступления! • Сайт PVS-Studio: https://www.viva64.com • Контакты: CTO Андрей Карпов. karpov@viva64.com • Подписывайтесь на нас: – Telegram: pvsstudio_rus – Twitter: @Code_Analysis 40