SlideShare a Scribd company logo
1 of 35
DevSecOps против восстания машин
Сергей Хренов
PVS-Studio
Software Engineering Conference Russia
14-15 ноября, 2019. Санкт-Петербург
2/35
DevOps = системный администратор + программист
QA = тестировщик + программист
SecOps = security anything + программист
Зачем слушать этот доклад?
Чтобы больше зарабатывать денег!
3/35
Ядро Linux 1.0.0 : 177 000 строк кода
Ядро Linux 5.1-rc2 в 118 раз больше: 20 896 000 строк кода
Размер ИМЕЕТ значение
4/35
15.41
17.68
20.35
23.14
26.66
30.73
35.82
42.62
51.11
62.12
75.44
2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025
Источник: https://www.statista.com/statistics/471264/iot-number-of-connected-devices-worldwide/
Прогнозируемые темпы роста IoT
Миллиарды устройств
5/35
5632
16555
0
2000
4000
6000
8000
10000
12000
14000
16000
18000
2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
Источник: https://www.cvedetails.com
Число выявленных уязвимостей
6/35
CWE - Common Weakness
Enumeration
CVE - Common Vulnerabilities
and Exposures
Около 64% уязвимостей – программные ошибки (NIST)
7/35
“Хватит графиков! Покажите уже код”
8/35
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);
}
9/35
V597 [CWE-14] 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. wifi_generate_pin.c 185
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);
}
10/35
void
isf_wsc_context_del (WSCContextISF *wsc_ctx)
{
....
WSCContextISF* old_focused = _focused_ic;
_focused_ic = context_scim;
_focused_ic = old_focused;
....
}
11/35
V519 [CWE-563] The '_focused_ic' variable is assigned values twice successively. Perhaps
this is a mistake. Check lines: 1260, 1261. wayland_panel_agent_module.cpp 1261
void
isf_wsc_context_del (WSCContextISF *wsc_ctx)
{
....
WSCContextISF* old_focused = _focused_ic;
_focused_ic = context_scim;
_focused_ic = old_focused;
....
}
12/35
Хочется больше примеров из Tizen?
Проверка Tizen OS: часть 1.
27000 ошибок в операционной системе Tizen
Проверка Tizen OS: часть 2.
Поговорим о микрооптимизациях на примере кода Tizen
Проверка Tizen OS: часть 3.
Продолжаем изучать Tizen: C# компоненты оказались высокого качества
13/35
“Ошибки, уязвимости…
С этим можно как-то
бороться?”
14/35
Один из вариантов борьбы с уязвимостями в IoT
15/35
Два подхода к поиску уязвимостей
• Можно (и нужно) искать потенциальные уязвимости,
которые могут привести к реальным проблемам при
написании нового кода
• Можно искать по базе существующих известных
уязвимостей в своем имеющемся коде (с помощью
автоматизированных средств)
16/35
Как обнаружить уязвимости
 Code review
 Юнит-тесты
 Динамический анализ (DAST)
 Статический анализ (SAST)
 Стандарты кодирования
17/35
Code Review
• Плюсы:
– Обмен опытом
– Правки “по горячим следам”
• Минусы:
– Дорого и долго
– Быстро устаешь от просмотра кода
18/35
Динамический анализ кода
• Отладчики
• Профилировщики
• Санитайзеры (AddressSanitizer, ThreadSanitizer, ...)
• Нашли ошибку? Можно её сразу исправлять!
(нет ложных срабатываний)
19/35
Но...
• Отладить и протестировать
под embedded не всегда
просто
• Санитайзеры и
профилировщики
медленные
• Часто нужны специальные
входные данные
20/35
• Статический анализ, нацеленный на поиск и предотвращение
уязвимостей
• Уязвимости - те же самые обыкновенные ошибки (по данным NIST,
более 60%)
• Инструменты SAST помогают предотвращать уязвимости и
обеспечивают поддержку стандартов безопасной разработки:
CWE, MISRA, SEI CERT и т.п.
Static Application Security Testing (SAST)
21/35
• Преимущества:
- Раннее обнаружение проблем
- Покрытие всего кода
- Хорош в поиске опечаток и ошибок типа copy-paste
• Недостатки:
- Ложные срабатывания
- Неизвестна точная критичность ошибки
- Слабое диагностирование утечек памяти и параллельных ошибок
Static Application Security Testing (SAST)
22/35
Стандарты кодирования
• Common Weakness Enumeration
• SEI CERT Coding Standards
• MISRA C, MISRA C++
23/35
• CWE™ is a community-developed list of common
software security weaknesses
• https://cwe.mitre.org
• Cписок из более чем 800 потенциальных
уязвимостей, которые могут стать реальными. А
могут и не стать
CWE
24/35
CWE: примеры потенциальных уязвимостей
• CWE-570571: Expression is Always FalseTrue
• CWE-467: Use of sizeof() on a Pointer Type
• CWE-476: NULL Pointer Dereference
• CWE-14: Compiler Removal of Code to Clear Buffers
• CWE-369: Divide By Zero
• CWE-20: Improper Input Validation
25/35
bool operator <(const TSegment& other) const {
if (m_start < other.m_start)
return true;
if (m_start == other.m_start)
return m_len < m_len;
return false;
}
CWE-570: Expression is Always False
V501 There are identical sub-expressions to the left and to the right of the '<'
operator: m_len < m_len segmentor.h 65
26/35
CWE-697: Insufficient Comparison
static void __page_focus_changed_cb(void *data)
{
int i = 0;
int *focus_unit = (int *)data;
if (focus_unit == NULL || focus_unit < 0) {
_E("focus page is wrong");
return;
}
....
}
V503 This is a nonsensical comparison: pointer < 0. apps_view_circle_indicator.c 193
27/35
• CVE® is a list of publicly known cybersecurity vulnerabilities
• https://cve.mitre.org/
• Список из более чем 114 000 реальных уязвимостей,
найденных в приложениях
CVE
28/35
MISRA C/C++
• Motor Industry Software Reliability Association
• Закрытый стандарт кодирования. Доступен только за деньги
• Уменьшает вероятность допущения ошибки для
ответственных встраиваемых систем
• Анализаторы, проверяющие соответствие MISRA, не ищут
ошибки
• MISRA C 2012 cодержит 143 правила
• MISRA C++ 2008 cодержит 228 правил
29/35
Примеры рекомендаций из MISRA
CoreHard. Информационная безопасность и разработка ПО
• Каждый 'switch' должен содержать 'default'
• Возвращаемое значение non-void функций должно быть
использовано
• Функция должна иметь одну точку выхода
• Указатели должны иметь не более двух уровней вложенности
• Тела циклов и условных выражений должны быть заключены в {}
• Каждый 'if ... else if' должен иметь завершающий 'else'
• Не использовать unions
30/35
• Стандарт кодирования
• Разрабатывается координационным центром CERT (CERT
Coordination Center, CERT/CC)
• Предназначен для языков C, C++, Java, Perl
• Очень похож на CWE
SEI CERT
31/35
Заблуждения о SAST
• Дорого
• Не для новичков
• Сложно внедрять на
большом проекте
• Панацея от всех бед
32/35
Внедряем и используем SAST правильно
• Выбор подходящего
анализатора, настройка под
особенности проекта
• Создание suppress-базы,
инкрементальный анализ
• Регулярное использование
на CI-серверах и рабочих
местах разработчиков
33/35
Снижаем потери
34/35
 Не допускайте попадания проблем с безопасностью в
конечный продукт
 Инструменты SAST – лишь один из способов поиска
уязвимостей
 Используйте все доступные методологии контроля качества
кода
 Не экономьте на разработке в ущерб безопасности, тогда
сможете избежать трансформации затрат в расплату
Выводы
Сергей Хренов
C# разработчик, PVS-Studio
khrenov@viva64.com
www.viva64.com
Контакты

More Related Content

Similar to DevSecOps против восстания машин

From ERP to SCADA and back
From ERP to SCADA and backFrom ERP to SCADA and back
From ERP to SCADA and backqqlan
 
Как команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы TizenКак команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы TizenAndrey Karpov
 
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Andrey Karpov
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыd_olex
 
Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...
Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...
Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...Andrey Karpov
 
Нюансы функционирования и эксплуатации Cisco SOC
Нюансы функционирования и эксплуатации Cisco SOCНюансы функционирования и эксплуатации Cisco SOC
Нюансы функционирования и эксплуатации Cisco SOCAleksey Lukatskiy
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Tatyanazaxarova
 
Болевые точки корпоративной сети: взгляд не со стороны службы ИБ
Болевые точки корпоративной сети: взгляд не со стороны службы ИББолевые точки корпоративной сети: взгляд не со стороны службы ИБ
Болевые точки корпоративной сети: взгляд не со стороны службы ИБAleksey Lukatskiy
 
Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Andrey Karpov
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...corehard_by
 
Измерение эффективности SOC. 3 года спустя
Измерение эффективности SOC. 3 года спустяИзмерение эффективности SOC. 3 года спустя
Измерение эффективности SOC. 3 года спустяAleksey Lukatskiy
 
Борьба с вредоносным кодом: от базовых мер к целостной стратегии
Борьба с вредоносным кодом: от базовых мер к целостной стратегииБорьба с вредоносным кодом: от базовых мер к целостной стратегии
Борьба с вредоносным кодом: от базовых мер к целостной стратегииAleksey Lukatskiy
 
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасность
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасностьКак оценить пользу от ИБ и увязать с нею инвестиции в безопасность
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасностьVsevolod Shabad
 
IBM - SIEM 2.0: Информационая безопасность с открытыми глазами
IBM - SIEM 2.0: Информационая безопасность с открытыми глазамиIBM - SIEM 2.0: Информационая безопасность с открытыми глазами
IBM - SIEM 2.0: Информационая безопасность с открытыми глазамиExpolink
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeTatyanazaxarova
 
Проблемы безопасной разработки и поддержки импортных средств защиты информации
Проблемы безопасной разработки и поддержки импортных средств защиты информацииПроблемы безопасной разработки и поддержки импортных средств защиты информации
Проблемы безопасной разработки и поддержки импортных средств защиты информацииAleksey Lukatskiy
 
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...Solar Security
 
Обзор портфолио экспертных сервисов.pdf
Обзор портфолио экспертных сервисов.pdfОбзор портфолио экспертных сервисов.pdf
Обзор портфолио экспертных сервисов.pdftrenders
 
Кирилл Набойщиков. Системный подход к защите КИИ
Кирилл Набойщиков. Системный подход к защите КИИКирилл Набойщиков. Системный подход к защите КИИ
Кирилл Набойщиков. Системный подход к защите КИИKaspersky
 
Обнаружение аномальной активности в сети
Обнаружение аномальной активности в сетиОбнаружение аномальной активности в сети
Обнаружение аномальной активности в сетиCisco Russia
 

Similar to DevSecOps против восстания машин (20)

From ERP to SCADA and back
From ERP to SCADA and backFrom ERP to SCADA and back
From ERP to SCADA and back
 
Как команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы TizenКак команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы Tizen
 
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективы
 
Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...
Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...
Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...
 
Нюансы функционирования и эксплуатации Cisco SOC
Нюансы функционирования и эксплуатации Cisco SOCНюансы функционирования и эксплуатации Cisco SOC
Нюансы функционирования и эксплуатации Cisco SOC
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?
 
Болевые точки корпоративной сети: взгляд не со стороны службы ИБ
Болевые точки корпоративной сети: взгляд не со стороны службы ИББолевые точки корпоративной сети: взгляд не со стороны службы ИБ
Болевые точки корпоративной сети: взгляд не со стороны службы ИБ
 
Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
 
Измерение эффективности SOC. 3 года спустя
Измерение эффективности SOC. 3 года спустяИзмерение эффективности SOC. 3 года спустя
Измерение эффективности SOC. 3 года спустя
 
Борьба с вредоносным кодом: от базовых мер к целостной стратегии
Борьба с вредоносным кодом: от базовых мер к целостной стратегииБорьба с вредоносным кодом: от базовых мер к целостной стратегии
Борьба с вредоносным кодом: от базовых мер к целостной стратегии
 
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасность
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасностьКак оценить пользу от ИБ и увязать с нею инвестиции в безопасность
Как оценить пользу от ИБ и увязать с нею инвестиции в безопасность
 
IBM - SIEM 2.0: Информационая безопасность с открытыми глазами
IBM - SIEM 2.0: Информационая безопасность с открытыми глазамиIBM - SIEM 2.0: Информационая безопасность с открытыми глазами
IBM - SIEM 2.0: Информационая безопасность с открытыми глазами
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMerge
 
Проблемы безопасной разработки и поддержки импортных средств защиты информации
Проблемы безопасной разработки и поддержки импортных средств защиты информацииПроблемы безопасной разработки и поддержки импортных средств защиты информации
Проблемы безопасной разработки и поддержки импортных средств защиты информации
 
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
 
Обзор портфолио экспертных сервисов.pdf
Обзор портфолио экспертных сервисов.pdfОбзор портфолио экспертных сервисов.pdf
Обзор портфолио экспертных сервисов.pdf
 
Кирилл Набойщиков. Системный подход к защите КИИ
Кирилл Набойщиков. Системный подход к защите КИИКирилл Набойщиков. Системный подход к защите КИИ
Кирилл Набойщиков. Системный подход к защите КИИ
 
Обнаружение аномальной активности в сети
Обнаружение аномальной активности в сетиОбнаружение аномальной активности в сети
Обнаружение аномальной активности в сети
 

More from 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
 

More from 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
 

DevSecOps против восстания машин

  • 1. DevSecOps против восстания машин Сергей Хренов PVS-Studio Software Engineering Conference Russia 14-15 ноября, 2019. Санкт-Петербург
  • 2. 2/35 DevOps = системный администратор + программист QA = тестировщик + программист SecOps = security anything + программист Зачем слушать этот доклад? Чтобы больше зарабатывать денег!
  • 3. 3/35 Ядро Linux 1.0.0 : 177 000 строк кода Ядро Linux 5.1-rc2 в 118 раз больше: 20 896 000 строк кода Размер ИМЕЕТ значение
  • 4. 4/35 15.41 17.68 20.35 23.14 26.66 30.73 35.82 42.62 51.11 62.12 75.44 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 Источник: https://www.statista.com/statistics/471264/iot-number-of-connected-devices-worldwide/ Прогнозируемые темпы роста IoT Миллиарды устройств
  • 5. 5/35 5632 16555 0 2000 4000 6000 8000 10000 12000 14000 16000 18000 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 Источник: https://www.cvedetails.com Число выявленных уязвимостей
  • 6. 6/35 CWE - Common Weakness Enumeration CVE - Common Vulnerabilities and Exposures Около 64% уязвимостей – программные ошибки (NIST)
  • 8. 8/35 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); }
  • 9. 9/35 V597 [CWE-14] 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. wifi_generate_pin.c 185 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); }
  • 10. 10/35 void isf_wsc_context_del (WSCContextISF *wsc_ctx) { .... WSCContextISF* old_focused = _focused_ic; _focused_ic = context_scim; _focused_ic = old_focused; .... }
  • 11. 11/35 V519 [CWE-563] The '_focused_ic' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 1260, 1261. wayland_panel_agent_module.cpp 1261 void isf_wsc_context_del (WSCContextISF *wsc_ctx) { .... WSCContextISF* old_focused = _focused_ic; _focused_ic = context_scim; _focused_ic = old_focused; .... }
  • 12. 12/35 Хочется больше примеров из Tizen? Проверка Tizen OS: часть 1. 27000 ошибок в операционной системе Tizen Проверка Tizen OS: часть 2. Поговорим о микрооптимизациях на примере кода Tizen Проверка Tizen OS: часть 3. Продолжаем изучать Tizen: C# компоненты оказались высокого качества
  • 13. 13/35 “Ошибки, уязвимости… С этим можно как-то бороться?”
  • 14. 14/35 Один из вариантов борьбы с уязвимостями в IoT
  • 15. 15/35 Два подхода к поиску уязвимостей • Можно (и нужно) искать потенциальные уязвимости, которые могут привести к реальным проблемам при написании нового кода • Можно искать по базе существующих известных уязвимостей в своем имеющемся коде (с помощью автоматизированных средств)
  • 16. 16/35 Как обнаружить уязвимости  Code review  Юнит-тесты  Динамический анализ (DAST)  Статический анализ (SAST)  Стандарты кодирования
  • 17. 17/35 Code Review • Плюсы: – Обмен опытом – Правки “по горячим следам” • Минусы: – Дорого и долго – Быстро устаешь от просмотра кода
  • 18. 18/35 Динамический анализ кода • Отладчики • Профилировщики • Санитайзеры (AddressSanitizer, ThreadSanitizer, ...) • Нашли ошибку? Можно её сразу исправлять! (нет ложных срабатываний)
  • 19. 19/35 Но... • Отладить и протестировать под embedded не всегда просто • Санитайзеры и профилировщики медленные • Часто нужны специальные входные данные
  • 20. 20/35 • Статический анализ, нацеленный на поиск и предотвращение уязвимостей • Уязвимости - те же самые обыкновенные ошибки (по данным NIST, более 60%) • Инструменты SAST помогают предотвращать уязвимости и обеспечивают поддержку стандартов безопасной разработки: CWE, MISRA, SEI CERT и т.п. Static Application Security Testing (SAST)
  • 21. 21/35 • Преимущества: - Раннее обнаружение проблем - Покрытие всего кода - Хорош в поиске опечаток и ошибок типа copy-paste • Недостатки: - Ложные срабатывания - Неизвестна точная критичность ошибки - Слабое диагностирование утечек памяти и параллельных ошибок Static Application Security Testing (SAST)
  • 22. 22/35 Стандарты кодирования • Common Weakness Enumeration • SEI CERT Coding Standards • MISRA C, MISRA C++
  • 23. 23/35 • CWE™ is a community-developed list of common software security weaknesses • https://cwe.mitre.org • Cписок из более чем 800 потенциальных уязвимостей, которые могут стать реальными. А могут и не стать CWE
  • 24. 24/35 CWE: примеры потенциальных уязвимостей • CWE-570571: Expression is Always FalseTrue • CWE-467: Use of sizeof() on a Pointer Type • CWE-476: NULL Pointer Dereference • CWE-14: Compiler Removal of Code to Clear Buffers • CWE-369: Divide By Zero • CWE-20: Improper Input Validation
  • 25. 25/35 bool operator <(const TSegment& other) const { if (m_start < other.m_start) return true; if (m_start == other.m_start) return m_len < m_len; return false; } CWE-570: Expression is Always False V501 There are identical sub-expressions to the left and to the right of the '<' operator: m_len < m_len segmentor.h 65
  • 26. 26/35 CWE-697: Insufficient Comparison static void __page_focus_changed_cb(void *data) { int i = 0; int *focus_unit = (int *)data; if (focus_unit == NULL || focus_unit < 0) { _E("focus page is wrong"); return; } .... } V503 This is a nonsensical comparison: pointer < 0. apps_view_circle_indicator.c 193
  • 27. 27/35 • CVE® is a list of publicly known cybersecurity vulnerabilities • https://cve.mitre.org/ • Список из более чем 114 000 реальных уязвимостей, найденных в приложениях CVE
  • 28. 28/35 MISRA C/C++ • Motor Industry Software Reliability Association • Закрытый стандарт кодирования. Доступен только за деньги • Уменьшает вероятность допущения ошибки для ответственных встраиваемых систем • Анализаторы, проверяющие соответствие MISRA, не ищут ошибки • MISRA C 2012 cодержит 143 правила • MISRA C++ 2008 cодержит 228 правил
  • 29. 29/35 Примеры рекомендаций из MISRA CoreHard. Информационная безопасность и разработка ПО • Каждый 'switch' должен содержать 'default' • Возвращаемое значение non-void функций должно быть использовано • Функция должна иметь одну точку выхода • Указатели должны иметь не более двух уровней вложенности • Тела циклов и условных выражений должны быть заключены в {} • Каждый 'if ... else if' должен иметь завершающий 'else' • Не использовать unions
  • 30. 30/35 • Стандарт кодирования • Разрабатывается координационным центром CERT (CERT Coordination Center, CERT/CC) • Предназначен для языков C, C++, Java, Perl • Очень похож на CWE SEI CERT
  • 31. 31/35 Заблуждения о SAST • Дорого • Не для новичков • Сложно внедрять на большом проекте • Панацея от всех бед
  • 32. 32/35 Внедряем и используем SAST правильно • Выбор подходящего анализатора, настройка под особенности проекта • Создание suppress-базы, инкрементальный анализ • Регулярное использование на CI-серверах и рабочих местах разработчиков
  • 34. 34/35  Не допускайте попадания проблем с безопасностью в конечный продукт  Инструменты SAST – лишь один из способов поиска уязвимостей  Используйте все доступные методологии контроля качества кода  Не экономьте на разработке в ущерб безопасности, тогда сможете избежать трансформации затрат в расплату Выводы
  • 35. Сергей Хренов C# разработчик, PVS-Studio khrenov@viva64.com www.viva64.com Контакты