21
1 1 Вы еще просто тестируете? Тогда мы едем к вам! Использование статического анализа при тестировании програмных продуктов Новосибирск, 19 марта 2011. Дмитрий Петунин

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

11

Вы еще просто тестируете?Тогда мы едем к вам!

Использование статического анализа при тестировании програмных продуктов

Новосибирск, 19 марта 2011. Дмитрий Петунин

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

22

• Статический анализ и безопасность.

• Что делать, если ваш диагноз ложно-позитивный?

• Я, ты, он, она ... Кто?• Этот безопасный мир

безопасного ПО.

Темы для размышления

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

33

Анализ корректности работы программы без ее исполнения– Для любых значений переменных– Для произвольных входных данных– Анализируются все возможные пути исполнения

Статический анализ

Статический анализ наиболее подходящая технология

для анализа безопасности программ

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

44

Классика жанра

if ( !var ) {error(“Invalid variable”, var-

>name);}

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

55

Ба! Знакомые все лица!

Переполнение буфера Неинициализированные

переменные Некорректная работа с

указателями Ошибки работы с

динамической памятью Ошибки работы со

строками Использование

пользовательских данных без верификации

Ошибки форматов Противоречивые

объявления Недостижимый код Деление на 0 Неэффективное/опасное

использование С++ Ошибки

распараллеливния Некорректное

использование API

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

66

• Время анализа 1-5х времени построения продукта

• Отсутствует потребность в тестах • Идентифицируются не только актуальные

проблемы, но и потенциальные• Можно использовать для неполной

программы• Верифицируются все элементы программы,

в том числе и те, которые сложно проверить с помощью тестов

• Найденные ошибки легко исправить

Невозможно не любить

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

77

Меньше знаешь – крепче спишь?

Мощность анализа

Минимум ложной диагностики

Скорость работы

Каждый статический анализатор находит свой оптимум из трех параметров

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

88

Зависимости между значениями

Источники ложнопозитивных сообщений

double foo(int x, int y) { return 1 / (x - y);}

int main() { printf("%f\n", foo(6, 3)); printf("%f\n", foo(3, 0)); return 0;}

Возможное деление на 0

Несуществующие пути исполненияdouble foo(int x, int y) { return 1 / (x - y);}

int main() { printf("%f\n", foo(6, 3)); printf("%f\n", foo(3, 0)); return 0;}

Возможное деление на 0

int flag;

void doo(int *var) { if (flag == 1) *var = 1;}

void foo() {int var;

doo(&var); if (flag == 1) printf("%d\n", var);}

Неинициализированное значение var

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

99

Эффективность QA процессов во времени

Запуск процесса

Эффективность статического анализа и regression тестирования не снижаются со временем

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

1010

Уровни использования статического анализа

Компонента

Mainline

Продукт

Разработчик

Финальная валидация продуктаБольшие расходы на коммуникациюНет выявления потенциальных проблем

Существенные ресурсы QA на анализПовышенные расходы на коммуникацию

Экономия на количестве запусковИдентификация проблем дизайнаБаланс тестирование / cтат. анализ

Меньше 5% времени разработчикаИдентификация грубых ошибок Максимальное понимание проблем

Эффективность анализа диагностики и процессные расходы возрастают, потребность в HW ресурсах уменьшается

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

1111

• Оценка уровня проекта по шкале безопасности

• Наличие инженера безопасности• Треннинги для персонала• Наборы политик безопасности для каждого

уровня • Применение инструментов обеспечения

безопасности (статический анализ, …)• Процесс управления изменениями

(безопасность)• Команда верификации безопасности ПО• План действий в случае обнаружения

проблеммы безопасности в вашем ПО

Требования к процессу безопасной разработки ПО

Статический анализ является необходимым элементом процесса

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

1212

Положительный настройВаши друзья - разработчики, которые неравнодушны к качеству кода приложения.

Экономия времени на внедрениеПервоначальный анализ доверьте разработчикам – сделают быстро, найдут дизайн проблемы.

Анализируйте только новые диагностикиЭффективно используйте подавление нежелательной диагностики.

Рекомендации по внедрению статического анализа

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

1313

Если вы все еще просто тестируете – пора попробовать статический анализ.

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

1414

Спасибо за внимание!

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

1515

Optimization Notice

Optimization Notice

Intel® compilers, associated libraries and associated development tools may include or utilize options that optimize for instruction sets that are available in both Intel® and non-Intel microprocessors (for example SIMD instruction sets), but do not optimize equally for non-Intel microprocessors. In addition, certain compiler options for Intel compilers, including some that are not specific to Intel micro-architecture, are reserved for Intel microprocessors. For a detailed description of Intel compiler options, including the instruction sets and specific microprocessors they implicate, please refer to the “Intel® Compiler User and Reference Guides” under “Compiler Options." Many library routines that are part of Intel® compiler products are more highly optimized for Intel microprocessors than for other microprocessors. While the compilers and libraries in Intel® compiler products offer optimizations for both Intel and Intel-compatible microprocessors, depending on the options you select, your code and other factors, you likely will get extra performance on Intel microprocessors.

Intel® compilers, associated libraries and associated development tools may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include Intel® Streaming SIMD Extensions 2 (Intel® SSE2), Intel® Streaming SIMD Extensions 3 (Intel® SSE3), and Supplemental Streaming SIMD Extensions 3 (Intel® SSSE3) instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors.

While Intel believes our compilers and libraries are excellent choices to assist in obtaining the best performance on Intel® and non-Intel microprocessors, Intel recommends that you evaluate other compilers and libraries to determine which best meet your requirements. We hope to win your business by striving to offer the best performance of any compiler or library; please let us know if you find we do not.

Notice revision #20101101

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

1616

Юридическая информация• Материалы, размещенные в данной презентации (далее по тексту — "материалы"), предоставлены корпорацией Intel (далее по

тексту — "Intel") в качестве услуги потребителям, потенциальным потребителям ее продукции и потенциальным клиентам исключительно в информативных целях.

• Обозначения 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 или ее подразделениям на территории США и других стран.

• Публичное использование товарных знаков и фирменной символики Intel допускается исключительно с разрешения корпорации Intel. Добросовестное использование товарных знаков и фирменной символики Intel с целью рекламы и продвижения продукции корпорации Intel предполагает официальное уведомление в установленном порядке.

• *Другие наименования и товарные знаки являются собственностью своих законных владельцев.• Copyright © 2011 Intel Corporation. Данные материалы охраняются авторским правом и защищены нормами международного

законодательства об охране авторских прав и соответствующих международных соглашений. Без предварительного письменного согласия корпорации Intel не допускается их копирование, воспроизведение, внесение в них изменений, публикация, загрузка, размещение их в Интернете, пересылка или распространение любыми способами. Если данным документом недвусмысленно не предусмотрено иное, корпорация Intel и ее поставщики не предоставляют пользователю каких-либо прав собственности, как явных, так и подразумеваемых, в отношении каких-либо патентов, авторских прав, товарных знаков или сведений, составляющих коммерческую тайну. Иные права могут быть предоставлены Вам корпорацией Intel либо в письменной форме, либо путем внесения соответствующих положений в документацию, сопровождающую материалы.

• МАТЕРИАЛЫ ПРЕДОСТАВЛЯЮТСЯ ПО ПРИНЦИПУ "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ, В ЧИСЛЕ ПРОЧЕГО, ГАРАНТИЙ В ОТНОШЕНИИ ИХ РЫНОЧНЫХ КАЧЕСТВ, НЕНАРУШЕНИЯ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ ИЛИ ПРИГОДНОСТИ К ИСПОЛЬЗОВАНИЮ В ТЕХ ИЛИ ИНЫХ КОНКРЕТНЫХ ЦЕЛЯХ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ КОРПОРАЦИЯ INTEL ИЛИ ЕЕ ПОСТАВЩИКИ НЕ НЕСУТ КАКОЙ-ЛИБО ОТВЕТСТВЕННОСТИ ЗА УЩЕРБ (ВКЛЮЧАЯ, В ЧИСЛЕ ПРОЧЕГО, УПУЩЕННУЮ ВЫГОДУ, ПОСЛЕДСТВИЯ ПРИОСТАНОВКИ ПРЕДПРИНИМАТЕЛЬСКОЙ ДЕЯТЕЛЬНОСТИ ИЛИ ПОТЕРЮ ДАННЫХ), ВЫТЕКАЮЩИЙ ИЗ ФАКТА ИСПОЛЬЗОВАНИЯ МАТЕРИАЛОВ, ЛИБО НЕВОЗМОЖНОСТИ ИХ ИСПОЛЬЗОВАТЬ, ЧТО РАСПРОСТРАНЯЕТСЯ И НА ТЕ СЛУЧАИ, КОГДА КОРПОРАЦИЯ INTEL БЫЛА ПРЕДУПРЕЖДЕНА О ВОЗМОЖНОСТИ НАНЕСЕНИЯ ТАКОГО УЩЕРБА. УЧИТЫВАЯ, ЧТО ЗАКОНОДАТЕЛЬСТВО, ДЕЙСТВУЮЩЕЕ В РЯДЕ ЮРИСДИКЦИЙ, НЕ ДОПУСКАЕТ ОГРАНИЧЕНИЯ ИЛИ ОТКАЗА ОТ ОТВЕТСТВЕННОСТИ ЗА ПОБОЧНЫЙ ИЛИ КОСВЕННЫЙ УЩЕРБ, ИЗЛОЖЕННОЕ ВЫШЕ ПОЛОЖЕНИЕ МОЖЕТ К ВАМ НЕ ОТНОСИТЬСЯ. Корпорация Intel и ее поставщики не гарантируют точности или полноты текстовой или графической информации, ссылок и иного содержания материалов. Корпорация Intel вправе в любое время и без предварительного уведомления вносить любые изменения в указанные материалы, а равно и в продукцию, описанием которой они служат. Корпорация Intel не берет на себя каких-либо обязательств по обновлению материалов.

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

1717

Бонус трэк

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

1818

char lname[FILENAME_MAX]; for (icount = 0; icount < FILENAME_MAX; icount++) { lname[icount] = name[icount]; if ((lname[icount]) == ':') { lname[icount+1] = 0; break; } }

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

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

1919

Example (Tachyon)

static void grid_free(void * v) {      ...      for (i=0; i<numvoxels; i++) {            ...            while (lcur != NULL) {                  lnext = lcur->next;                  free(lcur);            }      }      ...}

grid.cpp(131): error #12082: infinite loop

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

2020

Example (Notepad++)

} catch (...) {   TCHAR funcInfo[128];   generic_sprintf(funcInfo, TEXT("notify(SCNotification *notification) : \r notification->nmhdr.code == %d\r notification- >nmhdr.hwndFrom == %d\r notification->nmhdr.idFrom == %d"),\   scNotif.nmhdr.code, scNotif.nmhdr.hwndFrom, scNotif.nmhdr.idFrom);   ...}

PluginsManager.cpp(421): error #12224: buffer overflow: size of object "funcInfo" (128 bytes) is less than required size (139 bytes)

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

2121

Conditional paths

int flag;

void doo(int *var){ if (flag == 1) *var = 1;}

void foo(){

int var; doo(&var); if (flag == 1) printf("%d\n", var);}

Diagnostics is not reported

int flag1, flag2;

void test(){

int var;

if (flag1 && flag2) var = 1;

if (flag1 && flag2) printf("%d\n",

var);

if (flag1) printf("%d\n",

var);}

Diagnostics is reported in second case