Технологии контейнеров и термин «контейнерные изображения» не являются новыми для многих разработчиков, инженеров SRES и DEVOPS. Но необходимость иметь безопасные контейнерные изображения для развертывания производства — это то, что нам действительно нужно в эти дни. Мы видели недавнюю приступ цепи поставок программного обеспечения на коммерческое приложение SolarWinds, вставляя бэкдор. Как клиенты загружают пакеты установки троянских лошадей из приложения Solarwinds, атакующие могут получить доступ к те системам, которые имеют бегущую продукцию Solarwinds. В этом посте мы обсудим CoSign и Diveroless контейнерные изображения, которые могут помочь достичь ваших контейнеров приложений более безопасным развертыванием и запуском в производстве.
Что такое отрывные контейнерные изображения?
Diveroless Container Images — «Языковые фокусированные документы Docker, минус операционной системы». Это означает, что он содержит только ваше приложение, и его зависимости выполнения, а не другие обычные менеджеры по пакетам ОС, оболочки Linux или любые такие программы, которые мы обычно ожидаем в стандартном распределении Linux. Воспроизведение изображений для отмерщиков имеют меньшие пакеты, чем их аналоги. Это уменьшает поверхность атаки, поскольку есть меньше компонентов, которые могут быть уязвимы и, следовательно, повышает безопасность.
Источник: https://github.com/googlecontainertools/distroless.
Преимущества Imseroless контейнерных изображений:
- Улучшает безопасность контейнера.
- Уменьшает размер контейнера.
- Уменьшает объем соответствия.
- Улучшает спектакли распределения контейнеров.
- Экономически эффективно, используя меньшие ресурсы.
Imseroless контейнерные изображения для нашего приложения вместе с проверкой CoSign
CoSign — это инструмент, разработанный Google Google в сотрудничестве с проектом Foundation Linux под названием SigStore для упрощения подписания и проверки изображений контейнера. Google объявил, что imveroless Images теперь подписан CoSign. Таким образом, это означает, что все пользователи Diveroless могут убедиться, что они действительно используют базовое изображение, которое они намеревались, прежде чем пинать срабатывания изображений, делая отрывные изображения еще более заслуживающими доверия.
Общий рабочий процесс
Почему нам нужен CoSign наряду с отмерщими контейнерами?
Необходимость COSING заключается в том, что даже при отстранении изображений существует вероятность столкнуться с некоторыми угрозами безопасности, такими как опечатка атаки, или получение вредоносного изображения. Если процесс сборки Diveroless скомпрометируется, он делает пользователям уязвимыми пользователями случайно использовать вредоносное изображение вместо фактического image Image.
TypoSquatting — это своего рода социальная инженерная атака, в которой злоумышленники публикуют злонамеренные пакеты в реестр с надеждой обманывающими пользователями в установку их аналогичными именами пакета или реестра/домена.
Как построить фотографии контейнера приложений с CoSign и Imveroless Images?
Убедитесь, что базовое изображение контейнера Diveroless с проверкой CoSign.
Проверка Image Image GCR.IO/Distroless/Static с CoSign Public Key Shareed Publisher Google. Это должен быть первый шаг процесса здания изображения.
$ cosign verify -key publisher-shared-cosign-pub.key gcr.io/distroless/static Verification for gcr.io/distroless/static --The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key - Any certificates were verified against the Fulcio roots.{"critical":{"identity":{"docker- reference":"gcr.io/distroless/static"},"image":{"docker-manifest-digest":"sha256:c9320b754c2fa2cd2dea50993195f104a24f4c7ebe6e0297c6ddb40ce3679e7d"},"type":"cosign container image signature"},"optional":null}
Создание приложений контейнер изображений с CoSign Verified Diveroless Base изображения
Существует пара подходов для создания изображений приложений в качестве образов на отрывные контейнера.
- Используйте соответствующие инструменты сборки для создания приложения из исходного кода. После этого, используя копию Docker Directive или добавить, чтобы построить изображения Docker с копированными или добавленными артефатами сборки.
- Multi-Stopent Docker Build.
Здесь я использую несколько сценариев, где я создаю изображение Docker Container для моего веб-приложения Hello-World Go, которое вы можете найти здесь со статическим image Image и стандартными базовыми изображениями.
- Изображение приложения, построенное с GCR.IO/Distroless/Static в качестве базового изображения в многоступенчатой процессе сборки.
FROM golang:1.15 as builder COPY . /usr/local WORKDIR /usr/local/ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w -extldflags "-static"' -o cmd/app FROM gcr.io/distroless/static USER nonroot:nonroot COPY --from=builder --chown=nonroot:nonroot /usr/local/cmd/app /bin/app ENTRYPOINT ["/bin/app"]
- Изображение приложений, построенное с Golang: 1.15 в процессе единого этапа.
FROM golang:1.15 as builder COPY . /usr/local WORKDIR /usr/local/ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /bin/app ENTRYPOINT ["/bin/app"]
- Изображение приложений, построенное с Ubuntu: 21.04 в качестве базового изображения в мульти-процессе сборки.
FROM golang:1.15 as builderstage COPY . /usr/local WORKDIR /usr/local/ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o cmd/app FROM ubuntu:21.04 COPY --from=builderstage /usr/local/cmd/app /bin/app ENTRYPOINT ["/bin/app"]
Вы можете найти подробную информацию о докладах Docker Scan в следующей теме, которая идентифицирует значимость использования изображений от Diveroless Base для вашего приложения.
Контейнерное сканирование изображения: Imveroless Container Images VS Стандартные изображения контейнера
Я использовал нативную сканирующий инструмент Docker, называемый Synk, который теперь доступен в более новых версиях пакета Docker. Вы можете использовать эту утилиту с помощью команды Docker: «Docker Scan Image_Name».
Отчет о сканировании изображения
Статический базовый образ | Стандартное базовое изображение как Alpine | Стандартное базовое изображение как Ubuntu |
$ Docker Scan Local-Diveroless: V1 Тестирование локальной отъемности: V1 … Организация: Управляющая пакета Iswinjkn: DEB Проект Название: Docker-Image | Doce-Diveroless Docker Image: Local-Diveroless: V1 Платформа: Linux / AMD64: включено ✔ Испытали 3 зависимости для известных вопросов, не найдено уязвимых путей. | $ Docker Scan Local-Standard: V1 Тестирование местного стандарта: V1 … Организация: Диспетчер Package Package: DEB Package: DEB Имя проекта: Docker-Image | Локально-стандартное докерное изображение: локальный стандарт: V1 Платформа: Linux / AMD64 Лицензии: Включено проверено 200 зависимостей для известных вопросов, нашли 169 вопросов. | $ Docker Scan Local-Ubuntu: V1 Тестирование Local-Ubuntu: V1 … Организация: Диспетчер Package Package: DEB Имя проекта: Docker-Image | Local-Ubuntu Docker Image: Local-Ubuntu: V1 Платформа: Linux / AMD64 Лицензии: Разрешены тестированные 103 зависимости для известных вопросов, нашли 12 вопросов. |
Примечание. Вы можете найти полный отчет Synk Scan от ссылок.
Подпишите создание изображения контейнера для приложения Diveroless с использованием COSINE.
Создайте пары ключей Cosign
$ cosign generate-key-pair Enter password for private key: Enter again: Private key written to cosign.key Public key written to cosign.pub
Нам нужно поместить локально встроенное изображение контейнера с деталями реестра и нажмите на удаленный реестр. Подпишите изображение дистанционного контейнера с генерируемым закрытым ключом.
$ cosign sign -key cosign.key jeswinkninan/distroless:v1 Enter password for private key: Pushing signature to: index.docker.io/jeswinkninan/distroless:sha256-41fd2ec0997d91c5df7c7d58d0a2433a5744119d79a803123541cdd2b0e93f08.sig
Проверьте изображение контейнера приложений с генерируемым открытым ключом CoSign
$ cosign verify -key cosign.pub jeswinkninan/distroless:v1 Verification for jeswinkninan/distroless:v1 -- The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key - Any certificates were verified against the Fulcio roots. {"critical":{"identity":{"docker-reference":"index.docker.io/jeswinkninan/distroless"},"image":{"docker-manifest- digest":"sha256:41fd2ec0997d91c5df7c7d58d0a2433a5744119d79a803123541cdd2b0e93f08"},"type":"cosign container image signature"},"optional":null}
Ключевые точки
- Diveroless — это язык, ориентированные на докер изображения, минус операционной системы.
- Меньшие пакеты, меньше шансов на уязвимости. Отъемные изображения будут иметь только необходимые пакеты.
- Imseroless Images теперь CoSigned.
- Проверьте каждое изображение от Diveroless с общедоступным ключом COSIC перед каждой сборкой.
- Контейнерное сканирование изображения является обязательным, должно иметь в вашей системе сборки CICD.
- CoSign Внутреннее изображение приложений, построенное из базового image Image и проверить перед использованием его в производстве, чтобы обеспечить доверие изображения.
Мы надеемся, что вам понравилось читать этот блог. Если вы любите услышать нас от большего количества, подключитесь к нам Twitter или Linkedin.
использованная литература
- https://security.googleblog.com/2021/05/making-internet-more-secure-one-signed.html
- https://snyk.io/blog/typosquatting-attacks
- https://github.com/sigstore/cosign#generate-a-keypair
- https://www.cisecurity.org/solarwinds/
- Полное отчет о сканировании изображения: https://github.com/JESWINKNINAN/distroless-go-instrumented/tree/main/internal/scan-reports
Оригинал: «https://dev.to/jeswinkninan/how-to-secure-containers-with-cosign-and-distroless-images-420f»