Рубрики
Uncategorized

Snykcon — ощущение безопасности контейнера с Snyk CLI и Действиями GitHub

Я так взволнован, что я участвовал в Snykcon 2020! 🔥 Прослушивание переговоров, зажег огонь во мне, и я … Теги с DevOps, Security, Docker, GitHub.

Я так взволнован, я участвовал в Snykcon 2020 Действительно 🔥 Прослушивание переговоров, зажег во мне огонь, и я действительно хочу серьезно относиться к контейнерному обеспечению, зная, насколько проще, сегодня с инструментами, как Snyk 🚀

Но После запуска сканирования контейнера …

… На пару очень простых проектов, ну это не результат, который я ожидал: 🤯🤯🤯.

Это было буквально «Привет мир!» Тип проекта, что произойдет, если я сканирую реальный проект? Как мне начать иметь смысл этого?

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

Как я узнал с конференции этого года, Найти уязвимости в начале цикла разработки программного обеспечения имеет первостепенное значение в этот день и возраст.

С принятием Непрерывная доставка , следовательно, более короткие циклы выпуска, Мы больше не можем позволить себе ждать команды экспертов по вопросам безопасности, чтобы подтвердить каждый выпуск Отказ Новый код уже будет работать в производстве к тому времени, когда они завершают свой аудит!

Кроме того, разработчики — лучшие люди, которые могут контекстуализировать уязвимости и принять меры, чтобы исправить их. 👨🏻💻.

Сдвигая ответственность перед разработчиками

Хорошо, это хорошая концепция, Разработчики теперь несут ответственность за безопасность … Действительно Но держись на секунду, они разработчики! Как мы можем ожидать, что они сделают свою работу, а также следить за своим программным обеспечением для уязвимостей каждый день?

Вот где я думаю, что люди в Снаку сделали отличную работу. Их инструменты сосредоточены на помощи разработчикам с:

  • Определение уязвимостей как рано в ноутбуке разработчика
  • Предоставление инструменты командной строки Это может быть интегрирован в CI/CD рабочие процессы
  • Мониторинг сгенерированных артефактов на предварительно уведомить команду, когда обнаружены новые уязвимости
  • Советуйте о действиях по устранению уязвимостей прямо в CLI для разработчиков, чтобы увидеть

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

Если вы хотите посмотреть на репозиторий, вы можете найти его здесь Отказ Это простой «Привет мир!» Python Project, что, когда я начал, имел Whopping 267 уязвимостей Действительно

Шаг 0 — Создание учетной записи Snyk

Первое, что нужно сделать, это создать учетную запись Snyk. Это необходимо начать использовать инструменты CLI с вашей машины для разработки. Смотри ниже, Вам просто нужно разрешить приложение с одним из ваших существующих учетных записей

После создания учетной записи Snyk будет генерировать ваш личный токен API . Это необходимо для использования инструментов CLI из командной строки и от вашего рабочего процесса CI/CD.

Если у вас уже есть аккаунт, вы найдете токен под Ваше имя> Общие настройки> токен API

Установите инструменты CLI с помощью NPM и аутентифицироваться с вашим токеном :

# Install Snyk CLI with npm
> npm install -g snyk

# Authenticate with your Snyk account
> snyk auth ${YOUR_API_TOKEN}

Теперь мы готовы отсканировать наш проект! 🚀

Шаг 1 — Начните с машины для разработки

Как я узнал на конференции, лучший способ начать в вашей машине развития, используя Snyk CLI.

Сначала я хотел убедиться, что мои зависимости Python чистые от уязвимостей. Я сделаю это прямо из командной строки, запустив

> snyk test

И это сразу нашел проблему с моим требования .txt файл.

Что об этом круто, это то, что Снайк говорит мне, что уязвимость в sqlalchemy @ 1.3.17 был решен в более поздней версии пакета, поэтому я просто обновись к его предложенной версии sqlalchemy @ 1.3.19 Отказ

Контейнерное изображение сканирования

Далее я хочу Запустите сканирование контейнера, чтобы убедиться, что мое изображение имеет как можно меньше уязвимостей Отказ

Для этого мне сначала нужно построить изображение, а затем я могу немедленно отсканировать его из командной строки с Snyk Container Test :

> snyk container test --file=Dockerfile snyk-container-demo

Используя --file = dockerfile Мы можем сказать Snyk, который принесет докерфила Снак-контейнер-демонстрация изображение. Таким образом, мы сможем Получить более точные предложения от советника.

И тогда я начал плакать 😭

Оставайся спокойным и продолжать читать

Это то, что я сказал себе, когда я впервые прочитал этот отчет. Несмотря на то, что было сообщено много вопросов (267, чтобы быть точным), отчет также Предлагая альтернативные изображения К тому, кого я в настоящее время использую для проекта:

Recommendations for base image upgrade:

Alternative image types
Base Image                  Vulnerabilities  Severity
python:3.9.0rc1-slim        73               17 high, 12 medium, 44 low
python:3.9.0b5-slim-buster  73               17 high, 12 medium, 44 low

Это довольно приятно! Я вижу это -Слим и -slim-buster Версии моего базового изображения имеют меньше уязвимостей Отказ Так что следующая вещь, я сделаю, это меняю Dockerfile использовать один из них.

И после применения предложения …

… Я был рад видеть, что количество найденного уязвимостей было резко сокращено!

В этом отчете Snyk также говорит мне, что в настоящее время бегу на Самая безопасная версия выбранного базового изображения , запомнить, Там нет такой вещи, как абсолютная безопасность 😅

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

Я буду сейчас Интеграция Snyk с моим рабочим процессом постоянного интеграции . У меня пока нет в этом проекте, поэтому я собираюсь использовать Действия GitHub Отказ

С быстрым поиском Google я узнал, что Снак уже опубликовал действие GitHub Я могу использовать для сканирования моего репозитория на каждом коммитке и собирать результаты на вкладке «Безопасность» GitHub Repo.

Я буду тогда Скопируйте шаблон, предоставленный и создайте новый файл в моем репо в .Github/Workflows каталог называется secscan.yml :

name: Container Scan
on: push
jobs:
  snyk:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Build the Docker image
      run: docker build -t mcastellin/snyk-container-demo .
    - name: Run Snyk to check Docker image for vulnerabilities
      # Snyk can be used to break the build when it detects vulnerabilities.
      # In this case we want to upload the issues to GitHub Code Scanning
      continue-on-error: true
      uses: snyk/actions/docker@master
      env:
        # In order to use the Snyk Action you will need to have a Snyk API token.
        # More details in https://github.com/snyk/actions#getting-your-snyk-token
        # or you can signup for free at https://snyk.io/login
        SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
      with:
        image: mcastellin/snyk-container-demo
        args: --file=Dockerfile --exclude-base-image-vulns
    - name: Upload result to GitHub Code Scanning
      uses: github/codeql-action/upload-sarif@v1
      with:
        sarif_file: snyk.sarif

Я в значительной степени использовал стандартные значения здесь, кроме args: - exclude-base-image-vulns Отказ

Добавляя - Exclude-base-image-vulns Параметр мы говорим Снак Не сообщать уязвимости, которые вводятся слоями Docker Base Image Отказ Это чтобы убедиться, что мы являемся Разбивая сборку только тогда, когда мы введем новые проблемы в Dockerfile Отказ

Причина игнорирования уязвимости базового изображения — Избегайте слишком большого количества шума в CI Scan . Мы уже приняли базовое изображение, поэтому мы заинтересованы только в блокировке вопросов, которые мы добавляем с нашими настройками.

Прежде чем совершить наш файл aml action github, мы должны настроить секрет. Snyk_token. в нашем реестре. В настройках репозитория GitHub перейдите в Настройки> Секреты> Новый секрет и настроить значение для токена Snyk:

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

После всех усилий для уязвимых уязвимостей Я действительно хочу убедиться, что никто не может представить новые Действительно Давайте изменим нашу Dockerfile и откройте запрос на тягу, который вводит небезопасную упаковку: Curl , кто знал!? 🤔

...

RUN apt-get update \
    && apt-get install -qqy curl \
    && rm -rf /var/lib/apt/lists

...

Нашел это!

И Контейнерное сканирование найдено новые уязвимости Да, давая нам душевное спокойствие, что если кто-то устанавливает хитрые пакеты, мы сможем поймать его перед объединением кода в главную ветку!

За любой вопрос, найденный Snyk, вы получите очень подробный отчет, рассказывая вам:

  • Какой файл представил проблему
  • А Описание из уязвимости
  • Советы по восстановлению

Мне было весело пару дней для меня присутствовать на Snykcon 2020 И я надеюсь, поделився своим первым опытом работы с Snyk и контейнером, у меня также поощрял вас узнать, как максимально использовать из этих инструментов Чтобы ваши приложения были в безопасности!

Спасибо за прочтение! И не забудьте следовать за мной, если вы хотите увидеть больше контента такого!

Оригинал: «https://dev.to/mcastellin/snykcon-making-sense-of-container-security-with-snyk-cli-and-github-actions-phc»