DEVOPSITSEC Telegram 1540
🧠 Задача: Безопасный CI/CD для Docker-образов в GitLab

Условие:
У вас есть следующий пайплайн:


build_and_push:
image: docker:latest
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- docker build -t "$CI_REGISTRY_IMAGE:latest" .
- docker push "$CI_REGISTRY_IMAGE:latest"


Он работает, но содержит серьёзные проблемы безопасности и архитектурные ошибки.

🚨 Проблемы:

1. `docker:dind` и `tcp://docker:2375` — критически уязвимы.
Это значит, что любой процесс может получить root-доступ к Docker-демону, а значит и к хосту раннера.

2. Нет валидации образов или сканирования.
В репозиторий может попасть уязвимый образ.

3. Использование тега `latest`.
Тег можно перезаписать в любой момент — нарушает идемпотентность и аудит.

4. Пароли в переменных среды.
Лучше использовать безопасные токены (например, OIDC).

5. Нет изоляции сборки.
Образ может использовать --privileged, --network=host, и не быть sandboxed.

Цель: Переделать пайплайн

Переход от DIND → kaniko, добавить проверку безопасности и стабильную версификацию.

🛡️ Обновлённый .gitlab-ci.yml


variables:
IMAGE_TAG: "${CI_COMMIT_SHORT_SHA}"

build_and_push:
image:
name: gcr.io/kaniko-project/executor:latest
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor \
--context $CI_PROJECT_DIR \
--dockerfile $CI_PROJECT_DIR/Dockerfile \
--destination $CI_REGISTRY_IMAGE:$IMAGE_TAG \
--destination $CI_REGISTRY_IMAGE:stable \
--snapshotMode=redo \
--single-snapshot

scan_image:
image: aquasec/trivy:latest
stage: test
script:
- trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$IMAGE_TAG


🔍 Разбор улучшений:

Kaniko — работает без привилегий, не требует docker.sock
`IMAGE_TAG` = SHA — версии стабильны, audit-friendly
Trivy — автоматическое сканирование уязвимостей
Удаление `latest` — используем stable и SHA
Нет `docker:dind` — безопаснее, проще и быстрее
Безопасная аутентификация — можно заменить username/password на OIDC в GitLab

📌 Дополнительно:

1. Добавьте rules: в пайплайн, чтобы запускать сборку только по main или тэгам.
2. Используйте readonly контейнеры и fsGroup если применимо.
3. Ограничьте доступ к runner через protected: true.

💣 Бонус: почему docker:dind = уязвимость?

Если runner запускается в privileged режиме, то docker:dind даёт возможность выполнять произвольные команды от root внутри и вне контейнера — включая монтирование хостовых директорий. Это делает возможным побег из контейнера.

💡 Такой пайплайн не только безопаснее, но и более прозрачен, масштабируем и предсказуем.
🔥166👎6👍2🤔2



tgoop.com/DevOPSitsec/1540
Create:
Last Update:

🧠 Задача: Безопасный CI/CD для Docker-образов в GitLab

Условие:
У вас есть следующий пайплайн:


build_and_push:
image: docker:latest
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- docker build -t "$CI_REGISTRY_IMAGE:latest" .
- docker push "$CI_REGISTRY_IMAGE:latest"


Он работает, но содержит серьёзные проблемы безопасности и архитектурные ошибки.

🚨 Проблемы:

1. `docker:dind` и `tcp://docker:2375` — критически уязвимы.
Это значит, что любой процесс может получить root-доступ к Docker-демону, а значит и к хосту раннера.

2. Нет валидации образов или сканирования.
В репозиторий может попасть уязвимый образ.

3. Использование тега `latest`.
Тег можно перезаписать в любой момент — нарушает идемпотентность и аудит.

4. Пароли в переменных среды.
Лучше использовать безопасные токены (например, OIDC).

5. Нет изоляции сборки.
Образ может использовать --privileged, --network=host, и не быть sandboxed.

Цель: Переделать пайплайн

Переход от DIND → kaniko, добавить проверку безопасности и стабильную версификацию.

🛡️ Обновлённый .gitlab-ci.yml


variables:
IMAGE_TAG: "${CI_COMMIT_SHORT_SHA}"

build_and_push:
image:
name: gcr.io/kaniko-project/executor:latest
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor \
--context $CI_PROJECT_DIR \
--dockerfile $CI_PROJECT_DIR/Dockerfile \
--destination $CI_REGISTRY_IMAGE:$IMAGE_TAG \
--destination $CI_REGISTRY_IMAGE:stable \
--snapshotMode=redo \
--single-snapshot

scan_image:
image: aquasec/trivy:latest
stage: test
script:
- trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$IMAGE_TAG


🔍 Разбор улучшений:

Kaniko — работает без привилегий, не требует docker.sock
`IMAGE_TAG` = SHA — версии стабильны, audit-friendly
Trivy — автоматическое сканирование уязвимостей
Удаление `latest` — используем stable и SHA
Нет `docker:dind` — безопаснее, проще и быстрее
Безопасная аутентификация — можно заменить username/password на OIDC в GitLab

📌 Дополнительно:

1. Добавьте rules: в пайплайн, чтобы запускать сборку только по main или тэгам.
2. Используйте readonly контейнеры и fsGroup если применимо.
3. Ограничьте доступ к runner через protected: true.

💣 Бонус: почему docker:dind = уязвимость?

Если runner запускается в privileged режиме, то docker:dind даёт возможность выполнять произвольные команды от root внутри и вне контейнера — включая монтирование хостовых директорий. Это делает возможным побег из контейнера.

💡 Такой пайплайн не только безопаснее, но и более прозрачен, масштабируем и предсказуем.

BY DevOps


Share with your friend now:
tgoop.com/DevOPSitsec/1540

View MORE
Open in Telegram


Telegram News

Date: |

Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. There have been several contributions to the group with members posting voice notes of screaming, yelling, groaning, and wailing in different rhythms and pitches. Calling out the “degenerate” community or the crypto obsessives that engage in high-risk trading, Co-founder of NFT renting protocol Rentable World emiliano.eth shared this group on his Twitter. He wrote: “hey degen, are you stressed? Just let it out all out. Voice only tg channel for screaming”. On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. More>> To delete a channel with over 1,000 subscribers, you need to contact user support
from us


Telegram DevOps
FROM American