Validando imagens com o Gitlab CI / CD

Olá pessoal, na véspera do início do curso “CI / CD na AWS, Azure e Gitlab”, preparamos uma tradução de material interessante.




Neste artigo, falaremos sobre como verificar imagens de contêiner na plataforma Gitlab CI / CD usando o Sysdig Secure .

Imagens de contêiner que não estejam em conformidade com as políticas de segurança definidas no Sysdig Secure não serão publicadas no registro de contêineres e interromperão o pipeline.



Localizador de vulnerabilidades com Gitlab CI / CD


O Gitlab CI / CD é um servidor de entrega e integração contínua de código aberto incorporado à plataforma de desenvolvimento e colaboração de software Gitlab.

Depois de configurar o IC / CD do Gitlab para seu repositório, sempre que os desenvolvedores se comprometem com as ramificações rastreadas do repositório, os scripts de pipeline serão executados automaticamente.

Tais pipelines podem ser usados ​​para automatizar muitos processos. Por exemplo, para teste de controle de qualidade, criação de artefatos de distribuição de software (como imagens do Docker ou pacotes Linux) ou, pelo que falaremos neste artigo - para verificar a configuração, procurar vulnerabilidades e verificar a conformidade.

Verificando imagens no pipeline do CI / CD do Gitlab: desloque a segurança para a esquerda


Como em outras partes da TI, quanto mais cedo você encontrar uma vulnerabilidade em um contêiner, mais rápido e fácil poderá corrigi-la sem consequências.

A incorporação de verificações de vulnerabilidade no seu conjunto de pipeline é uma boa prática por vários motivos:

  • As vulnerabilidades existentes nunca irão para a produção;
  • «secure-by-default», , , .
  • , . , - .

O Sysdig Secure oferece um conjunto completo de ferramentas para verificar os contêineres de imagens, juntamente com muitas outras funções de inspeção de segurança de contêineres, como perfil de desempenho de ameaças em tempo de detecção com base no aprendizado de máquina e modelos extensíveis de detecção de ameaças prontos para uso , forçou os PSPs do Kubernetes , respondendo a incidentes e conhecimentos sobre conformidade . Vamos dar uma olhada em como o serviço Sysdig Secure Image Validation funciona com o Gitlab.

Requisitos de verificação de segurança no Gitlab


Para concluir as seguintes etapas, você precisará:


Configurando o pipeline de IC / CD do Gitlab para inspeção de imagem com o Sysdig Secure


Veremos na prática como essas duas plataformas podem ser integradas. Com este guia, você aprenderá a trabalhar com a digitalização de imagem segura do Sysdig em minutos.

Configurar credenciais de acesso


O pipeline de IC / CD do Gitlab precisará de credenciais de acesso para se comunicar com o back-end do Sysdig Secure. Para fazer tudo certo, copie o token de acesso em Configurações da interface do usuário do Sysdig> Perfil do usuário .

Em seguida, configure uma nova variável global para o seu projeto Gitlab:

  1. No seu projeto, vá para Configurações> CI / CD e selecione Variáveis .
  2. Crie uma nova variável SYSDIG_SECURE_TOKENe adicione a chave da API segura do Sysdig no campo valor .
  3. Clique no botão Mascarado para que seu token de API não seja impresso nos logs do pipeline.

Definição de pipeline do Gitlab


Primeiro, precisamos de um arquivo Docker que defina a imagem que você coletará. Você pode fazer upload de qualquer arquivo do Docker que desejar para o seu projeto ou simplesmente usar o seguinte exemplo:

FROM debian:stretch
RUN apt update && apt install python-pip python-numpy openssh-server -y && rm -rf /var/lib/apt
RUN pip install flask
COPY app.py /app.py
EXPOSE 5000 22
ENTRYPOINT ["python", "./app.py"]

Então você precisa criar um novo arquivo .gitlab-ci.ymlna raiz do projeto. Este arquivo descreverá todas as etapas necessárias (etapas) da montagem do nosso ambiente. Ele determinará todas as etapas necessárias.

Existem três estágios em nosso pipeline:

  • Montagem da imagem do contêiner;
  • Verificando uma imagem em busca de vulnerabilidades ou violações de política;
  • Movendo a imagem para o repositório de destino.

variables:
  CI_REGISTRY_IMAGE: "sysdiglabs/dummy-vuln-app"
  SCAN_IMAGE_NAME: "sysdiglabs/secure_inline_scan:latest"
  SYSDIG_SECURE_ENDPOINT: "https://secure.sysdig.com"

docker-build-master:
  image: docker:latest
  stage: build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
    - docker run --rm -v /var/run/docker.sock:/var/run/docker.sock "$SCAN_IMAGE_NAME" /bin/inline_scan analyze -s "$SYSDIG_SECURE_ENDPOINT" -k "$SYSDIG_SECURE_TOKEN" "$CI_REGISTRY_IMAGE"
    - docker push "$CI_REGISTRY_IMAGE"
  only:
    - master

Construir uma imagem de contêiner


A montagem da imagem ocorre com docker build --pull -t "$CI_REGISTRY_NAME". Ele recebe instruções do seu arquivo Docker e gera uma nova imagem local, que será verificada na próxima etapa.

Verificando vulnerabilidades


A próxima etapa é verificar os contêineres. Aqui, verificaremos a imagem quanto a vulnerabilidades e a configuração, armazenando os resultados no back-end do Sysdig.

Uma das vantagens da digitalização local do Sysdig é que você não perde o controle sobre suas imagens, pois a imagem não precisa ser movida para outro registro ou exposta a partir do exterior para realizar a digitalização. Isso ocorre dentro do corredor e apenas os resultados são enviados ao Sysdig Secure.

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock "$SCAN_IMAGE_NAME" /bin/inline_scan analyze -s "$SYSDIG_SECURE_ENDPOINT" -k "$SYSDIG_SECURE_TOKEN" "$CI_REGISTRY_IMAGE"

Nesse momento, o Sysdig Secure retornará um código de erro se a imagem atender a qualquer uma das condições de parada especificadas em sua política (por exemplo, vulnerabilidade crítica). A interrupção do pipeline impedirá a transferência de imagens vulneráveis ​​para o registro de contêiner.





No Sysdig Secure, podemos examinar informações adicionais e entender por que a verificação de segurança não foi concluída:



Como você pode ver na captura de tela, o contêiner deixa a porta 22 aberta, que está na lista de portas proibidas e também contém algumas vulnerabilidades sérias na biblioteca Python.

Mover imagem para o repositório de destino


Após verificar com êxito as vulnerabilidades, o pipeline será encaixado no dock e a imagem será publicada no registro do contêiner. Se você não especificar credenciais ou armazenamento remoto, o Gitlab usará o padrão .

Conclusão


Usando a varredura de imagem Sysdig Secure, você pode verificar imagens no pipeline do Gitlab CI / CD sem enviá-las da infraestrutura para o registro público ou intermediário, verificar a configuração e impedir o vazamento de vulnerabilidades na produção.

Encontre vulnerabilidades conhecidas e verifique a configuração quanto à conformidade com as recomendações de segurança, incluindo instruções do Dockerfile, listas brancas e negras de pacotes ou bibliotecas de terceiros instaladas na imagem base, como arquivos JAR / WAR em Java ou gerenciadores de pacotes de idiomas como npm para Javascript, pip para Python e gem para Ruby.

No caso de uma falha, você pode relatar isso rapidamente ao autor do contêiner para resolver rapidamente o problema e criar uma política de segurança de contêiner seguro por padrão. Para experimentar o Sysdig Secure, você pode solicitardemonstração hoje!

Isso é tudo. Saiba mais sobre o curso aqui .

All Articles