Segurança com Checkov: Como Proteger Seu pipeline DevSecOps e Evitar Configurações Inseguras!

Hoje vamos conversar sobre ferramentas de verificação de segurança seguindo o conceito de DevSecOps que é “uma prática de desenvolvimento de aplicações que automatiza a integração de práticas de segurança e proteção em todas as fases do ciclo de vida do desenvolvimento de software, desde o design inicial até a integração, testes, entrega e implementação” conforme IBM.

Será uma série de 5 artigos onde irei falar sobre Checkov, Gitleaks, Snyk, TruffleHog e Trivy. Neste artigo falarei sobre Checkov.

Checkov é uma ferramenta de segurança de Infraestrutura como Código (IaC) que verifica se o código de infraestrutura está em conformidade com as melhores práticas de segurança para encontrar configurações incorretas antes que elas sejam implantadas.

O Checkov usa uma interface de linha de comando comum para gerenciar e analisar os resultados da verificação de Infraestrutura como Código (IaC) em plataformas como Terraform, CloudFormation, Kubernetes, Helm, ARM Templates e estrutura Serverless.

Abaixo está um exemplo de uso que está disponível no repositório https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico da Toolbox Playground.

O ambiente em que este lab foi desenvolvido:

  • SO Ubuntu 24.04 LTS
  • Terraform v1.9.4 linux_amd64
  • Python 3.12.3

O Terraform é uma ferramenta de infraestrutura como código que permite definir e provisionar recursos de infraestrutura de forma declarativa, para saber mais acesse https://www.terraform.io/.

Python é uma linguagem de programação que permite que você trabalhe rapidamente e integre sistemas de forma mais eficaz, para saber mais acesse https://www.python.org/.

As políticas que o Checkov verifica no Terraform encontram-se no seguinte link: https://www.checkov.io/5.Policy%20Index/terraform.html.

A imagem acima mostra o conteúdo do repositório a ser clonado.

Neste exemplo o Checkov irá analisar o arquivo main.tf que possui o seguinte conteudo:

main.tf

O código acima é um exemplo de configuração de um recurso de bucket de armazenamento no Google Cloud Platform usando o Terraform.

Neste código acima, será criado um recurso de bucket de armazenamento chamado “my_bucket” usando o provedor do Google Cloud. O nome do bucket é definido como “my-bucket” e a localização é definida como “us-central1”. O projeto associado a esse bucket é definido como “toolbox-playground”.

Dentro do bloco de configuração do bucket, temos duas seções adicionais: “logging” e “versioning”. A seção “logging” define o bucket de logs como “my-logs-bucket”, o que significa que todos os logs gerados por esse bucket serão armazenados em um bucket separado chamado “my-logs-bucket”. A seção “versioning” habilita a funcionalidade de versionamento para o bucket, permitindo que versões anteriores dos objetos armazenados sejam mantidas.

Além disso, temos duas configurações adicionais fora do bloco de configuração do bucket. A configuração “uniform_bucket_level_access” define que o acesso ao bucket deve ser uniforme, o que significa que todas as solicitações de acesso ao bucket devem seguir as mesmas regras de controle de acesso. A configuração “public_access_prevention” define que a prevenção de acesso público está “enforced”, o que significa que o acesso público ao bucket é proibido.

Você pode usar o Checkov localmente ou utilizar o workflow do GitHub Actions.

Uso do Checkov localmente

  1. Clone o repositório https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico e acesse a pasta pipelines-seguranca-exemplo-basico/checkov.
git clone https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico
cd pipelines-seguranca-exemplo-basico/checkov
2. Certifique-se de ter o Python instalado em sua máquina. Você pode verificar a versão do Python digitando o seguinte comando no terminal:
python —version
Se o Python não estiver instalado, faça o download e a instalação a partir do site oficial do Python: https://www.python.org/

3. Crie um ambiente virtual (venv) para isolar as dependências do projeto. No terminal, execute o seguinte comando:

python -m venv myenv
Isso criará um novo diretório chamado myenv que conterá o ambiente virtual.

4. Ative o ambiente virtual. No terminal, execute o seguinte comando:

– No Windows:

myenv\Scripts\activate

– No macOS/Linux:

source myenv/bin/activate

5. Instale as dependências do projeto a partir do arquivo requirements.txt executando o seguinte comando:

pip install -r requirements.txt

Isso instalará todas as dependências listadas no arquivo requirements.txt, incluindo o Checkov.

6. Navegue até o diretório onde se encontram os arquivos do Terraform:

cd tf

7. Execute o Checkov usando o seguinte comando:

checkov -d .

8. Analise os resultados fornecidos pelo Checkov e faça as correções necessárias em seus arquivos de configuração.

Com esses passos, você poderá usar o Checkov com venv e instalar as dependências a partir do arquivo requirements.txt para verificar a segurança de seus arquivos de configuração.

Uso do Checkov no Actions do GitHub

Para utilizar o Checkov no GitHub Actions, siga os passos abaixo:

1. Faça um Fork do repositório https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico.

2. O arquivo .github/workflows/checkov.yml, descrito abaixo, irá executar o checkov.

name: Terraform Security Check with Checkov
on:
  push:
    branches:
      - main
    paths:
      - 'checkov/tf/**'  # Aciona o fluxo de trabalho quando houver alterações no diretório 'checkov/tf'
  pull_request:
    branches:
      - main
    paths:
      - 'checkov/tf/**'  # Aciona o fluxo de trabalho quando houver alterações no diretório 'checkov/tf'
  workflow_dispatch:  # Aciona manualmente o fluxo de trabalho
    inputs:  # Define as entradas para o fluxo de trabalho
      name:  # Define a entrada "name"
        description: 'Acionador manual do Fluxo de Trabalho'  # Descrição da entrada

jobs:
  checkov-scan:
    runs-on: ubuntu-latest  # Executa o trabalho na versão mais recente do Ubuntu

    steps:
      - name: Checkout do Repositório  # Passo para fazer checkout do repositório
        uses: actions/checkout@v2  # Usa a ação 'actions/checkout' para fazer checkout do repositório

      - name: Set up Python 3.12
        uses: actions/setup-python@v4
        with:
          python-version: 3.12 # Define a versão do Python como 3.12

      - name: Test with Checkov
        id: checkov
        uses: bridgecrewio/checkov-action@master # Usa a ação 'bridgecrewio/checkov-action' para testar com Checkov
        with:
          directory: checkov/tf # Define o diretório de verificação como 'checkov/tf'
          framework: terraform # Define o framework como Terraform

Este arquivo de fluxo de trabalho configura o Checkov para ser executado sempre que houver um push ou pull request na branch “main” do seu repositório alterando os arquivos presentes na pasta checkov/tf.

3 Acesse a aba Actions do repositório que você acabou de fazer o fork, no seu GitHub.

4. Clique em Terraform Security Check with Checkov e depois em Run workflow.

5. O GitHub Actions executará o fluxo de trabalho e o Checkov analisará os arquivos de configuração do Terraform, fornecendo relatórios sobre possíveis problemas de segurança.

Compreendendo os relatórios Checkov
Após executar a verificação, o Checkov emitirá um relatório detalhando suas descobertas. O relatório inclui:
– Verificações com falha: lista de verificações que falharam junto com seus IDs, que fazem referência a regras específicas de segurança ou conformidade.
– Verificações aprovadas: lista de verificações que foram aprovadas.
– Recurso e arquivo: para cada problema, o Checkov indica o recurso e o arquivo onde o problema foi encontrado.
– Correções sugeridas: se disponíveis, o Checkov fornece orientação sobre como resolver problemas.

Com esses passos, você poderá utilizar o Checkov no GitHub Actions para verificar a segurança dos seus arquivos de configuração do Terraform.

No próximo artigo irei falar sobre Gitleaks.

Todos os códigos de todos os artigos estão no repositório https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico.