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