Pull to refresh

Security code review.  Подходы и инструменты AppSec инженера

Level of difficultyMedium
Reading time3 min
Views1.8K

Для поиска уязвимостей в приложениях существует множество инструментов. SAST, DAST, IAST, SCA помогают в этом процессе, но часто не покрывают целые категории уязвимостей.

Owasp code review guidline
Owasp code review guidline

Как видно из результатов опроса в документе, большую часть уязвимостей эффективнее искать c помощью ручного ревью кода и пентеста. 
В этой статье обсудим ревью кода.


Пререквизиты к проведению Security Code Review:

  • Использовать IDE c поддержкой нескольких ЯП. Большинство разработчиков используют определенную IDE в зависимости от языка. Аппсеку часто приходится работать с кодом на нескольких языках. Я периодически использую Visual Studio Code. При поддержке плагинов код на различных языках удобно исследуется в одной IDE.

  • Уметь быстро читать код, искать примечательные с точки зрения безопасности, паттерны.

  • Находить использования переменных и функций, перемещаться по стеку вызовов.

Остановимся подробнее на рекомендациях по подходам к ревью.

Начинайте с определения структуры файлов в репозитории.

Полезно сразу разобраться. Где описаны сущности, конфигурации, мапперы, контроллеры, хэндлеры. Как описываются взаимодействия с другими сервисами, с базой данных, очередями сообщений.

Используйте теги, фильтры, regex-паттерны для поиска интересных участков кода

Например, по тегам "cookie, auth, session, header, timeout..." можно поискать, как происходит взаимодействие с сессиями пользователей.

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

Создавайте кастомные правила для SAST инструмента по повторяющимся паттернам

Базовый набор правил инструментов SAST по моему опыту покрывает 3-5 процентов уязвимостей и выдает много false positives. Создавать новые правила на все случаи жизни дорого и долго. А вот добавлять кастомные правила под поиск конкретных уязвимостей - более реалистичная задача.

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

Например, в ASP.NET использование метода Path.Combine может приводить к уязвимости Path Traversal.
Кастомное правило поможет автоматически находить в коде такие уязвимости.

Оценивайте "критичность" сервисов с точки зрения безопасности для приоритезации проведения code review

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

Критериями "критичности" сервиса могут быть эвристические метрики, например:

  • упоминания конфиденциальных данных

  • число публичных или приватных апи

  • количество консьюмеров очередей сообщений сервиса

  • вовлеченность сервиса в ключевые бизнес процессы

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

Бывает трудно создать proof of concept найденной уязвимости. Для этого может потребоваться нетривиальное воспроизведение бизнес процесса, подготовка нужных данных, настройка окружения.
Вместо этого в отдельных случаях можно создать мини приложение и подтвердить уязвимость в нем.

Инициируйте создание generic решений проблем с безопасностью для всех сервисов

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

Используйте инструменты для упрощения анализа кода. О них речь пойдет ниже.

Vs Code плагины Snyk, PT AI, Trivy

Популярные инструменты для сканирования кода, конфигураций, зависимостей. Находят на мой взгляд не много, но пригодятся, как отправная точка в поиске низковесящих фруктов, векторов для более глубокого исследования.

Vs Code GitLens

Множество функций для работы с историей коммитов, их авторами. Например, фича "Open on remote web" позволяет открыть файл репозитория в вебе на нужной строке. Это помогает при создании ссылки в тикете на исправление уязвимости или когда нужно уточнить детали реализации у разработчика.

Vs code плагины Chartographer, Call Graph

Помогают с визуализацией схемы вызовов методов и функций. Упрощают поиск участков кода, где передается "пользовательский ввод" и, следовательно, могут содержатся инъекции.

Boop

Инструмент на macos с графическим интерфейсом для форматирования, энкодинга, минифицирования текста,  смены формата конфига с yaml на json или xml, поиска и сортировки. Помогает привести конфиги, ссылки в более читаемый формат.

Ripgrep

Консольная утилита для быстрого поиска текста в файлах. Если вы ищете нужный текст по огромному количеству кода (особенно на слабом компьютере под windows), поиск может быть медленным, а ripgrep сделает его в разы быстрее. Использую для поиска по всей кодовой базе.

А какие инструменты и подходы используете вы? Буду рад, если поделитесь в комментариях.

Tags:
Hubs:
Total votes 3: ↑2 and ↓1+1
Comments2

Articles