Прежде чем выпускать приложения в производственную среду, необходимо принять очень серьезные меры безопасности и протоколы, которые помогут защитить ваши активы.
Сегодня мы представляем Trivy.
Trivy – это простой и комплексный сканер уязвимостей для контейнеров и других артефактов.
Он помогает обнаруживать уязвимости пакетов операционной системы (Alpine, RHEL, CentOS и т. д.) и зависимости приложений (Bundler, Composer, npm, yarn и т. д.).
Перед отправкой в реджестри контейнеров или развертыванием приложения вы можете легко просканировать свой локальный образ контейнера и другие артефакты, что даст вам уверенность в том, что с вашим приложением все в порядке.
- Особенности Trivy
- Как использовать сканер образов Trivy
- Установка Trivy на CentOS
- Установка Trivy на Debian | Ubuntu
- Установка Trivy на Arch Linux | Manjaro
- Установка Trivy на macOS
- Trivy в действии – как использовать Trivy
- Сканирование вашего репозитория Git
- Сканирование образов
- Вставка Trivy в Dockerfile
- Фильтруйте уязвимости по серьезности
- Отсканируйте свой проект с помощью файла блокировки
- Сканирование контейнера внутри контейнера
- Сканирование с испльзованием Harbor
Особенности Trivy
- Обнаружение комплексных уязвимостей
- Простота – укажите только имя образа или имя артефакта.
- Быстрота – первое сканирование завершится в течение 10 секунд (в зависимости от вашей сети). Последующее сканирование завершится за считанные секунды
- DevSecOps – подходит для CI, таких как Travis CI, CircleCI, Jenkins, GitLab CI и т. д.
- Поддержка нескольких форматов – в том числе: образ контейнера, локальная файловая система, удаленный репозиторий git.
- Простая установка – возможна установка apt-get, yum install и brew без предварительных условий, таких как установка БД, библиотек и т. д.
Как использовать сканер образов Trivy
Trivy можно установить в ряде дистрибутивов Linux, а также в MacOS.
Мы рассмотрим установку Trivy на CentOS, Ubuntu, Debian, Arch и MacOS.
Установка Trivy на CentOS
У вас есть два варианта, если вы хотите установить Trivy на свой CentOS.
Вы можете использовать репозиторий Trivy или установить его прямо из RPM.
Чтобы установить из репозитория, добавьте следующий репо, а затем продолжите установку Trivy.
echo -e "\n[trivy]\nname=Trivy repository\nbaseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/\$releasever/\$basearch/\ngpgcheck=0\nenabled=1" | sudo tee -a /etc/yum.repos.d/kubernetes.repo
sudo yum -y update
sudo yum -y install trivy
$ rpm -ivh https://github.com/aquasecurity/trivy/releases/download/v0.12.0/trivy_0.12.0_Linux-64bit.rpm
Установка Trivy на Debian | Ubuntu
Подобно установке Trivy на CentOS, у вас также есть два варианта, которые вы можете использовать, чтобы установить его на свой Debian | Ubuntu.
Вы можете использовать репозиторий Trivy или установить его прямо из исходного кода DEB.
Чтобы установить из репозитория, добавьте следующий репо, затем перейдите к установке Trivy.
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 /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
sudo apt-get install rpm
wget <deb-package-url>
sudo apt install ./<deb-package>.deb
Установка Trivy на Arch Linux | Manjaro
Что ж, для всех преданных поклонников Arch, вы можете легко установить Trivy на свой компьютер, используя pikaur или yay AUR, как показано ниже.
pikaur -Sy trivy-bin
yay -Sy trivy-bin
Yay — Еще один надежный помощник AUR, написанный на GO
Установка Trivy на macOS
Вы можете установить этот замечательный инструмент на MacOS через Homebrew, выполнив команду:
brew install aquasecurity/trivy/trivy
Trivy в действии – как использовать Trivy
После установки Trivy мы готовы сразу же приступить к делу.
Trivy охватывает множество вариантов использования, и мы рассмотрим некоторые из них в этом руководстве.
Сканирование файловой системы
Trivy может сканировать файловую систему (например, хост-машину, образ виртуальной машины или файловую систему распакованного образа контейнера).
Во время сканирования он будет искать уязвимости на основе файлов блокировки, таких как Gemfile.lock и package-lock.json.
Синтаксис выглядит так:
$ trivy fs /home/vagrant
2020-11-09T10:35:41.656Z WARN OS is not detected and vulnerabilities in OS packages are not detected.
2020-11-09T10:35:41.656Z INFO Detecting ruby vulnerabilities...
2020-11-09T10:35:41.656Z INFO Detecting nodejs vulnerabilities...
octant/site/Gemfile.lock
========================
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
octant/web/package-lock.json
============================
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
Сканирование вашего репозитория Git
К счастью, вы можете сканировать удаленный репозиторий git с помощью этого простого, но мощного инструмента.
При этом следует отметить, что здесь поддерживаются только публичные репозитории.
Отсканируйте репозиторий Git с помощью переключателя репо следующим образом:
$ trivy repo https://github.com/aquasecurity/trivy
2020-11-09T07:13:25.265Z INFO Need to update DB
2020-11-09T07:13:25.265Z INFO Downloading DB...
19.13 MiB / 19.13 MiB [-----------------------------------------------------------] 100.00% 512.75 KiB p/s 38sEnumerating objects: 2338, done.
Counting objects: 100% (2338/2338), done.
Compressing objects: 100% (1260/1260), done.
Total 2338 (delta 1229), reused 1943 (delta 933), pack-reused 0
2020-11-09T07:40:29.758Z WARN OS is not detected and vulnerabilities in OS packages are not detected.
Сканирование образов
После разработки и сборки вашего приложения в образ (Docker или около того) у вас есть возможность обнаружить любую проблему безопасности, которую вы могли упустить.
Просто укажите имя образа и тег вместе с вашей простой командой, как показано ниже.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c39a868aad02 3 days ago 133MB
$ trivy image nginx
Вставка Trivy в Dockerfile
Еще одна интересная особенность этого инструмента – то, что вы можете включить его в свой Dockerfile, и он будет сканировать все по мере создания образа.
Мы будем использовать образе Nginx для демонстрации здесь следующим образом:
$ vim Dockerfile
FROM alpine:3.7
RUN apk add curl \
&& curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin \
&& trivy filesystem --exit-code 1 --no-progress /
$ docker build -t scanned-image .
Sending build context to Docker daemon 8.704 kB
Step 1/2 : FROM alpine:3.7
Trying to pull repository docker.io/library/alpine ...
3.7: Pulling from docker.io/library/alpine
5d20c808ce19: Pull complete
Digest: sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10
Status: Downloaded newer image for docker.io/alpine:3.7
---> 6d1ef012b567
Step 2/2 : RUN apk add curl && curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s
-- -b /usr/local/bin && trivy filesystem --exit-code 1 --no-progress /
---> Running in 445558539f6f
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/4) Installing ca-certificates (20190108-r0)
(2/4) Installing libssh2 (1.9.0-r1)
(3/4) Installing libcurl (7.61.1-r3)
(4/4) Installing curl (7.61.1-r3)
Executing busybox-1.27.2-r11.trigger
Executing ca-certificates-20190108-r0.trigger
OK: 6 MiB in 17 packages
aquasecurity/trivy info checking GitHub for latest tag
aquasecurity/trivy info found version: 0.12.0 for v0.12.0/Linux/64bit
aquasecurity/trivy info installed /usr/local/bin/trivy
2020-11-09T10:13:02.597Z INFO Need to update DB
2020-11-09T10:13:02.597Z INFO Downloading DB...
2020-11-09T10:13:27.545Z INFO Detecting Alpine vulnerabilities...
2020-11-09T10:13:27.547Z WARN This OS version is no longer supported by the distribution: alpine 3.7.3
2020-11-09T10:13:27.547Z WARN The vulnerability detection may be insufficient because security updates are not provided
445558539f6f (alpine 3.7.3)
===========================
Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 2)
+------------+------------------+----------+-------------------+---------------+--------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+------------+------------------+----------+-------------------+---------------+--------------------------------+
| musl | CVE-2019-14697 | CRITICAL | 1.1.18-r3 | 1.1.18-r4 | musl libc through 1.1.23 |
| | | | | | has an x87 floating-point |
| | | | | | stack adjustment imbalance, |
| | | | | | related... |
+------------+ + + + + +
| musl-utils | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
+------------+------------------+----------+-------------------+-----
Фильтруйте уязвимости по серьезности
Если у вас есть особые потребности и вы хотите, чтобы создаваемый отчет был отфильтрован, чтобы вы могли видеть HIGH, CRITICAL и другие поля, Trivy сделает это за вас прямо из коробки.
Просто запустите команду, подобную следующей:
$ trivy image --severity HIGH,CRITICAL nginx:latest
Отсканируйте свой проект с помощью файла блокировки
Если у вас есть проект Python, высока вероятность того, что в нем есть файл блокировки.
Поэтому вы можете сканировать такой проект с помощью trivy следующим образом:
$ trivy fs ~/src/github.com/aquasecurity/trivy-ci-test
Сканирование контейнера внутри контейнера
Чтобы добавить еще больше сахара к сладкому чаю, стоит упомянуть, что Trivy может сканировать ваш работающий контейнер изнутри этого контейнера.
Вот как это может быть достигнуто, и обратите внимание, что вам не нужно устанавливать Trivy на хост-машине.
$ docker run --rm -it nginx \
&& curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin \
&& trivy fs /
Сканирование с испльзованием Harbor
Ранее мы рассматривали этот инструмент:
☸️ Установка Harbor – реджестри образов в Kubernetes / OpenShift с помощью Helm
🐳 Как использовать Harbor для сканирования образов Docker на наличие уязвимостей
Trivy является встроенный сканером наряду с Clair.
Вы моежет выполнять сканирование прямо через браузер: