SlideShare a Scribd company logo
Статические
анализаторы кода как
DevSecOps решение
20 апреля 2019 года
Holiday Inn Moscow Sokolniki
2
Пара слов о себе
• Юрий Минаев
• C++ разработчик в
компании PVS-Studio
• minaev@viva64.com
3
DevSecOps
4
https://www.nist.gov/sites/default/files/documents/director/planning/report02-3.pdf
5
6
Как обнаружить уязвимости
 Code review
 Юнит-тесты и динамический
анализ
 Статический анализ
7
Code Review
8
Code Review
• Плюсы:
– Обмен опытом
– Правки “по горячим следам”
• Минусы:
– Дорого и долго
– Быстро устаешь от просмотра кода
9
Статический анализ кода
• Это как code review, только происходит
автоматически
10
Статический анализ кода
• Плюсы:
– Малозатратно
– Анализатор не устает
– Анализатор знает про ошибочные паттерны, о
которых не догадываются программисты
• Минусы:
– Ложные срабатывания
– Нельзя найти высокоуровневые ошибки
– Сложно с многопоточностью
11
Динамический анализ
• Плюсы:
– Анализ в процессе выполнения
– Нет ложных срабатываний
• Минусы:
– Санитайзеры и профилировщики медленные
– Часто нужны специальные входные данные
– Не все случаи можно покрыть тестами
12
Какой метод лучше?
13
Про подпорченную
репутацию
14
Современные анализаторы
 Интеграция в IDE
 Интеграция в системы сборки и CI
 Инкрементальный анализ
 Механизмы подавления шума
15
Интеграция с CI
 Запуск как шаг
сборки
 Отчеты о
найденных
ошибках
SonarQube
• «Контролируем качество кода с помощью платформы
SonarQube»
http://www.viva64.com/ru/b/0452/ 16
17
Static Application Security Testing
(SAST)
 Автоматизированный поиск багов
в коде
 Выявление уязвимостей, которые
происходят из-за программных
ошибок
 Более 60% уязвимостей – это
программные ошибки © NIST
18
От ошибки до уязвимости
19
Две разновидности SAST
 Поиск известных уязвимостей
 Профилактика новых уязвимостей
20
Немного терминов
• CWE – Common Weakness
Enumeration
• SEI CERT – Software Engineering
Institute Coding Standard
• CVE - Common Vulnerabilities and
Exposures
• MISRA - Motor Industry Software
Reliability Association
21
• CWE™ is a community-developed list
of common software security
weaknesses.
• Это список потенциальных
уязвимостей, которые могут стать
реальными.
• Сайт: https://cwe.mitre.org
• 806 потенциальных уязвимостей.
22
• Стандарт от CERT Coordination
Center, CERT/CC
• Содержит правила для C, C++, Java,
Perl
• Много пересечений с CWE
• Сайт: https://wiki.sei.cmu.edu/
23
Пример CWE
static void
SHA1Final(unsigned char digest[20],
SHA1_CTX *context)
{
u32 i;
unsigned char finalcount[8];
....
memset(context->count, 0, 8);
memset(finalcount, 0, 8);
}
24
Пример CWE
static void
SHA1Final(unsigned char digest[20],
SHA1_CTX *context)
{
....
memset(finalcount, 0, 8);
}
CWE-14 V597 The compiler could delete the 'memset' function
call, which is used to flush 'finalcount' buffer. The memset_s()
function should be used to erase the private data.
25
https://godbolt.org/
CWE-14
26
CWE-14: Compiler Removal of Code to Clear Buffers
https://cwe.mitre.org/data/definitions/14.html
27
• CVE - реальные уязвимости,
найденные в приложениях.
• Сайт: https://cve.mitre.org/
• Total CVE Entries: 114 142
28
static OSStatus
SSLVerifySignedServerKeyExchange(....)
{
....
if ((err = SSLHashSHA1.update(
&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;
....
fail:
....;
}
• V640 The code's operational logic does not correspond with its formatting
• V779 Unreachable code detected. It is possible that an error is present
CVE-2014-1266
29
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);
}
• V642 Saving the 'memcmp' function result inside the 'char' type variable is
inappropriate. The significant bits could be lost breaking the program's logic.
CVE-2012-2122
30
• Платный стандарт кодирования.
• Сайт: https://www.misra.org.uk/
• 143 правила в MISRA-C:2012
• 228 правил в MISRA-C++:2008
31
Примеры правил MISRA
• Не используйте восьмеричные константы
• Не используйте goto
• Функция должна иметь ровно одну точку
выхода
• Не используйте функции стандартной
библиотеки
(atof/…/abort/exit/getenv/system/…)
• Не используйте динамические аллокации
• Каждый case должен заканчиваться break
или throw
32
33
Как использовать стандарты
неправильно
34
Как использовать стандарты
неправильно
35
А что с легаси?
 Берем старый проект с большим
объемом кода
 Запускаем анализ в вашем
любимом анализаторе
 Получаем...
36
… кучу предупреждений
37
Как правильно
 Прогнать анализ один раз
 Подавить все предупреждения
 Запускать анализ на новом коде
 Постепенно исправлять старый и
проверять правки
38
Сценарий использования
39
И регулярно!
40
Заключение
 Проблемы с безопасностью дорого
обходятся, если попадают в конечный
продукт
 Статический анализ кода – один из
способов поиска уязвимостей
 Регулярные проверки позволяют
устранять потенциальные уязвимости
на ранних стадиях
41
Вопросы
 Сайт PVS-Studio:
https://www.viva64.com
 Контакты:
Юрий Минаев
minaev@viva64.com

More Related Content

PPTX
Статический анализ: ищем ошибки... и уязвимости?
PPTX
Статический анализ как ответ на вопрос о повышении качества кода
PPTX
Аскетичная разработка браузера
PPTX
Основы и применение статического анализа кода при разработке лекция 1
PPTX
Павел Беликов, Как избежать ошибок, используя современный C++
PDF
C++ exceptions
PPT
Юнит-тестирование и Google Mock. Влад Лосев, Google
PDF
Цена ошибки
Статический анализ: ищем ошибки... и уязвимости?
Статический анализ как ответ на вопрос о повышении качества кода
Аскетичная разработка браузера
Основы и применение статического анализа кода при разработке лекция 1
Павел Беликов, Как избежать ошибок, используя современный C++
C++ exceptions
Юнит-тестирование и Google Mock. Влад Лосев, Google
Цена ошибки

What's hot (20)

PPTX
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
PPTX
Асинхронность и сопрограммы
PPTX
Улучшение качества открытого программного обеспечения с помощью инструментов ...
PDF
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
PPTX
Григорий Демченко, Асинхронность и неблокирующая синхронизация
PDF
DI в C++ тонкости и нюансы
PDF
Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠ CoreHa...
PPTX
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
PDF
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
PPTX
SAST, борьба с потенциальными уязвимостями
PDF
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
PPTX
Всё о статическом анализе кода для Java программиста
PPTX
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
PPTX
Статический анализ кода: Что? Как? Зачем?
PDF
Алексей Андросов - Debugger: Отладка кода
PDF
A Method of Building Extended Finite State Machines According to HDL-Descript...
PPTX
Что могут статические анализаторы, чего не могут программисты и тестировщики
PPTX
Принципы работы статического анализатора кода PVS-Studio
PPTX
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PDF
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Асинхронность и сопрограммы
Улучшение качества открытого программного обеспечения с помощью инструментов ...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Григорий Демченко, Асинхронность и неблокирующая синхронизация
DI в C++ тонкости и нюансы
Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠ CoreHa...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
SAST, борьба с потенциальными уязвимостями
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Всё о статическом анализе кода для Java программиста
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Статический анализ кода: Что? Как? Зачем?
Алексей Андросов - Debugger: Отладка кода
A Method of Building Extended Finite State Machines According to HDL-Descript...
Что могут статические анализаторы, чего не могут программисты и тестировщики
Принципы работы статического анализатора кода PVS-Studio
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Ad

Similar to Статические анализаторы кода как DevSecOps решение (20)

PPTX
SAST и Application Security: как бороться с уязвимостями в коде
PPTX
DevSecOps против восстания машин
PPTX
SAST, CWE, SEI CERT и другие умные слова из мира информационной безопасности
PPTX
Поиск уязвимостей с использованием статического анализа кода
PPTX
Поиск уязвимостей с использованием статического анализа кода
PPTX
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
PPTX
Статический анализ кода: современный взгляд
PDF
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
PPTX
Современный статический анализ кода: что умеет он, чего не умели линтеры
PPTX
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
PPTX
Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт
PPTX
Применение статического анализа кода в преподавании и в разработке свободного ПО
PDF
Поиск уязвимостей в программах с помощью анализаторов кода
PPTX
На что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
PPTX
Качество кода игровых движков: неужели всё так плохо?
PPTX
Выявление ошибок и потенциальных уязвимостей в C и C++ коде с помощью анализа...
PDF
Разница в подходах анализа кода компилятором и выделенным инструментом
PPTX
Эффективный C++
PPTX
Опыт разработки статического анализатора кода
PPTX
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
SAST и Application Security: как бороться с уязвимостями в коде
DevSecOps против восстания машин
SAST, CWE, SEI CERT и другие умные слова из мира информационной безопасности
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
Статический анализ кода: современный взгляд
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Современный статический анализ кода: что умеет он, чего не умели линтеры
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт
Применение статического анализа кода в преподавании и в разработке свободного ПО
Поиск уязвимостей в программах с помощью анализаторов кода
На что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
Качество кода игровых движков: неужели всё так плохо?
Выявление ошибок и потенциальных уязвимостей в C и C++ коде с помощью анализа...
Разница в подходах анализа кода компилятором и выделенным инструментом
Эффективный C++
Опыт разработки статического анализатора кода
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
Ad

More from Andrey Karpov (20)

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

Статические анализаторы кода как DevSecOps решение