числе и по требованиям информационной безопасности 2 •Качественная разработка требует наличие статического анализатора кода. •Почему анализаторов много, а идеального все равно нет?
кода МИФ: Универсальное внутреннее представление для всех языков • Шаблонный анализ • Внутрипроцедурный анализ • Межпроцедурный анализ • Taint-анализ Если все проходы делать качественно и полноценно, то анализатор будет работать долго и требовать много памяти. Лексический анализ Синтаксический анализ Семантический анализ Внутреннее представление 3
(out of bounds) • Использование после освобождения (Use after free) • Двойное освобождение (Double free) • Обращение по нулевому указателю (Null pointer dereference) Примеры CVE-2014-0160 - ошибка в библиотеке openssl - потенциальная компрометация приватных ключей потребовала перевыпуска всех сертификатов и перегенерации паролей cve-2015-2712 - ошибка в реализации js в mozilla firefox - bounds check cve-2010-1117 - use after free в internet explorer - remotely exploitable cve-2018-4913 - use after free in Acrobat Reader - code execution
ограничения алгоритмов статического анализа • Ограничения функциональности существующих инструментов • Инструменты надо использовать, но • существуют проблемы анализаторов на практике • Решение проблем со стороны анализатора • Нельзя решить все проблемы, но можно двигаться в эту сторону • Решение проблем со стороны пользователя • Как правильно использовать существующие инструменты?
пониматься по-разному • Анализатор может помогать сортировать уязвимости по вероятности ложности • Разделение библиотек и собственного кода • SCA: software composition analysis • Фильтрация по файлам и по правилам • Отслеживание уязвимостей между сканированиями (устойчивое) • Первый отчет – значительное время (в том числе библиотеки) • Дальнейшие затраты – вопрос эффективности использования инструмента
алгоритмы анализа (может быть не реализован «движок») • Правила поиска уязвимостей (может быть не реализовано правило) • Алгоритмы, покрывающие доступные классы уязвимостей • Шаблонного поиска мало • Анализ потока управления, потока данных, … • Возможность добавлять пользовательские правила • Необходимо разобраться в причине пропуска уязвимости • По возможности дописать правило
работы с инструментом • Специалист по информационной безопасности • Разработчик? • Удобный функционал инструмента • Понятные результаты анализа • Подробные описания с примерами, ссылками, рекомендациями по устранению, на разных языках • Трассы распространения данных • Для работы с инструментом нужно понимание разработки, но не очень глубокое
настройка сканирования (например, языки) • Требования к сборке • Максимально автоматизировать запуск сканирования • Настройки сканирования (например, языки) • Разбор переданного файла/директории • Максимально мягкие требования к сборке • Требовать артефакты, а не сборку на лету • Проводить частичный анализ без сборки • Разнообразные форматы: исходный код, бинарный код, ссылки • Правильно подготовить код (по документации) • При внедрении сложности со сборкой и конфигурированием решаются только один раз
• Чем дольше работает и больше ресурсов, тем лучше качество • Сложно точно предсказать время и ресурсы • Архитектура, позволяющая отделять тяжелую часть • Выбор глубины анализа, легковесные проверки • Инкрементальный анализ • Вывод результатов в процессе анализа • Конфигурирование потребляемых ресурсов • Необходимо выделять нужные анализатору ресурсы
не хочется сильно менять • Полноценный неграфический интерфейс (CLI, REST API, …) • Готовые плагины к различным средствам • IDE (Eclipse, Visual Studio), системы сборки (maven, gradle) • Системы контроля версий (git, svn), сервера CI/CD (Jenkins, TeamCity) • Системы управления проектами (JIRA) и пользователями (AD) • Интеграция SAST в SDLC – наиболее эффективный способ использования • Технически – анализ после изменений кода или обновления анализатора • Организационно – разделение ролей разработчиков и специалистов ИБ, требования ИБ как часть ТЗ и приемки • Возможно ручное использование инструмента на разных стадиях разработки
Tracking Build Tool Build Tool TestNG Test Environment VCS CI Team Lead Security Officer Results analysis Manager Analytics GUI scan MR→dev night build SAST TOOL
разработки, снижение концентрации уязвимостей в коде ОДНАКО • Нельзя полагаться только на статический анализатор • Наличие статического анализатора в процессе разработки не исключает требования к разработчикам по информационной безопасности • Критический по требованиям ИБ код должен проверяться экспертом вручную. Статический анализатор кода Грамотная команда разработчиков Эксперт по информационной безопасности 17 Успех вашего проекта
(Microsoft) • Тестирование на соответствие требованиям информационной безопасности (ИБ) на всех этапах • Тестирование на соответствие требованиям ИБ независимыми по отношению к разработчикам экспертами в области информационной безопасности • Тестирование на соответствие требованиям ИБ с возможным наложением вето на выпуск релиза • Тестирование на соответствие требованиям ИБ после каждого внесения изменений в код или при обновлении базы правил поиска уязвимостей
cost Функционирующая система ~ 100 * X Приемка проекта ~ 10 * X Разработка проекта (ручной анализ) X Разработка проекта (непрерывная интеграция) X Исходный код Исполняемый код
результатов сканирований проектов • Сравнение различных группы проектов • Технический руководитель проекта, специалист по информационной безопасности • Запуск сканирования через графический интерфейс • Работа с результатами сканирований • Динамика результатов в рамках проекта • Выгрузка pdf-отчетов по классификациям • Дополнительные правила поиска уязвимостей • Разработчик • Интерфейс командной строки, плагины к IDE • Подробные результаты сканирований
Tracking Build Tool Build Tool TestNG Test Environment VCS CI Team Lead Security Officer Results analysis Manager Analytics GUI scan MR→dev night build SAST TOOL
обнаружения уязвимостей, встроенный в непрерывный цикл разработки программного кода • Только «безопасные» релизы проектов • Снижение концентрации уязвимостей по всем проектам • Увеличение осведомленности разработчиков в области безопасной разработки