Thank you for reading this post, don't forget to subscribe!
Прежде чем выпускать приложения в производственную среду, необходимо принять очень серьезные меры безопасности и протоколы, которые помогут защитить ваши активы.
Сегодня мы представляем Trivy.
Trivy – это простой и комплексный сканер уязвимостей для контейнеров и других артефактов.
Он помогает обнаруживать уязвимости пакетов операционной системы (Alpine, RHEL, CentOS и т. д.) и зависимости приложений (Bundler, Composer, npm, yarn и т. д.).
Перед отправкой в реджестри контейнеров или развертыванием приложения вы можете легко просканировать свой локальный образ контейнера и другие артефакты, что даст вам уверенность в том, что с вашим приложением все в порядке.
Особенности 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.
1 |
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 |
1 2 |
sudo yum -y update sudo yum -y install trivy |
1 |
$ 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.
1 2 3 |
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 |
После добавления репозитория Trivy обновите сервер и установите пакет trivy следующим образом:
1 2 |
sudo apt-get update sudo apt-get install trivy |
1 2 3 |
sudo apt-get install rpm wget <deb-package-url> sudo apt install ./<deb-package>.deb |
Установка Trivy на Arch Linux | Manjaro
Что ж, для всех преданных поклонников Arch, вы можете легко установить Trivy на свой компьютер, используя pikaur или yay AUR, как показано ниже.
1 |
pikaur -Sy trivy-bin |
Или вы можете использовать помощник yay AUR так:
1 |
yay -Sy trivy-bin |
Yay — Еще один надежный помощник AUR, написанный на GO
Установка Trivy на macOS
Вы можете установить этот замечательный инструмент на MacOS через Homebrew, выполнив команду:
1 |
brew install aquasecurity/trivy/trivy |
Trivy в действии – как использовать Trivy
После установки Trivy мы готовы сразу же приступить к делу.
Trivy охватывает множество вариантов использования, и мы рассмотрим некоторые из них в этом руководстве.
Сканирование файловой системы
Trivy может сканировать файловую систему (например, хост-машину, образ виртуальной машины или файловую систему распакованного образа контейнера).
Во время сканирования он будет искать уязвимости на основе файлов блокировки, таких как Gemfile.lock и package-lock.json.
Синтаксис выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ 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 с помощью переключателя репо следующим образом:
1 2 3 4 5 6 7 8 9 10 11 |
$ 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 или около того) у вас есть возможность обнаружить любую проблему безопасности, которую вы могли упустить.
Просто укажите имя образа и тег вместе с вашей простой командой, как показано ниже.
1 2 3 4 |
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest c39a868aad02 3 days ago 133MB |
1 |
$ trivy image nginx |
Вставка Trivy в Dockerfile
Еще одна интересная особенность этого инструмента – то, что вы можете включить его в свой Dockerfile, и он будет сканировать все по мере создания образа.
Мы будем использовать образе Nginx для демонстрации здесь следующим образом:
1 2 3 4 5 6 |
$ 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 / |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
$ 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 сделает это за вас прямо из коробки.
Просто запустите команду, подобную следующей:
1 |
$ trivy image --severity HIGH,CRITICAL nginx:latest |
Отсканируйте свой проект с помощью файла блокировки
Если у вас есть проект Python, высока вероятность того, что в нем есть файл блокировки.
Поэтому вы можете сканировать такой проект с помощью trivy следующим образом:
1 |
$ trivy fs ~/src/github.com/aquasecurity/trivy-ci-test |
Сканирование контейнера внутри контейнера
Чтобы добавить еще больше сахара к сладкому чаю, стоит упомянуть, что Trivy может сканировать ваш работающий контейнер изнутри этого контейнера.
Вот как это может быть достигнуто, и обратите внимание, что вам не нужно устанавливать Trivy на хост-машине.
1 2 3 |
$ 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 / |