Предлагаем вашему вниманию проектную работу Кирилла Малютина, выпускника курса по DevSecOps. Он спроектировал Jenkins pipeline для автоматизации сканирования образов и контейнеров ПО.
Цель моей проектной работы – создать автоматизированный конвейер поиска уязвимостей и недостатков конфигурации при исследовании образов и контейнеров ПО для Отдела ИБ условной организации для экономии рабочего времени и стандартизации процесса. Под стандартизацией понимается применение в процессе исследования выбранных инструментов и технологий с их настройками, а также получение необходимых артефактов.
В качестве объекта исследования выбраны образы контейнеров в виде tar-архивов.
План работ
- Подобрать соответствующие задаче инструменты сканирования образов контейнеров и автоматизации распределения задач.
- Установить на тестовый сервер выбранные инструменты.
- Составить pipeline автоматизации задач поиска уязвимостей и недостатков конфигурации при исследовании образов контейнеров.
- Протестировать работу pipeline.
Инструменты и технологии
- Jenkins (https://www.jenkins.io/) – в качестве сервера непрерывной интеграции. Популярное ПО с открытым исходным кодом. Активно поддерживается и развивается, имеет множество плагинов для интеграции с другими системами. Разработчики не покидали рынок РФ и не блокируют доступ к своему проекту.
- Docker (https://www.docker.com/) – самая популярная платформа контейнеризации. Разработчики не покидали рынок РФ и не блокируют доступ к своему ПО. В качестве тестового взят образ Sonarqube Community версии 9.2.2 от 14.12.2021 года с известными уязвимостями безопасности.
- Trivy (https://github.com/aquasecurity/trivy) – в качестве сканера уязвимостей безопасности компонентов docker-образов. Популярное ПО с открытым исходным кодом. Разработчики не блокируют доступ к своему проекту для пользователей из РФ.
- Docker Bench for Security (https://github.com/docker/docker-bench-security) – в качестве инструмента проверки недостатков конфигурации безопасности docker-образов и контейнеров. Набор скриптов с открытым исходным кодом. Проверки осуществляются на основе документа CIS Docker Benchmark v1.4.0. Разработчики не блокируют доступ к своему проекту для пользователей из РФ.
- Nmap (https://nmap.org/) – в качестве сканера сетевых портов контейнеров. Популярная утилита с открытым исходным кодом. Разработчики не блокируют доступ к своему проекту для пользователей из РФ.
Реализация идеи
После установки всех выбранных инструментов в docker создана новая сеть “test-net” типа “мост” для назначения статического ip-адреса 192.168.0.2 исследуемому контейнеру и последующего сканирования. Далее был создан новый pipeline в jenkins. Для проекта выбран параметризированный вид сборки для передачи необходимых значений в виде переменных скрипту конвейера:
В сборку добавлены следующие параметры:
- dockertar, принимающий абсолютный путь до исследуемого tar-архива с docker-образом;
- dockerparam, принимающий необходимые параметры запуска контейнера из исследуемого docker-образа;
- image, принимающий имя исследуемого docker-образа.
Далее составлен скрипт автоматизации выполнения всех намеченных действий конвейера:
pipeline {
agent any
stages {
stage('Load image') {
steps {
sh "docker load --input $dockertar"
}
}
stage('Run container') {
steps {
sh "docker run -d --pull=never --network test-net --ip 192.168.0.2 $dockerparam $image"
}
}
stage('Trivy scan') {
steps {
sh 'trivy image --format template --template "@/usr/local/share/trivy/templates/html.tpl" -o /tmp/trivy.html $image'
}
}
stage('Docker bench scan') {
steps {
sh '/tmp/docker-bench-security/docker-bench-security.sh -c container_images,container_runtime >> /tmp/docker-bench.txt'
}
}
stage('nmap scan') {
steps {
sh 'nmap -A -v -p- 192.168.0.2 >> /tmp/nmap.txt'
}
}
}
}
Этапы скрипта pipeline:
- ‘Load image’ – создание docker-образа из tar архива;
- ‘Run container’ – запуск контейнера с необходимыми параметрами;
- ‘Trivy scan’ – задача поиска уязвимостей docker-образа сканером Trivy с сохранением отчета в html формате;
- ‘Docker bench scan’ – задача сканирования конфигурации docker-образа и контейнера инструментом Docker Bench for Security;
- ‘nmap scan’ – сканирование инструментом nmap сетевых портов, используемых контейнером, с применением скриптов.
Тестирование работы pipeline
Для тестирования работы pipeline был выбран docker образ sonarqube:9.2.2-community. В конвейер переданы следующие значения параметров:
- dockertar=/tmp/sonarqube9.2.2.tar;
- dockerparam=—name sonarqube;
- image=sonarqube:9.2.2-community.
После запуска pipeline все этапы скрипта отработали без ошибок, полное время выполнения — 3 минуты 22 секунды:
Результаты работы pipeline
В качестве результатов работы конвейера на сервере сохранены следующие артефакты:
- Отчет сканирования уязвимостей компонентов docker-образа sonarqube:9.2.2-community инструментом Trivy в формате html. Всего обнаружено 82 уязвимости в компонентах образа ОС alpine и 42 уязвимости в jar-компонентах приложения Sonarqube 9.2.2.:
- Отчет сканирования конфигураций docker-образа и контейнера sonarqube:9.2.2-community инструментом Docker Bench for Security в формате txt. Обнаружены следующие недостатки конфигурации безопасности:
- приложение в контейнере запускается от имени супер-пользователя root;
- в образе отсутствует инструмент проверки состояния контейнера Healthcheck;
- для контейнера не запущен AppArmor-профиль;
- для контейнера не запущен SELinux-профиль;
- контейнер запущен без ограничений использования ресурсов памяти, процессора;
- файловая система контейнера смонтирована в режиме чтения/записи;
- контейнер не ограничен в получении дополнительных привилегий.
- Отчет сканирования сетевых портов docker-контейнера sonarqube:9.2.2-community инструментом nmap в формате txt. Контейнер открывает сетевой порт 9000 для прослушивания внешних подключений по протоколу tcp. Скрипты nmap не выявили уязвимости приложения.
Итоги. Развитие проекта
В рамках проектной работы создан и протестирован конвейер, который находит уязвимости и недостатки конфигурации при исследовании docker-образов и контейнеров. Тем самым задача автоматизируется для экономии рабочего времени и стандартизации процесса с применением выбранных инструментов, их настройки и получения необходимых артефактов.
Возможные варианты дальнейшей доработки проекта:
- добавление новых инструментов в зависимости от поставленных задач;
- масштабирование проекта;
- обработка результатов сканирования для дальнейших шагов по обновлению/конфигурации docker-образов и контейнеров при их использовании в организации;
- применение данного подхода автоматизации в других задачах.
Интересует DevSecOps? Добро пожаловать на курс!