Snyk – це інструмент, розроблений для аналізу вразливостей у коді, що міститься у конфігураційних файлах інфраструктури, зокрема в контейнерах та програмних пакетах.
Snyk пропонує різноманітні продукти, хоча спочатку був задуманий як хмарна платформа.
Snyk Open Source інтегрується з Git-потоком через CLI. Після активації, інструмент ідентифікує вразливості, класифікує їх за рівнем небезпеки та автоматично виправляє відомі проблеми безпеки. Ця функція може бути інтегрована в цикл запиту на злиття (pull request) для перевірки коду, який надсилається до репозиторіїв.
Snyk Infrastructure as Code, в свою чергу, аналізує та виправляє вразливості у файлах конфігурації JSON та YAML Kubernetes. Тут механізм правил дозволяє налаштувати чутливість сканування в репозиторіях Git, відповідно до параметрів, встановлених адміністраторами.
Snyk Container дає можливість тестувати образи Docker та пов’язані реєстри як під час їх створення, так і після. Програма інтегрується з CLI, SCM, інструментами CI, реєстрами контейнерів та Kubernetes.
Сьогодні ми розглянемо, як можна використовувати Snyk Container, інтегрований в Docker, для виявлення вразливостей.
Приклад Dockerfile
Для того, щоб скористатися Snyk для пошуку вразливостей, вам знадобиться образ Docker. У цьому прикладі ми будемо використовувати такий образ:
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
Це ініціює процес аналізу, який поверне результати з детальною інформацією про виявлені вразливості, а також підсумковий звіт:
Результати сканування Docker показують усі виявлені вразливості образу.
Як ви бачите, Snyk не тільки повідомляє про кількість знайдених вразливостей, але й про їх характер, рівень критичності, а також надає рекомендації щодо вибору більш безпечного базового образу.
Детальну інформацію про кожну вразливість можна знайти у базі даних вразливостей 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
Вихідні дані показують, що тепер виявлено менше вразливостей, і Snyk повідомляє про використання більш безпечного базового образу:
Сканування Docker підтверджує використання безпечнішого базового образу.
Можна отримати детальніший звіт, якщо до команди сканування додати Dockerfile, який створює образ:
docker scan -f Dockerfile 0***0/python-app
Або виключити базовий образ з аналізу, якщо потрібно зосередитися на власних змінах:
docker scan -f Dockerfile --exclude-base 0***0/python-app
Цей сервіс також можна інтегрувати з репозиторіями Docker Hub:
Однак для цього потрібна платна підписка. Тим не менш, ви можете використовувати безкоштовний план для локального сканування, який надається після входу в Docker Hub (з обмеженнями на кількість сканувань), що корисно під час розробки або для перевірки безпеки стороннього образу.
Використання Snyk з GitHub Actions
Перш за все, необхідно створити репозиторій та папку всередині нього:
.github / worflows /
Для використання Snyk Container у GitHub потрібно створити новий образ або використовувати існуючий з Docker Hub. Щоб працювати з Snyk, необхідно створити секрет SNYK_TOKEN. Для отримання токена потрібно зареєструватись у Snyk. API Token можна швидко згенерувати у налаштуваннях.
З токеном можна створити секрет у GitHub та використовувати його в Action. Тепер потрібно передати назву репозиторію, створеного в 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.