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

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.

После добав­ле­ния репо­зи­то­рия Trivy обно­ви­те сер­вер и уста­но­ви­те пакет trivy сле­ду­ю­щим образом:
Что­бы уста­но­вить trivy из RPM, вам необ­хо­ди­мо полу­чить послед­нюю вер­сию Trivy, а затем выпол­нить сле­ду­ю­щие команды:

Установка Trivy на Debian | Ubuntu

Подоб­но уста­нов­ке Trivy на CentOS, у вас так­же есть два вари­ан­та, кото­рые вы може­те исполь­зо­вать, что­бы уста­но­вить его на свой Debian | Ubuntu.

Вы може­те исполь­зо­вать репо­зи­то­рий Trivy или уста­но­вить его пря­мо из исход­но­го кода DEB.

Что­бы уста­но­вить из репо­зи­то­рия, добавь­те сле­ду­ю­щий репо, затем перей­ди­те к уста­нов­ке Trivy.

После добав­ле­ния репо­зи­то­рия Trivy обно­ви­те сер­вер и уста­но­ви­те пакет trivy сле­ду­ю­щим образом:

В каче­стве аль­тер­на­ти­вы, если вы явля­е­тесь поклон­ни­ком исход­но­го кода deb, вы може­те уста­но­вить Trivy, исполь­зуя его исход­ный код DEB.
Что­бы уста­но­вить Trivy таким обра­зом, вам нуж­но будет полу­чить послед­нюю вер­сию Trivy, а затем выпол­нить сле­ду­ю­щие команды:

Установка Trivy на Arch Linux | Manjaro

Что ж, для всех пре­дан­ных поклон­ни­ков Arch, вы може­те лег­ко уста­но­вить Trivy на свой ком­пью­тер, исполь­зуя pikaur или yay AUR, как пока­за­но ниже.

Или вы може­те исполь­зо­вать помощ­ник yay AUR так:

Yay — Еще один надеж­ный помощ­ник AUR, напи­сан­ный на GO

Установка Trivy на macOS

Вы може­те уста­но­вить этот заме­ча­тель­ный инстру­мент на MacOS через Homebrew, выпол­нив команду:

Trivy в действии – как использовать Trivy

После уста­нов­ки Trivy мы гото­вы сра­зу же при­сту­пить к делу.

Trivy охва­ты­ва­ет мно­же­ство вари­ан­тов исполь­зо­ва­ния, и мы рас­смот­рим неко­то­рые из них в этом руководстве.

Ска­ни­ро­ва­ние фай­ло­вой системы

Trivy может ска­ни­ро­вать фай­ло­вую систе­му (напри­мер, хост-маши­ну, образ вир­ту­аль­ной маши­ны или фай­ло­вую систе­му рас­па­ко­ван­но­го обра­за контейнера).

Во вре­мя ска­ни­ро­ва­ния он будет искать уяз­ви­мо­сти на осно­ве фай­лов бло­ки­ров­ки, таких как Gemfile.lock и package-lock.json.

Син­так­сис выгля­дит так:

Сканирование вашего репозитория Git

К сча­стью, вы може­те ска­ни­ро­вать уда­лен­ный репо­зи­то­рий git с помо­щью это­го про­сто­го, но мощ­но­го инструмента.

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

Отска­ни­руй­те репо­зи­то­рий Git с помо­щью пере­клю­ча­те­ля репо сле­ду­ю­щим образом:

Сканирование образов

После раз­ра­бот­ки и сбор­ки ваше­го при­ло­же­ния в образ (Docker или око­ло того) у вас есть воз­мож­ность обна­ру­жить любую про­бле­му без­опас­но­сти, кото­рую вы мог­ли упустить.

Про­сто ука­жи­те имя обра­за и тег вме­сте с вашей про­стой коман­дой, как пока­за­но ниже.

Вы долж­ны уви­деть длин­ный и подроб­ный отчет в выво­де ваше­го терминала.

Вставка Trivy в Dockerfile

Еще одна инте­рес­ная осо­бен­ность это­го инстру­мен­та – то, что вы може­те вклю­чить его в свой Dockerfile, и он будет ска­ни­ро­вать все по мере созда­ния образа.

Мы будем исполь­зо­вать обра­зе Nginx для демон­стра­ции здесь сле­ду­ю­щим образом:

Затем создай­те свой образ с выво­дом, ана­ло­гич­ным пока­зан­но­му ниже:

Фильтруйте уязвимости по серьезности

Если у вас есть осо­бые потреб­но­сти и вы хоти­те, что­бы созда­ва­е­мый отчет был отфиль­тро­ван, что­бы вы мог­ли видеть HIGH, CRITICAL и дру­гие поля, Trivy сде­ла­ет это за вас пря­мо из коробки.

Про­сто запу­сти­те коман­ду, подоб­ную следующей:

Отсканируйте свой проект с помощью файла блокировки

Если у вас есть про­ект Python, высо­ка веро­ят­ность того, что в нем есть файл блокировки.

Поэто­му вы може­те ска­ни­ро­вать такой про­ект с помо­щью trivy сле­ду­ю­щим образом:

Сканирование контейнера внутри контейнера

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

Вот как это может быть достиг­ну­то, и обра­ти­те вни­ма­ние, что вам не нуж­но уста­нав­ли­вать Trivy на хост-машине.