Инструменты DevSecOps: Develop, Build, Deploy, Operate

Тема 5

Безопасная разработка. Инструменты DevSecOps

После определения методов по обеспечению безопасности кода, необходимо выбрать наиболее подходящие инструменты.

Develop

На этом этапе применяется класс инструментов Static Code Analysis. Это различные анализаторы кода и сканеры на поиск потенциальных уязвимостей.

Сканеры уязвимости работают следующим образом: список используемых библиотек анализируется и сравнивается с открытыми источниками. На основании этой информации создается отчет.

Для каждого языка программирования существуют свои сканеры. Для Golang есть отличный инструмент, который уже встроен в среду разработки, — govulncheck. Он имеет широкий набор функциональности, связанный с безопасностью. Govulncheck анализирует код, сравнивает его с базой известных уязвимостей и генерирует отчет. Пишет, какая уязвимость найдена, в каком файле, на какой строке. А в совокупности с Vulnerability Management for Go детализирует найденную уязвимость, дает рекомендации по ее устранению.
Для Python есть много хороших, но сторонних решений. Одно из них — Bandit. Его принцип работы схож со сканером для Golang — анализирует используемые библиотеки и генерирует отчет. Для наилучшего результата рекомендуем использовать его в связке с Pylint.

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

Linter — это категория статических анализаторов, которые проверяют код на предмет валидности синтаксиса и применение лучших стилистических практик. Например, на соблюдение PEP 8.

Важно отметить, что к результатам работы этих инструментов нужно относиться осторожно. Часто в созданных отчетах бывает много проблем, но после детальной ручной проработки большинство из них оказываются невалидными. На практике релевантность найденных проблем составляет около 20% от всего объема. Тем не менее это важный механизм для обеспечения безопасности вашего приложения.

Build

На этом этапе используются инструменты, которые проверяют на угрозы безопасности окружение сборки и будущую среду запуска кода.

Часто специалисты по DevSecOps пишут свои собственные линтеры для проверки версии окружения. Например, у вас в компании за стандарт принят Python 3.9.17. Такой подход позволяет проверить код на предмет использования более старой версии, которая содержит в себе ряд уязвимостей.

Другим важным этапом является проверка кода и окружения на предмет внесения чувствительной информации, например пароль от базы данных. Хорошие представители таких инструментов — это git-secrets и TruffleHog.

Если же приложение собирается в контейнере, важно провести его оценку на предмет безопасности. Trivy — это инструмент для поиска уязвимостей, ошибочных конфигураций и зависимых компонентов внутри контейнеров. Он проводит анализ уязвимостей docker image, на версии, устанавливаемых пакетов и настройки конфигурационных файлов образа с точки зрения контейнерной безопасности. Например, проверяет контейнер на запуск от суперпользователя (root).

Deploy

На этом этапе выделяется подход Fuzzing — на основе валидных данных генерируется огромное количество невалидных. Например, на вход приложения создается 10 верных запросов и 10 000 неверных. Это позволяет оценить, как логический функционал приложения справляется с ошибками под высокими нагрузками. Важным критерием оценки является аналитический отчет о вызванных методах: какие функции были вызваны, какой уровень покрытия достигнут.

Для этого можно использовать разные инструменты, например radamsa или gofuzz для Golang.

Operate

Обеспечение безопасности приложения с учетом окружения и всех зависимых сервисов — сложная и нетривиальная задача. Приложение помещают в выделенный защищенный контур и закрывают сетевые доступны, неважные для функционирования сервиса. И тут у инженеров возникает вопрос: а как подключиться к приложению для проведения технических работ? Правильным решением будет создание Jump host (он же Jump box, он же Bastion host) . Это выделенный хост — инженеры сначала подключаются на него, а потом переходят на целевой сервер приложения.

Это решение отлично работает в связке с Privileged Access Manager — системой, которая ведет учет всех успешных и неуспешных авторизаций. Оно позволяет следить за тем, кто использует привилегированные учетные записи и чем конкретно эти пользователи занимаются, находясь в системе. Показывают высокую эффективность при использовании ssh, rdp и других протоколов. Эволюцией такого подхода и набора инструментов является SIEM. Это система, которая агрегирует информацию из огромного числа источников и позволяет комплексно ее анализировать, связывая разрозненные события друг с другом. SIEM-решение позволяет проактивно обнаруживать опасные действия со стороны пользователей и инженеров, а также принимать превентивные меры по их устранению.

Другой важный аспект по обеспечению безопасности — проведение Penetration test. Это комплекс мер, направленный на поиск слабых мест всей системы. Он позволяет проверить все сервисы и приложения — в том числе правила сетевой безопасности, надежности паролей и готовности системы противостоять атакам типа SQL injection или XML injection.