Вы еще просто тестируете?							Тогда мы едем к вам!<br />Использование статического анализа при тестировании програмных п...
Статический анализ и безопасность.<br />Что делать, если ваш диагноз ложно-позитивный?<br />Я, ты, он, она ... Кто?<br />Э...
Анализ корректности работы программы без ее исполнения<br />Для любых значений переменных<br />Для произвольных входных да...
Классика жанра<br />	if ( !var ) {<br />			error(“Invalid variable”, var->name);<br />	} <br />
Ба! Знакомые все лица!<br /><ul><li>Переполнение буфера
Неинициализированные переменные
Некорректная работа с указателями
Ошибки работы с динамической памятью
Ошибки работы со строками
Использование пользовательских данных без верификации
Ошибки форматов
Противоречивые объявления
Недостижимый код
Деление на 0
Неэффективное/опасное использование С++
Ошибки распараллеливния
Некорректное использование API</li></li></ul><li>Время анализа 1-5х времени построения продукта<br />Отсутствует потребнос...
Меньше знаешь – крепче спишь?<br />Мощность анализа<br />Минимум ложной диагностики <br />Скорость работы<br />Каждый стат...
Зависимости между значениями<br />Источники ложнопозитивных сообщений<br />Несуществующие пути исполнения<br />int flag;<b...
Эффективность QAпроцессов во времени<br />Запуск <br />процесса<br />Эффективность статического анализа и <br />regression...
Уровни использования статического анализа<br />Меньше 5% времени разработчика<br />Идентификация грубых ошибок<br />Максим...
Upcoming SlideShare
Loading in …5
×

CodeFest 2011. Петунин Д. — Использование инструментов статического анализа при отладке и верификации безопасности ПО

814 views
742 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
814
On SlideShare
0
From Embeds
0
Number of Embeds
87
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

CodeFest 2011. Петунин Д. — Использование инструментов статического анализа при отладке и верификации безопасности ПО

  1. 1. Вы еще просто тестируете? Тогда мы едем к вам!<br />Использование статического анализа при тестировании програмных продуктов<br />Новосибирск, 19 марта 2011. Дмитрий Петунин<br />
  2. 2. Статический анализ и безопасность.<br />Что делать, если ваш диагноз ложно-позитивный?<br />Я, ты, он, она ... Кто?<br />Этот безопасный мир безопасного ПО.<br />Темы для размышления<br />
  3. 3. Анализ корректности работы программы без ее исполнения<br />Для любых значений переменных<br />Для произвольных входных данных<br />Анализируются все возможные пути исполнения<br />Статический анализ<br />Статический анализ <br />наиболее подходящая технология <br />для анализа безопасности программ<br />
  4. 4. Классика жанра<br /> if ( !var ) {<br /> error(“Invalid variable”, var->name);<br /> } <br />
  5. 5. Ба! Знакомые все лица!<br /><ul><li>Переполнение буфера
  6. 6. Неинициализированные переменные
  7. 7. Некорректная работа с указателями
  8. 8. Ошибки работы с динамической памятью
  9. 9. Ошибки работы со строками
  10. 10. Использование пользовательских данных без верификации
  11. 11. Ошибки форматов
  12. 12. Противоречивые объявления
  13. 13. Недостижимый код
  14. 14. Деление на 0
  15. 15. Неэффективное/опасное использование С++
  16. 16. Ошибки распараллеливния
  17. 17. Некорректное использование API</li></li></ul><li>Время анализа 1-5х времени построения продукта<br />Отсутствует потребность в тестах <br />Идентифицируются не только актуальные проблемы, но и потенциальные<br />Можно использовать для неполной программы<br />Верифицируются все элементы программы, в том числе и те, которые сложно проверить с помощью тестов<br />Найденные ошибки легко исправить<br />Невозможно не любить<br />
  18. 18. Меньше знаешь – крепче спишь?<br />Мощность анализа<br />Минимум ложной диагностики <br />Скорость работы<br />Каждый статический анализатор находит свой оптимум из трех параметров<br />
  19. 19. Зависимости между значениями<br />Источники ложнопозитивных сообщений<br />Несуществующие пути исполнения<br />int flag;<br />void doo(int *var) {<br /> if (flag == 1)<br /> *var = 1;<br />}<br />void foo() {<br />intvar;<br /> doo(&var);<br /> if (flag == 1)<br />printf("%dn", var);<br />}<br />Неинициализированное значение var<br />double foo(int x, int y) {<br /> return 1 / (x - y);<br />}<br />int main() {<br />printf("%fn", foo(6, 3));<br />printf("%fn", foo(3, 0));<br /> return 0;<br />}<br />Возможное деление на 0<br />double foo(int x, int y) {<br /> return 1 / (x - y);<br />}<br />int main() {<br />printf("%fn", foo(6, 3));<br />printf("%fn", foo(3, 0));<br /> return 0;<br />}<br />Возможное деление на 0<br />
  20. 20. Эффективность QAпроцессов во времени<br />Запуск <br />процесса<br />Эффективность статического анализа и <br />regression тестирования не снижаются со временем<br />
  21. 21. Уровни использования статического анализа<br />Меньше 5% времени разработчика<br />Идентификация грубых ошибок<br />Максимальное понимание проблем<br />Разработчик<br />Экономия на количестве запусков<br />Идентификация проблем дизайна<br />Баланс тестирование /cтат. анализ <br />Компонента<br />Существенные ресурсы QA на анализ<br />Повышенные расходы на коммуникацию<br />Mainline<br />Финальная валидация продукта<br />Большие расходы на коммуникацию<br />Нет выявления потенциальных проблем<br />Продукт<br />Эффективность анализа диагностики и процессные расходы <br />возрастают, потребность в HW ресурсах уменьшается<br />
  22. 22. Оценка уровня проекта по шкале безопасности<br />Наличие инженера безопасности<br />Треннинги для персонала<br />Наборы политик безопасности для каждого уровня <br />Применение инструментов обеспечения безопасности (статический анализ, …)<br />Процесс управления изменениями (безопасность)<br />Команда верификации безопасности ПО<br />План действий в случае обнаружения проблеммы безопасности в вашем ПО<br />Требования к процессу безопасной разработки ПО<br />Статический анализ является необходимым элементом процесса<br />
  23. 23. Положительный настрой<br /> Ваши друзья - разработчики, которые неравнодушны к качеству кода приложения. <br />Экономия времени на внедрение<br /> Первоначальный анализ доверьте разработчикам – сделают быстро, найдут дизайн проблемы.<br />Анализируйте только новые диагностики<br /> Эффективно используйте подавление нежелательной диагностики.<br />Рекомендации по внедрению статического анализа<br />
  24. 24. Если вы все еще просто тестируете – пора попробовать статический анализ.<br />
  25. 25. Спасибо за внимание!<br />
  26. 26. Optimization Notice<br />
  27. 27. Юридическая информация<br /><ul><li>Материалы, размещенные в данной презентации (далее по тексту — "материалы"), предоставлены корпорацией Intel (далее по тексту — "Intel") в качестве услуги потребителям, потенциальным потребителям ее продукции и потенциальным клиентам исключительно в информативных целях.
  28. 28. Обозначения BunnyPeople, Celeron, Celeron Inside, Centrino, логотипCentrino, Core Inside, Dialogic, FlashFile, i960, InstantIP, Intel, логотип Intel, Intel386, Intel486, Intel740, IntelDX2, IntelDX4, IntelSX2, Intel Core, Intel Inside, логотип Intel Inside, Intel. Leap ahead., логотип Intel. Leap ahead., Intel NetBurst, Intel NetMerge, Intel NetStructure, Intel SingleDriver, Intel SpeedStep, Intel StrataFlash, Intel Viiv, Intel vPro, Intel XScale, IPLink, Itanium, Itanium Inside, MCS, MMX, Oplus, OverDrive, PDCharm, Pentium, Pentium Inside, skoool, Sound Mark, The Journey Inside, VTune, Xeon и Xeon Inside являются товарными знаками, либо зарегистрированными товарными знаками, права на которые принадлежат корпорации Intel или ее подразделениям на территории США и других стран.
  29. 29. Публичное использование товарных знаков и фирменной символики Intel допускается исключительно с разрешения корпорации Intel. Добросовестное использование товарных знаков и фирменной символики Intel с целью рекламы и продвижения продукции корпорации Intel предполагает официальное уведомление в установленном порядке.
  30. 30. *Другие наименования и товарные знаки являются собственностью своих законных владельцев.
  31. 31. Copyright © 2011 Intel Corporation. Данные материалы охраняются авторским правом и защищены нормами международного законодательства об охране авторских прав и соответствующих международных соглашений. Без предварительного письменного согласия корпорации Intel не допускается их копирование, воспроизведение, внесение в них изменений, публикация, загрузка, размещение их в Интернете, пересылка или распространение любыми способами. Если данным документом недвусмысленно не предусмотрено иное, корпорация Intel и ее поставщики не предоставляют пользователю каких-либо прав собственности, как явных, так и подразумеваемых, в отношении каких-либо патентов, авторских прав, товарных знаков или сведений, составляющих коммерческую тайну. Иные права могут быть предоставлены Вам корпорацией Intel либо в письменной форме, либо путем внесения соответствующих положений в документацию, сопровождающую материалы.
  32. 32. МАТЕРИАЛЫ ПРЕДОСТАВЛЯЮТСЯ ПО ПРИНЦИПУ "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ, В ЧИСЛЕ ПРОЧЕГО, ГАРАНТИЙ В ОТНОШЕНИИ ИХ РЫНОЧНЫХ КАЧЕСТВ, НЕНАРУШЕНИЯ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ ИЛИ ПРИГОДНОСТИ К ИСПОЛЬЗОВАНИЮ В ТЕХ ИЛИ ИНЫХ КОНКРЕТНЫХ ЦЕЛЯХ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ КОРПОРАЦИЯ INTEL ИЛИ ЕЕ ПОСТАВЩИКИ НЕ НЕСУТ КАКОЙ-ЛИБО ОТВЕТСТВЕННОСТИ ЗА УЩЕРБ (ВКЛЮЧАЯ, В ЧИСЛЕ ПРОЧЕГО, УПУЩЕННУЮ ВЫГОДУ, ПОСЛЕДСТВИЯ ПРИОСТАНОВКИ ПРЕДПРИНИМАТЕЛЬСКОЙ ДЕЯТЕЛЬНОСТИ ИЛИ ПОТЕРЮ ДАННЫХ), ВЫТЕКАЮЩИЙ ИЗ ФАКТА ИСПОЛЬЗОВАНИЯ МАТЕРИАЛОВ, ЛИБО НЕВОЗМОЖНОСТИ ИХ ИСПОЛЬЗОВАТЬ, ЧТО РАСПРОСТРАНЯЕТСЯ И НА ТЕ СЛУЧАИ, КОГДА КОРПОРАЦИЯ INTEL БЫЛА ПРЕДУПРЕЖДЕНА О ВОЗМОЖНОСТИ НАНЕСЕНИЯ ТАКОГО УЩЕРБА. УЧИТЫВАЯ, ЧТО ЗАКОНОДАТЕЛЬСТВО, ДЕЙСТВУЮЩЕЕ В РЯДЕ ЮРИСДИКЦИЙ, НЕ ДОПУСКАЕТ ОГРАНИЧЕНИЯ ИЛИ ОТКАЗА ОТ ОТВЕТСТВЕННОСТИ ЗА ПОБОЧНЫЙ ИЛИ КОСВЕННЫЙ УЩЕРБ, ИЗЛОЖЕННОЕ ВЫШЕ ПОЛОЖЕНИЕ МОЖЕТ К ВАМ НЕ ОТНОСИТЬСЯ. Корпорация Intel и ее поставщики не гарантируют точности или полноты текстовой или графической информации, ссылок и иного содержания материалов. Корпорация Intel вправе в любое время и без предварительного уведомления вносить любые изменения в указанные материалы, а равно и в продукцию, описанием которой они служат. Корпорация Intel не берет на себя каких-либо обязательств по обновлению материалов.</li></li></ul><li>Бонус трэк<br />
  33. 33. char lname[FILENAME_MAX];<br /> for (icount = 0; icount < FILENAME_MAX; icount++) {<br />lname[icount] = name[icount];<br /> if ((lname[icount]) == ':') {<br />lname[icount+1] = 0;<br /> break;<br /> }<br /> }<br />banner.c(212): Buffer overflow: array index of "lname" is possibly outside the bounds; array "lname" of size (0:259) can be indexed by value 260<br />
  34. 34. Example (Tachyon)<br />static void grid_free(void * v) {<br />      ...<br />      for (i=0; i<numvoxels; i++) {<br />            ...<br />            while (lcur != NULL) {<br />                  lnext = lcur->next;<br />                  free(lcur);<br />            }<br />      }<br />      ...<br />}<br />grid.cpp(131): error #12082: infinite loop<br />
  35. 35. Example (Notepad++)<br />} catch (...) {<br />   TCHAR funcInfo[128];<br />   generic_sprintf(funcInfo,<br /> TEXT("notify(SCNotification *notification) : r<br /> notification->nmhdr.code == %dr notification- <br /> >nmhdr.hwndFrom == %dr notification->nmhdr.idFrom<br /> == %d"),<br />   scNotif.nmhdr.code, scNotif.nmhdr.hwndFrom, <br />scNotif.nmhdr.idFrom);<br />   ...<br />}<br /> PluginsManager.cpp(421): error #12224: buffer overflow: size of object "funcInfo" (128 bytes) is less than required size (139 bytes)<br />
  36. 36. Conditional paths<br />int flag;<br />void doo(int *var)<br />{<br /> if (flag == 1)<br /> *var = 1;<br />}<br />void foo()<br />{<br /> int var;<br /> doo(&var);<br /> if (flag == 1)<br /> printf("%dn", var);<br />}<br />Diagnostics is not reported<br />int flag1, flag2;<br />void test()<br />{<br /> int var;<br /> if (flag1 && flag2) <br /> var = 1;<br /> if (flag1 && flag2)<br /> printf("%dn", var);<br /> if (flag1)<br /> printf("%dn", var);<br />}<br />Diagnostics is reported in second case<br />

×