🐳 Сканирование образов Docker на наличие уязвимостей с помощью Trivy – Information Security Squad
🐳  Сканирование образов Docker на наличие уязвимостей с помощью Trivy

Прежде чем выпускать приложения в производственную среду, необходимо принять очень серьезные меры безопасности и протоколы, которые помогут защитить ваши активы.

Сегодня мы представляем 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.

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
После добавления репозитория Trivy обновите сервер и установите пакет trivy следующим образом:
sudo yum -y update
sudo yum -y install trivy
Чтобы установить trivy из RPM, вам необходимо получить последнюю версию 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
После добавления репозитория Trivy обновите сервер и установите пакет trivy следующим образом:

sudo apt-get update
sudo apt-get install trivy
В качестве альтернативы, если вы являетесь поклонником исходного кода deb, вы можете установить Trivy, используя его исходный код DEB.
Чтобы установить Trivy таким образом, вам нужно будет получить последнюю версию 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 AUR так:

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.

Вы моежет выполнять сканирование прямо через браузер:

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *