Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Обнаружение уязвимостей в теории и на практике, или Почему не бывает идеального статического анализатора

Обнаружение уязвимостей в теории и на практике, или Почему не бывает идеального статического анализатора

Доклад Ярослава Александрова, Александра Чернова и Екатерины Трошиной (Solar Security) для PDUG-секции на PHDays 8.

More Decks by Positive Development User Group

Other Decks in Technology

Transcript

  1. ОБНАРУЖЕНИЕ УЯЗВИМОСТЕЙ В ТЕОРИИ И НА ПРАКТИКЕ, ИЛИ ПОЧЕМУ НЕ

    БЫВАЕТ ИДЕАЛЬНОГО СТАТИЧЕСКОГО АНАЛИЗАТОРА к.ф.-м. н. Катерина Трошина Ярослав Александров к.ф.-м. н. Александр Чернов Solar Security
  2. Статический анализ как неотъемлемая часть разработки надежного кода в том

    числе и по требованиям информационной безопасности 2 •Качественная разработка требует наличие статического анализатора кода. •Почему анализаторов много, а идеального все равно нет?
  3. Статический анализатор: мифы и реальность • Фазы работы статического анализатора

    кода МИФ: Универсальное внутреннее представление для всех языков • Шаблонный анализ • Внутрипроцедурный анализ • Межпроцедурный анализ • Taint-анализ Если все проходы делать качественно и полноценно, то анализатор будет работать долго и требовать много памяти. Лексический анализ Синтаксический анализ Семантический анализ Внутреннее представление 3
  4. Оптимизации работы статического анализатора 4 • Продвижение данных по внутреннему

    представлению • Оптимизационные преобразования для циклов и ветвления • отсекание маловероятных веток • редукция циклов input output 90% 10%
  5. Ошибки обработки потока информации. 5 • Ошибки валидирования (injections, XSS)

    • Никому нельзя доверять • Утечка информации • Ничего нельзя сообщать • Ошибки аутентификации • Ошибки на границах модулей системы • Трудно отследить
  6. Ошибки работы с памятью 6 • Ошибки выхода за границу

    (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
  7. Race condition и другие уязвимости “state machine” 7 • Сложности

    обнаружения в статике, так как нет понятия «времени». • Параллелизм везде и повсюду.
  8. Ограничения в работе статического анализатора. 8 • Дефицит по памяти.

    • Дефицит по времени работы. • Ложные срабатывания. • Пропущенные ошибки. Статическим анализатором НАДО пользоваться
  9. Использование статического анализатора 9 • Недостатки инструментов SAST • Теоретические

    ограничения алгоритмов статического анализа • Ограничения функциональности существующих инструментов • Инструменты надо использовать, но • существуют проблемы анализаторов на практике • Решение проблем со стороны анализатора • Нельзя решить все проблемы, но можно двигаться в эту сторону • Решение проблем со стороны пользователя • Как правильно использовать существующие инструменты?
  10. Ложные срабатывания и длинные отчеты 10 • «Ложность» срабатывания может

    пониматься по-разному • Анализатор может помогать сортировать уязвимости по вероятности ложности • Разделение библиотек и собственного кода • SCA: software composition analysis • Фильтрация по файлам и по правилам • Отслеживание уязвимостей между сканированиями (устойчивое) • Первый отчет – значительное время (в том числе библиотеки) • Дальнейшие затраты – вопрос эффективности использования инструмента
  11. Пропуски существующих уязвимостей 11 • Поиск уязвимостей • Ядро –

    алгоритмы анализа (может быть не реализован «движок») • Правила поиска уязвимостей (может быть не реализовано правило) • Алгоритмы, покрывающие доступные классы уязвимостей • Шаблонного поиска мало • Анализ потока управления, потока данных, … • Возможность добавлять пользовательские правила • Необходимо разобраться в причине пропуска уязвимости • По возможности дописать правило
  12. Экспертиза для работы с инструментом 12 • Нужен эксперт для

    работы с инструментом • Специалист по информационной безопасности • Разработчик? • Удобный функционал инструмента • Понятные результаты анализа • Подробные описания с примерами, ссылками, рекомендациями по устранению, на разных языках • Трассы распространения данных • Для работы с инструментом нужно понимание разработки, но не очень глубокое
  13. Запуск анализа 13 • Требования к формату файлов • Необходимая

    настройка сканирования (например, языки) • Требования к сборке • Максимально автоматизировать запуск сканирования • Настройки сканирования (например, языки) • Разбор переданного файла/директории • Максимально мягкие требования к сборке • Требовать артефакты, а не сборку на лету • Проводить частичный анализ без сборки • Разнообразные форматы: исходный код, бинарный код, ссылки • Правильно подготовить код (по документации) • При внедрении сложности со сборкой и конфигурированием решаются только один раз
  14. Ресурсы 14 • Долго работает, потребляет много ресурсов (RAM, CPU)

    • Чем дольше работает и больше ресурсов, тем лучше качество • Сложно точно предсказать время и ресурсы • Архитектура, позволяющая отделять тяжелую часть • Выбор глубины анализа, легковесные проверки • Инкрементальный анализ • Вывод результатов в процессе анализа • Конфигурирование потребляемых ресурсов • Необходимо выделять нужные анализатору ресурсы
  15. Интеграция в процесс 15 • Существуют налаженные процессы разработки, которые

    не хочется сильно менять • Полноценный неграфический интерфейс (CLI, REST API, …) • Готовые плагины к различным средствам • IDE (Eclipse, Visual Studio), системы сборки (maven, gradle) • Системы контроля версий (git, svn), сервера CI/CD (Jenkins, TeamCity) • Системы управления проектами (JIRA) и пользователями (AD) • Интеграция SAST в SDLC – наиболее эффективный способ использования • Технически – анализ после изменений кода или обновления анализатора • Организационно – разделение ролей разработчиков и специалистов ИБ, требования ИБ как часть ТЗ и приемки • Возможно ручное использование инструмента на разных стадиях разработки
  16. Схема интеграции инструмента: пример 16 Developer IDE API commit Bug

    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. Заключение • Статический анализатор автоматически выявляет множество дефектов • Поддержка

    разработки, снижение концентрации уязвимостей в коде ОДНАКО • Нельзя полагаться только на статический анализатор • Наличие статического анализатора в процессе разработки не исключает требования к разработчикам по информационной безопасности • Критический по требованиям ИБ код должен проверяться экспертом вручную. Статический анализатор кода Грамотная команда разработчиков Эксперт по информационной безопасности 17 Успех вашего проекта
  18. Методология безопасной разработки 21 • SDL – Security Development Lifecycle

    (Microsoft) • Тестирование на соответствие требованиям информационной безопасности (ИБ) на всех этапах • Тестирование на соответствие требованиям ИБ независимыми по отношению к разработчикам экспертами в области информационной безопасности • Тестирование на соответствие требованиям ИБ с возможным наложением вето на выпуск релиза • Тестирование на соответствие требованиям ИБ после каждого внесения изменений в код или при обновлении базы правил поиска уязвимостей
  19. Внедрение тестирования на соответствие требованиям ИБ 22 In-House Outsourcing Fixing

    cost Функционирующая система ~ 100 * X Приемка проекта ~ 10 * X Разработка проекта (ручной анализ) X Разработка проекта (непрерывная интеграция) X Исходный код Исполняемый код
  20. Роли пользователей инструмента: пример 23 • Руководитель, менеджер • Динамика

    результатов сканирований проектов • Сравнение различных группы проектов • Технический руководитель проекта, специалист по информационной безопасности • Запуск сканирования через графический интерфейс • Работа с результатами сканирований • Динамика результатов в рамках проекта • Выгрузка pdf-отчетов по классификациям • Дополнительные правила поиска уязвимостей • Разработчик • Интерфейс командной строки, плагины к IDE • Подробные результаты сканирований
  21. Схема интеграции инструмента: пример 24 Developer IDE API commit Bug

    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
  22. После внедрения инструмента в SDLC 25 • Отлаженный процесс автоматического

    обнаружения уязвимостей, встроенный в непрерывный цикл разработки программного кода • Только «безопасные» релизы проектов • Снижение концентрации уязвимостей по всем проектам • Увеличение осведомленности разработчиков в области безопасной разработки