Безопасность контейнеров является одним из важнейших аспектов кибербезопасности. В этой статье я познакомлю вас с инструментом для проверки безопасности контейнеров Docker. Мы рассмотрим установку и использование Trivy.
Еще по теме: Сканер уязвимостей из Nmap с помощью Vulscan
Проверка безопасности Docker-образов с помощью Trivy
Aquasecurity Trivy — это сканер уязвимостей Docker-образов. Trivy умеет сканировать как образ в репозитории, так и локальный образ. Он нацелен на нахождение уязвимостей двух типов – проблемы сборок ОС (поддерживаются Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) и проблемы в зависимостях (Gemfile.lock, Pipfile.lock, composer.lock, package-lock.json, yarn.lock, Cargo.lock).
Хотя на рынке существует множество инструментов для проверки безопасности контейнеров, этот, безусловно, один из самых легких и многофункциональных.
Trivy может работать на разных платформах Linux, включая RHEL, CentOs, Ubuntu, Debian, Arch Linux, MacOS, Nix и т. д. Мы будем устанавливать и использовать в Ubuntu 18.04 Bionic Beaver LTS.
Установка Trivy
Есть разные способы установки Trivy на разные платформы. Чтобы установить Trivy в Ubuntu, используйте следующие команды:
1 2 3 4 5 |
$ sudo apt-get install wget apt-transport-https gnupg lsb-release $ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - $ echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list $ sudo apt-get update $ sudo apt-get install trivy |
После установки приступим к поиску и сканированию уязвимостей.
Использование сканера уязвимостей Trivy
Чтобы запустить поиск уязвимостей образа Docker, используйте следующую команду:
1 |
$ trivy image <образ> |
Например, мы хотим запустить поиск уязвимостей образа nginx:
1 |
$ trivy image nginx:latest |
И как видим, уязвимостей очень много. Теперь попробуем запустить проверку Alpine:
Мы также можем использовать Trivy для обнаружения неправильных конфигураций безопасности в IaC, Dockerfile и манифесте Kubernetes.
Обнаружение неправильных настроек безопасности
Можно запускать проверку неправильных настроек безопасности как в файловой системе, так и в репозиториях git. Попробуем запустить сканирование файловой системы. Для этого нужно клонировать этот репозиторий:
Репозиторий git содержит файл Dockerfile и файл манифеста deployment.yaml k8s.
Dockerfile выглядит следующим образом:
1 2 |
FROM nginx USER root |
Обратите внимание, что мы начали с базового образа nginx и установили для пользователя значение root. Однако это не лучшая практика. Не рекомендуется использовать пользователя root для запуска контейнеров.
Файл deployment.yaml выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 securityContext: privileged: true |
В этом манифесте мы целенаправленно, в качестве эксперимента установили для привилегированного атрибута в securityContext значение true. Этого конечно делать нельзя.
А теперь, попробуем запустить сканирование и посмотреть, сможет ли найти эту критичную (в плане безопасности) настройку комфигурации:
1 |
$ trivy config <директория_конфига> |
И как видите, сканер нашел эту проблему в конфигурации.
Заключение
Trivy хорошо работает как комплексный инструмент статического анализа безопасности образов контейнеров и связанной с ними конфигурации, и он хорошо сочетается с CI. При эффективном внедрении он может значительно повысить безопасность контейнеров.
Более подробно о безопасности контейнеров Docker.