Процесс непрерывной интеграции/доставки (или развертывания) определяет серию шагов для инженеров-программистов по созданию новых программ.

Хотя эффективность производства и повышается при использовании CI/CD, этот процесс склонен к пренебрежению безопасностью.

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

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

Общие проблемы безопасности в пайплайне CI/CD

Существует множество проблем безопасности, которые необходимо учитывать при защите CI/CD пайплайна:

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

Быстро меняющаяся среда с постоянными обновлениями оставляет много места для случайностей и непреднамеренных действий.

Лучшая практика – встроить безопасность в пайплайн.

1. Моделирование угроз

Проведите исследование потенциальных угроз безопасности.

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

Большинство угроз безопасности находятся в точках подключения.

Все, что подключается к пайплайну, должно регулярно исправляться и обновляться.

Блокируйте устройства, которые не отвечают требованиям безопасности, соответствующим образом.

2. Безопасность до коммитов

Создавайте проверки безопасности перед коммитами кода в системе контроля версий.

Большинство IDE предоставляют плагины безопасности и предупреждают об уязвимостях кода по мере ввода.

Проверяйте работу неопытных разработчиков перед коммитами кода в Git.

Используйте небольшие фрагменты кода и контрольные списки, чтобы убедиться, что код соответствует всем протоколам и стандартам безопасности.

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

3. Ревью закоммиченного кода

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

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

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

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

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

Кроме того, проанализируйте историю Git на предмет подозрительной активности.

4. Защитите свой Git

Git, как известно, является весьма привлекательной целью для хакеров.

Убедитесь, что разработчики обучены тому, как использовать Git, и постоянно информированы о процедурах компании.

Используйте файл .gitignore для предотвращения случайных коммитов стандартных и сгенерированных кэшированных файлов.

Имейте локально хранимую и защищенную резервную копию как часть общей политики резервного копирования.

5. Проверка на наличие уязвимостей в библиотеках с открытым исходным кодом

Библиотеки с открытым исходным кодом являются важнейшим компонентом при создании приложений.

Однако программное обеспечение сторонних разработчиков подвержено изменениям кода, что может косвенно повлиять на безопасность вашего приложения.

Обязательно анализируйте и сканируйте пакеты с открытым исходным кодом на предмет известных проблем безопасности.

Используйте инструменты анализа состава программного обеспечения (SCA) для анализа стороннего программного обеспечения, компонентов и файлов.

6. Автоматизируйте с помощью IaC

Инфраструктура как код (IaC) обеспечивает стабильные условия разработки и тестирования.

Вместо ручной настройки среды инструменты IaC, такие как Ansible, Terraform или Puppet, помогают постоянно автоматически создавать безопасную инфраструктуру.

Дополнительным преимуществом является то, что IaC легко вписывается в цепочку инструментов DevOps.

Постоянно тестируемые многократно используемые конфигурации и внедряемые процедуры гарантируют отличные результаты производства и качественный код.

7. Мониторинг после развертывания

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

Мониторинг помогает обнаружить и устранить подозрительную активность на основе предоставленных данных.

Используйте такие инструменты, как Grafana или Kibana, для создания интерактивных визуальных информационных панелей, чтобы получать предупреждения о любой подозрительной активности.

8. Разделите задачи и обеспечьте ролевую модель доступа

Права пользователей замедляют и даже мешают процессу тестирования.

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

Если речь идет о Git, определите роли доступа для каждого репозитория и внедрите двухфакторную аутентификацию для каждого коммита.

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

9. Обеспечьте безопасность учетных данных

Защитите все учетные данные, обеспечивающие доступ к программному обеспечению и сервисам, такие как API-токены, пароли, ключи SSH, ключи шифрования и т. д.

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

Поэтому используйте платформу управления ключами для безопасного и автоматизированного доступа к ним.

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

Для управления множеством сложных паролей используйте программное обеспечение для управления паролями.

10. Усердно наводите порядок

В среде CI/CD процессы и задачи протекают быстро без надлежащей очистки.

Обязательно закрывайте все оставшиеся временные ресурсы, такие как виртуальные машины, контейнеры или процессы.

Кроме того, обеспечьте надлежащее поддержание безопасности в целом и удалите все лишние утилиты и инструменты.

Заключение

Безопасность CI/CD-пайплайна – это процесс, который варьируется от системы к системе.

Эта статья дала представление о процедуре обеспечения безопасности пайплайна CI/CD.