Жизненный цикл ПО. Технологии разработки безопасного ПО. Microsoft Security Development Lifecycle, Cisco Secure Development Lifecycle. ГОСТ Р 56939—2016.
Лекции
Технологии разработки безопасного ПО
Основные понятия безопасности информации
Основные понятия безопасности информации: конфиденциальность, целостность, доступность. Виды защиты информации. Модель Белла-Лападулы. Понятие ошибки, уязвимости в ПО. Понятие и структура эксплоита. Классификация ошибок в ПО. Классификатор CWE. Оценка критичности ошибки по CVSS.
Ошибка типа «переполнение буфера»
Ошибка типа «переполнение буфера». Выполнение произвольного кода на исполнимом стеке. Противодействие выполнению кода на стеке: «канарейка», DEP. Выполнение произвольного кода на неисполнимом стеке. Return-to-libc. Противодействие return-to-libc: ASLR. Return-oriented programming (ROP). Аудит передач управления.
Статический анализ исходного кода с целью поиска ошибок
Статический анализ исходного кода с целью поиска ошибок. Типы обнаруживаемых ошибок. Методы автоматического и автоматизированного поиска ошибок. Путь распространения ошибки: source, propagation, sink.
Абстрактная интерпретация
Анализ потоков данных. Связь MOP-, MFP-, ideal-решений. Абстрактная интерпретация. Понятие решётки. Понятия конкретного и абстрактного состояний. Связь абстрактной интерпретации и анализа потока данных. Вычисление необходимых условий для поиска переполнения буфера. Понятия полноты и корректности. Примеры абстракций: интервальная абстракция, предикатная абстракция. SMT-решатели.
Отладка и инструментирование
Применение отладки для оценки возможности эксплуатации уязвимостей. Технологии отладки. Отладка пользовательского кода. Полносистемная отладка в виртуальной машине. Статическое и динамическое инструментирование. Получение данных для оффлайн-анализа.
Фаззинг и символьное выполнение
Фаззинг. Разновидности фаззинга: чёрный ящик, белый ящик, серый ящик. Генетические алгоритмы в фаззинге. Символьное выполнение: основные понятия. Схема работы символьного выполнения. Предикат пути, предикат безопасности. Проблема экспоненциального взрыва, стратегии выбора следующего состояния.
Слайсинг
Выявление пути распространения ошибки. Программный слайсинг. Статический, динамический слайсинг. Слайсинг бинарного кода.
Анализ бинарного кода
Необходимость анализа бинарного кода для обеспечения безопасности. Задачи в анализе бинарного кода: восстановление алгоритмов, восстановление типов данных, задачи декомпиляции. Повышение уровня представления. Статический и динамический подходы. Анализ трасс.
Статическое дизассемблирование
Статическое дизассемблирование. Задача различения кода и данных в программе. Дизассемблирование последовательным просмотром (linear sweep) и методом рекурсивного спуска (recursive descent). Форматы исполняемых файлов PE и ELF. Структура секций, таблицы символов, таблицы перемещения.
Восстановление потока управления и функций программы
Восстановление потока управления программы по её образу и по трассе выполнения. Способы описания потока управления. Системы с магазинной памятью. Восстановление функций. Идентификация библиотечных функций по сигнатурам. Структура данных «префиксное дерево». Алогоритм Ахо-Корасик.
Слайсинг по трассе и анализ помеченных данных
Выделение алгоритма в бинарном коде. Слайсинг по трассе. Слайсинг с учётом зависимостей по управлению. Анализ помеченных данных. Проблемы анализа помеченных данных. Поиск утечек конфиденциальных данных.
Анализ обращений к памяти в бинарном коде
Анализ обращений к памяти в бинарном коде. Алгоритм VSA, его абстрактный домен, передаточные функции. Использование аффинных соответствий для уточнения алгоритма VSA. Обработка косвенных переходов и вызовов. Примеры применения алгоритма VSA.
Сетевая безопасность
Сетевая безопасность. Защита периметра. Системы обнаружения (IDS) и предотвращения (IPS) вторжений.