Snyk — редактор, специализирующийся на анализе уязвимостей в коде файлов конфигурации инфраструктуры, в том числе присутствующих в контейнерах и пакетах приложений. Snyk сначала предлагает облачную платформу, но она предлагает и различные продукты.
Snyk OpenSource интегрируется через CLI редактора в поток Git. После запуска программное обеспечение обнаруживает уязвимости, классифицирует их по степени чувствительности и автоматически исправляет известные ошибки безопасности. Эту функциональность можно включить в цикл запроса на включение, чтобы применить к коду, отправляемому в репозитории.
Snyk Infrastructure as Code, с другой стороны, анализирует уязвимости и исправляет их в файлах конфигурации JSON и YAML Kubernetes. Здесь механизм правил позволяет вам настроить чувствительность обнаружений в репозиториях Git в соответствии с параметрами, определенными администраторами.
Snyk Container позволяет тестировать образы докеров и связанные с ними реестры во время их создания и после. Программу можно интегрировать в CLI, SCM, инструменты CI, реестры контейнеров и Kubernetes.
Сегодня мы увидим, как можно использовать Snyk Container, встроенный в Docker, для обнаружения уязвимостей.
Пример файла докеров
Первое, что вам нужно для использования Snyk для обнаружения уязвимостей, — это образ докера. В этом примере мы будем использовать следующий образ докера:
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
EXPOSE 8000 CMD
[“python”, “app.py”]
Первое, что нам нужно сделать, это сгенерировать изображение локально с помощью следующей команды:
docker build -t 0xyz0/python-app.
Теперь у нас есть изображение для анализа.
Сканируйте образ из клиента Docker.
Интеграция сервиса Snyk с Docker делает этот процесс невероятно простым. Чтобы начать сканирование, вам просто нужно выполнить следующее:
docker scan 0***0/python-app
Это начнется с анализа, в ходе которого он вернет более или менее обширный результат, в зависимости от обнаруженных уязвимостей, и с окончательного резюме:
Как видите, он не только сообщает вам, сколько уязвимостей он обнаружил. Даже если вы прокрутите вверх, вы увидите, что они из себя представляют и их критичность, а также дадут рекомендации относительно базового образа, который вам следует использовать.
Вы также можете проверить подробную информацию об уязвимости в базе данных уязвимостей Snyk.
В моем случае он предлагает мне несколько альтернатив, поэтому я собираюсь изменить свой Dockerfile, используя первый вариант:
FROM python:3.7.11-slim
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "app.py"]
Если я восстановлю изображение и отсканирую его:
docker build -t 0***0/python-app . && docker scan 0***0/python-app
Вы увидите, что выходные данные теперь показывают меньше уязвимостей, и в данном случае это говорит о том, что вы в настоящее время используете более безопасный базовый образ:
Вы также можете получить более подробный отчет, если добавите в команду docker-файл, генерирующий образ:
docker scan -f Dockerfile 0***0/python-app
И даже исключить из анализа базовое изображение, на тот случай, если вы захотите сосредоточиться на том, что вы сделали не так:
docker scan -f Dockerfile --exclude-base 0***0/python-app
Этот сервис также можно интегрировать с репозиториями Docker Hub:
Но для этого у вас должна быть одна из платных подписок. Однако вы можете запустить его локально, используя бесплатный план, который у вас есть только для входа в Docker Hub (он имеет четкие ограничения на сканирование), пока вы разрабатываете или хотите проверить, насколько безопасен сторонний образ, который вы хотите использовать.
Использование Snyk с действиями Github
Первое, что нужно сделать, это создать репозиторий и внутри создать папку.
.github / worflows /
Далее, чтобы использовать Snyk Container в Github, нужно создать новый образ или использовать тот образ, который мы создали в Docker Hub. Чтобы использовать Snyk, вам необходимо создать новый секрет под названием SNYK_TOKEN, а для получения токена вам необходимо создать учетную запись в Snyk. В общих настройках, где написано API Token, вы можете быстро его сгенерировать.
С помощью токена вы можете создать секрет на Github и использовать его в действии. Теперь вам нужно передать ему имя репозитория, созданного в Docker Hub. Далее вам нужно передать сообщение, которое он должен отправить. Вы можете получить доступ к результатам шагов и использовать их в качестве переменной в сообщении.
with:
args: 'A new commit has been pushed. Please verify github action:
| worflow $ {{fromJson (steps.repo.outputs.result) .html_url}} / actions
| Exec: $ {{steps.prep.outputs.created}}
| Version: $ {{steps.prep.outputs.version}} '
Как запустить весь рабочий процесс? Просто нажмите Master. Github Action обнаружит файл внутри .github/workflows/.
С ростом популярности контейнеров случаи нарушения безопасности становятся все более распространенными, большинство из которых связано с ошибками неправильной конфигурации при развертывании контейнеров. Snyk предоставляет эффективный и простой инструмент, который может помочь нам избежать ошибок неправильной конфигурации и обнаружить наиболее распространенные уязвимости в образах Docker.