Я так взволнован, я участвовал в 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»