Процесс непрерывной интеграции/доставки (или развертывания) определяет серию шагов для инженеров-программистов по созданию новых программ.
Хотя эффективность производства и повышается при использовании 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.