Содержание
- 2. Сложность современного ПО
- 3. Статистика ошибок Количество ошибок на 1000 строк кода (до тестирования) остается практически неизменным за 30 лет
- 4. Верификация и информационная безопасность программ Наличие ошибки в программе часто означает наличие уязвимости Технологии верификации одновременно
- 5. Технологии верификации Экспертиза Тестирование (динамические испытания) Аналитическая верификация Статический анализ Комбинированные подходы
- 6. Экспертиза Поиск ошибок, оценка и анализ свойств ПО человеком (обычно группа 2-5 человек) Техники Списки важных
- 7. Тестирование Оценка корректности системы по ее работе в выбранных ситуациях, с определенными данными Техники: Шаблоны сценариев,
- 8. Пример : проект DMS (ИСП РАН) Разработка тестов для ОС телефонного коммутатора Nortel Networks с использованием
- 9. Показатели качества тестирования Метрики тестового покрытия Функциональности программы и требований Структуры кода: строк, ветвлений, комбинаций условий
- 10. Аналитическая верификация Формальное описание семантики программы и требований и доказательство выполнения требований Техники: Метод Флойда (дедуктивный
- 11. Пример: верификация ядра ОС seL4 Ядро встроенной ОС seL4 8700 строк на C, 600 строк на
- 12. Статический анализ программ
- 13. f(char * p) { char s[6]; strcpy(s,p); } main1 () { f(“hello”); } main2 () {
- 14. Альтернативы решения Тестирование Проверки времени выполнения Статический анализ программы Смешанный
- 15. Можно использовать специальные функции с дополнительными параметрами – ограничениями сверху на объем записываемой информации. Например, вместо
- 16. От динамической защиты к статическому обнаружению Даже в случае минимизации количества проверок инструментированный код работает гораздо
- 17. Цели статического анализа – выявление дефектов в программах Дефекты (ситуации в исходном коде) могут приводить к:
- 18. Рассматриваемые виды дефектов Переполнение буфера Format string: недостаточный контроль параметров при использовании функций семейства printf/scanf Tainted
- 19. Преимущества статического анализа Автоматический анализ многих путей исполнения одновременно Обнаружение дефектов, проявляющихся только на редких путях
- 20. Первое поколение анализаторов Flowfinder, ITS4, RATS, Pscan (распространяются бесплатно) CodeSurfer (инструмент для обнаружения уязвимостей на базе
- 21. Недостатки первого поколения Большое число ложных срабатываний – 90% и выше Пропуск реальных уязвимостей Необходима ручная
- 22. Современные анализаторы Coverity Prevent Klockwork Insight Svace
- 23. Наш подход Для обнаружения уязвимостей мы предлагаем применять следующее: Межпроцедурный data-flow анализ с итерациями на внутрипроцедурном
- 24. Целью целочисленного анализа программы является получение необходимой информации о значении целочисленных атрибутов объектов программы (значение переменной,
- 25. Потеря точности в некоторых случаях. Отсутствие информации о связях между переменными: в случае анализа на основе
- 26. Необходимость межпроцедурного анализа f(char *p, char *s) { strcpy(p,s); // произойдет копирование 6 байт, включая //конец
- 27. Необходимость анализа указателей … char a[10]; char * p; p=a; p[10]=0; … Для данного примера в
- 28. Спецификация окружения char* strcpy(char *dst, const char *src) { char d1 = *dst;//dst и src char
- 29. Схема работы Svace Анализируемая программа Система сборки Файлы с исходным кодом Утилита перехвата Компилятор LLVM-GCC или
- 30. Построение аннотаций Биткод-файлы для исходных файлов Спецификации библиотечных функций на языке Си Биткод-файлы спецификаций библиотек Компилятор
- 31. Топологический порядок обработки функций Граф вызовов функции main q w a b c prinf strcpy Построение
- 32. Время анализа * Не учитывается время компиляции проекта
- 33. Сравнение с Coverity Prevent
- 34. Текущее состояние Анализ программ на Си\Си++. Информация об исходном коде собирается при помощи компилятора LLVM-GCC (или
- 35. Avalanche: Обнаружение ошибок при помощи динамического анализа
- 36. Динамический и статический анализ кода Динамический анализ - анализ программы во время выполнения Статический анализ -
- 37. Обнаружение ошибок при помощи анализа программ Динамический анализ Требуется набор входных данных и/или среда выполнения Высокие
- 38. Valgrind Фреймворк динамической инструментации Обнаруживаемые ошибки: Утечки памяти Ошибки работы с динамической памятью Неиницилизированные данные Ошибки
- 39. Valgrind: общая схема работы Внутреннее представление команд Valgrind – абстрактная RISC машина
- 40. Трасса выполнения программы
- 41. Трасса выполнения программы
- 42. Трасса выполнения программы
- 43. Трасса выполнения программы
- 44. Работы в этой области EXE tool, Stanford University - символические вычисления SAGE framework, Microsoft Research -
- 45. Пример char *names[] = { “one”, “two”, ...}; char buf[3]; fread(buf, 3, 1, f); // чтение
- 46. Пример fread(buf, 3, 1, f) buf[0] == 1 buf[1] + buf[2] > 0 x1, x2, x3:
- 47. Пример fread(buf, 3, 1, f) buf[0] == 1 buf[1] + buf[2] > 0 Система уравнений: x1,
- 48. Пример fread(buf, 3, 1, f) buf[0] == 1 buf[1] + buf[2] > 0 Система уравнений: x1,
- 49. Avalanche Отслеживает поток помеченных (потенциально опасных) данных Изменяет входные данные, чтобы спровоцировать ошибку, или обойти новые
- 50. Входные данные Входные данные \ Avalanche: итерация Tracegrind Трасса Управляющий модуль Трасса’ STP Решение Управляющий модуль
- 51. Управляющий модуль Avalanche Координация работы других компонентов Обход различных путей исполнения программы, инвертирование условий Поддержка параллельного
- 52. Tracegrind Отслеживает поток помеченных данных в программе Все данные прочитанные из внешних источников (файлы, сетевые сокеты,
- 53. Tracegrind Моделирует оперативную память, регистры и временные переменные при помощи бит-векторов Моделирует комманды при помощи операций
- 54. Covgrind Вычисление метрики покрытия кода программы (количество новых ББ покрытых на текущей итерации) Перехват сигналов (обнаружение
- 55. STP - Simple Theorem Prover SAT решатель (основан на MiniSat) Проект с открытым исходным кодом Поддерживает
- 56. Проект Опубликован на Google Code http://code.google.com/p/avalanche Лицензии: Valgrind и Memcheck - GPL v2 STP - MIT
- 57. Avalanche: возможности Поддержка клиентских сетевых сокетов Поддержка переменных окружения и параметров коммандной строки Поддержка платформ х86/Linux
- 58. Результаты Более 15-ти ошибок на проектах с открытым исходным кодом Ошибки подтверждены и/или исправлены разработчиками Null
- 59. Планы на будущее Улучшение прозводительности Поддержка новых источников входных данных (серверные сетевые сокеты, и т. д.)
- 60. UniTESK
- 61. Случай тестирования отдельной функции: Подобрать набор входных (тестовых) данных Вычислить ожидаемый результат для каждого из тестовых
- 62. Случай тестирования группы функции, класса/объекта, модуля с несколькими интерфейсами (обычно есть переменные состояния и побочный эффект):
- 63. Типичные размеры тестовых наборов Ядро ОС Linux (LTP) 18 Mbyte (при этом покрывает менее половины строк
- 64. Решения UniTESK Исходная точка построения теста – формализация программного контракта в форме пред- и пост-условий пред-
- 65. Формализация требований Выделение модельного состояния Описание формального контракта операций Предусловия – задают область определения Постусловия –
- 66. Простой пример спецификации в JavaTESK public specification class SqrtSpecification { public specification double sqrt(double x) {
- 67. Общая схема тестирования Тестовая система Отчеты Тестовые данные Ожидаемые результаты, критерии полноты
- 68. Общая схема. Данные, оракул, покрытие Пред-условия, итераторы Пост-условия
- 69. Общая схема. Тестовый сценарий описать и обойти КА обходить и строить КА налету Тестовая система Отчеты
- 70. Общая схема UniTESK Модель состояния Обходчик автоматов Оракулы Генератор Итераторы данных Метрика покрытия Тестируемая система Предусловия-
- 71. Применение UniTESK Операционные системы Ядро ОС телефонной станции 1994-1997 Linux Standard Base 2005-2010 Тестовый набор для
- 73. Скачать презентацию