🐳 Как установить и использовать Anchore – сканер безопасности для образов контейнеров? |

🐳 Как установить и использовать Anchore – сканер безопасности для образов контейнеров?

Мануал
Anchore Engine – это инструмент с открытым исходным кодом для сканирования и анализа образов контейнеров на предмет уязвимостей и проблем политик.
Он доступен в виде образа контейнера Docker, который может работать на платформе оркестрации, или в виде отдельной установки.
Это полезный инструмент безопасности, который позволяет разработчикам и командам QA тестировать, идентифицировать и устранять уязвимости в образах, которые они используют для создания приложений.
В этой статье мы рассмотрим, как установить и использовать сканер уязвимостей и образов Anchore.
Как правило, существует несколько способов реализации.
Тем не менее, я сосредоточусь на следующих двух:
  • Использование параметра командной строки AnchoreCLI
  • Плагин Jenkins Anchore Container Image Scanner для графического интерфейса
Мы покажем вам, как установить, настроить и запустить движок, настроить и использовать инструмент командной строки AnchoreCLI, а также плагин Jenkins.
Для каждого из двух методов вы узнаете, как добавлять образа на сканирование, выполнять сканирование и просматривать отчеты.
В конце статьи вы узнаете следующие три вещи.
  • Установка и настройка Anchore Engine
  • Установка, настройка и использование Anchore CLI
  • Настройка и использование плагина Anchore Container Image Scanner в Jenkins

Предпосылки

Ниже приведены требования для этого урока;

  • Локальная или виртуальная машина с Ubuntu 18.04 и следующими;
  • Docker
  • DockerCompose
  • Jenkins
  • Пользователь sudo

Шаг 1: – Настройте рабочие каталоги и загрузите файлы конфигурации.

Создайте рабочий каталог для ваших файлов Anchore.

В этом каталоге вы создадите два подкаталога, один для конфигурации и один для базы данных.

Создайте домашний каталог для файлов Anchore

mkdir anchore
Перейдите в новый каталог и создайте подкаталоги конфигурации и базы данных.
cd anchore

mkdir config

mkdir db

Скачайте файлы конфигурации

Как только каталоги будут готовы, мы загрузим два файла конфигурации (docker-compose.yaml и config.yaml) из проекта Github.

Чтобы скачать docker-compose.yaml

Перейдите в домашний каталог anchore и используйте команду

curl https://raw.githubusercontent.com/anchore/anchore-engine/master/scripts/docker-compose/docker-compose.yaml > docker-compose.yaml
Затем загрузите config.yaml в каталог ~/anchore/config
curl https://raw.githubusercontent.com/anchore/anchore-engine/master/scripts/docker-compose/config.yaml -o ~/anchore/config/config.yaml
Файл config.yaml – это файл конфигурации с основными настройками, необходимыми для работы службы механизма привязки.
Он имеет несколько параметров, включая параметры по умолчанию, уровень журнала, порт прослушивания, имя пользователя, пароль и другие параметры, которые можно настроить в соответствии с конкретными требованиями.
Это хорошая практика безопасности, а именно изменить пароль, и вы можете сделать это, отредактировав файл config.yaml.

Однако в этом уроке мы будем использовать настройки по умолчанию.

Чтобы продолжить с учетными данными по умолчанию (имя пользователя – admin и пароль – foobar), перейдите к шагу 2.

Шаг 2: – Установите и запустите Anchore Engine

Вы будете использовать Docker compose для установки и запуска Anchore Engine и базы данных.

Из домашнего каталога Anchore запустите.

docker-compose up -d

Это автоматически вытянет образ Anchore, а затем создаст Anchore engine и базу данных в домашнем каталоге и каталогах ~/anchore/database/ соответственно.

По завершении команда запустит Anchore.

После успешной установки и запуска anchore engine вы можете сканировать образ с помощью командной строки AnchoreCLI.

Однако сначала вам нужно установить утилиту командной строки AnchoreCLI, как показано ниже.

Установка, настройка AnchoreCLI

На этом этапе вы узнаете, как установить и настроить инструмент командной строки AnchoreCLI.

Шаг 3: – Установите AnchoreCLI

В этом руководстве мы сначала установим утилиту python-pip, которая затем будет использоваться для установки AnchoreCLI из исходного кода.

Чтобы установить Python pip. Перейдите в домашний каталог Anchore и запустите

sudo apt-get update
sudo apt-get install python-pip
sudo pip install --upgrade setuptools

Установите AnchoreCLI, используя python-pip

pip install anchorecli
Эта команда загрузит и установит файлы для AnchoreCLI.
После установки нам нужно получить исходный файл .profile, используя команду
source ~/.profile
Чтобы проверить успешность установки и версию Anchorecli, используйте команду
anchore-cli --version
Чтобы проверить состояние системы anchore-CLI, используйте команду
anchore-cli --url http://localhost:8228/v1 --u admin --p foobar system status
Обратите внимание, что вы должны передать URL-адрес Anchore, имя пользователя и пароль.

Определите параметры Anchore Engine

По умолчанию AnchoreCLI пытается получить доступ к Anchore Engine без аутентификации.
Однако это не будет работать, и вам необходимо предоставить учетные данные Anchore Engine для каждой команды.
Это включает передачу имени пользователя, пароля и параметров URL с каждой командой Anchore CLI.

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

Чтобы передать URL, запустите

ANCHORE_CLI_URL=http://localhost:8228/v1

Это определяет URL-адрес вместе с портом 8228, который он использует.

Установите имя пользователя и пароль, используя значения по умолчанию; в противном случае замените их новыми значениями, установленными на шаге 1.

ANCHORE_CLI_USER=admin

ANCHORE_CLI_PASS=foobar

Вышеуказанные параметры устанавливаются только для текущей оболочки.

Чтобы установить текущую оболочку и другие процессы, которые запускаются из нее, мы используем команду export

export ANCHORE_CLI_URL

export ANCHORE_CLI_USER

export ANCHORE_CLI_PASS
После определения параметров установка AchoreCLI завершена, и вы готовы к сканированию образов.

Шаг 4: – Добавление и анализ образов

Теперь, когда у нас запущен Anchore Engine и настроен интерфейс командной строки, вы узнаете, как добавлять и анализировать образа на предмет проблем безопасности.

В этом уроке мы проанализируем два изображения. -openjdk:8-jre-alpin и debian:latest without

Анализ образов

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

anchore-cli image add openjdk:8-jre-alpine
anchore-cli image add docker.io/library/debian:latest
Добавить больше образов
anchore-cli image add openjdk:10-jdk

anchore-cli image add openjdk:11-jdk

После добавления образов в Anchore Engine анализ начинается сразу.

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

Вы можете проверить прогресс и увидеть список загруженных образов вместе с их статусом анализа.

anchore-cli image list  

Вывод

:~/anchore$ anchore-cli image list
Full Tag                   Image Digest                Analysis Status
docker.io/openjdk:10-jdk     sha256:923d074ef1f4f0dceef68d9bad8be19c918d9ca8180a26b037e00576f24c2cb4analyzed
docker.io/openjdk:11-jdk sha256:9923c0853475007397ed5c91438c12262476d99372d4cd4d7d44d05e9af5c077analyzed
docker.io/openjdk:8-jre-alpine   sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52analyzed

Шаг 5: – Получить и просмотреть результаты анализа

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

Чтобы проверить результаты сканирования уязвимостей на openjdk: 8-jre-alpine:

anchore-cli image vuln openjdk:8-jre-alpine all

anchore-cli image vuln openjdk:8-jre-alpine all
Vulnerability    IDPackage             Severity  Fix        CVE Refs Vulnerability URL
CVE-2018-1000654 libtasn1-4.13-r0        High    4.14-r0      http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000654
CVE-2019-12900   libbz2-1.0.6-r6         High    1.0.6-r7     http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12900
CVE-2019-14697   musl-1.1.20-r4          High    1.1.20-r5    http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14697
CVE-2019-14697   musl-utils-1.1.20-r4    High    1.1.20-r5    http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14697
CVE-2019-8457    sqlite-libs-3.26.0-r3   High    3.28.0-r0    http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-8457
CVE-2018-14498   libjpeg-turbo-1.5.3-r4  Medium  1.5.3-r5     http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-14498

В отчете указывается идентификатор CVE, уязвимый пакет, серьезность и исправление.

Для нашего образа openjdk: 8-jre-alpine анализ показывает, что у него пять сильных уязвимостей и довольно много средних и незначительных уязвимостей. (некоторые не показаны выше).

Чтобы просмотреть результаты уязвимостей для стабильного образа debian:latest

Запустите команду

anchore-cli image vuln docker.io/library/debian:latest all

Вывод

anchore-cli image vuln debian:latest all
Vulnerability  IDPackage         Severity   Fix   CVE RefsVulnerability URL
CVE-2005-2541   tar-1.30+dfsg-6  Negligible None  https://security-tracker.debian.org/tracker/CVE-2005-2541
CVE-2019-1010022libc-bin-2.28-10 Negligible None  https://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010022libc6-2.28-10    Negligible None  https://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010023libc-bin-2.28-10 Negligible None  https://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010023libc6-2.28-10    Negligible None  https://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010024libc-bin-2.28-10 Negligible None  https://security-tracker.debian.org/tracker/CVE-2019-1010024

Как видно из отчета, образ debian: latest имеет незначительные уязвимости и не имеет исправлений.

Чтобы увидеть результаты оценки политики для нестабильного образа openjdk: 8-jre-alpine:

anchore-cli evaluate check openjdk:8-jre-alpine

Вывод – результаты показывают ошибку

 anchore-cli evaluate check openjdk:8-jre-alpine
Image Digest: sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52
Full Tag: docker.io/openjdk:8-jre-alpine
Status: fail
Last Eval: 2019-09-20T12:03:32Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
Образ openjdk: 8-jre-alpine нарушает указанный идентификатор политики (ID политики: 2c53a13c-1765-11e8-82ef-23527761d060) и поэтому возвращает статус Fail.

Теперь, когда мы увидели, как Anchore Engine реагирует на обнаружение нарушения политики, пришло время проверить, как он работает с нашим стабильным образом debian: latest.

anchore-cli evaluate check docker.io/library/debian:latest --detail

user1@Imagescan:~/anchore$ anchore-cli evaluate check docker.io/library/debian:latest --detail
Image Digest: sha256:d3351d5bb795302c8207de4db9e0b6eb23bcbfd9cae5a90b89ca01f49d0f792d
Full Tag: docker.io/library/debian:latest
Image ID: c2c03a296d2329a4f3ab72a7bf38b78a8a80108204d326b0139d6af700e152d1
Status: pass
Last Eval: 2019-09-20T12:00:06Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
Final Action: warn
Final Action Reason: policy_evaluation
Gate  TriggerDetail Status
dockerfileinstructionDockerfile directive 'HEALTHCHECK' not found, matching condition 'not_exists' checkwarn
Результаты показывают статус Pass и Final Action of Warn из-за несоответствия информации директиве Dockerfile.
Это не дает сбоя, но может потребовать проверки и решения проблемы.

Настройка и использование модуля Anchore Container Image Scanner в Jenkins

Шаг 6: – Добавьте и настройте плагин Anchore Container Image Scanner в Jenkins

На этом этапе мы интегрируем Anchor Engine с сервером Jenkins.

Jenkins – это сервер с открытым исходным кодом на основе Java, предназначенный для автоматизации широкого спектра повторяющихся задач в цикле разработки программного обеспечения.

Плагин Anchore доступен в Jenkins, но не установлен по умолчанию.

Войдите в Jenkins, используя веб-браузер

http://your_server_ip_or_domain:8080
Введите имя пользователя и пароль.
Перейдите в Jenkins menu -> Manage Jenkins – > Manage Plugins
На вкладке «Available » прокрутите вниз до «Build Tools » и выберите «Anchore Container Image Scanner».
Нажмите «Install without restart ».
После успешной установки плагина Anchore Container Image Scanner следующим шагом является настройка учетных данных.
Перейдите в меню, далее Manage Jenkins
Откройте Configure system -> Anchore configuration -> Engine Mode
Введите данные (URL-адрес , имя пользователя и пароль, а также порт 8228 – порт по умолчанию для Anchore engine).
URL – http://your_server_IP:8228/v1
Введите имя пользователя = admin
Введите пароль = foobar или новый пароль, если вы изменили его в шаге 3 (выше)
Нажмите Save

Шаг 8: – Добавление и сканирование образов

НажмитеNew item на панели инструментов Jenkins в верхнем левом меню.

Откроется экран с несколькими вариантами.

Введите желаемое имя для вашего тестового проекта в поле Enter the item name

В этом проекте мы будем использовать пайплайн сборки
Выберите Pipeline и нажмите Ok.
Теперь вы готовы к сканированию наших образов.
В нашем случае мы будем использовать образа, уже имеющиеся в реджистри Docker, который доступен для Anchore Engine.
Для этого вы добавите pipeline скрипт, который укажет нужный образ для сканирования.

Шаг 9: – Добавить скрипт Pipeline

Прокрутите вниз до раздела Pipeline и добавьте скрипт, чтобы указать необходимыый образ для сканирования.

Мы начнем с openjdk: 8-jre-alpine, который содержит некоторые уязвимости.

node {
def imageLine = 'openjdk:8-jre-alpine'`
writeFile file: 'anchore_images', text: imageLine`
anchore name: 'anchore_images'`
}
Нажмите Save

Шаг 10: – Запустите сборку и просмотрите отчеты о проверке.

Из меню Дженкинс

Нажмите Build Now

Это запустит процесс сборки, который займет несколько минут в зависимости от размера образа.
После завершения под историей сборки появится номер и цветная кнопка.
Это будет красный цвет для варианта Fail или синий для Pass.
Нажатие на кнопку покажет больше результатов.

Шаг 11: – Просмотр результатов

Нажмите на Build # для просмотра более подробной информации

Откроется окно «Console Output », указывающее на сбой – Anchore Report (FAIL)

В подробных отчетах указывается, был ли анализ неудачным или успешным, и предоставляется несколько отчетов, показывающих уязвимости, предупреждения и другие данные, в зависимости от конфигурации.
По умолчанию плагин настроен на сбой сборки (Stop) при наличии уязвимостей.
Ниже приведены скриншоты отчетов о политике и безопасности.
Ниже приведен скриншот результатов анализа безопасности для уязвимого образа.

Заключение

Anchore Container Image Scanner – это мощный инструмент анализа образов, который выявляет широкий спектр уязвимостей и проблем политики в образах Docker.

Он имеет множество параметров настройки и может быть настроен на то, как реагировать на обнаружение проблем во время анализа.

Одним из них является нарушение сборки, когда engine сталкивается с серьезной уязвимостью.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий