Analisando IaC e Containers com Veracode
Tags: veracode, tutorial, security, containerapps
Published: 2023-03-07 15:55:59

Recentemente a [Veracode](https://dev.to/m3corp/quais-as-vantagens-de-usar-veracode-9fo) lançou uma nova ferramenta para fazer a análise de containers e infraestrutura como código, permitindo cobrir mais uma etapa de um [ciclo de desenvolvimento](https://dev.to/m3corp/o-que-e-um-ciclo-de-desenvolvimento-seguro-169n). 

Nesse exemplo, vamos utilizar como plataforma de CI/CD o Azure DevOps, um projeto de estudos para [falhas em IaC](https://github.com/IGDEXE/Terragoat) e uma [imagem de container](https://hub.docker.com/r/google/cadvisor) descontinuada. 

Para a autenticação, precisamos das [credenciais de APIs](https://dev.to/m3corp/credenciais-da-veracode-340m).
A ferramenta funciona em Linux/Intel ou Mac[Intel/M1/M2].

Para iniciar nosso pipeline, vamos usar uma imagem padrão Linux e importar as variáveis de um grupo que criei com o nome de VeracodeIaC, armazenando os valores que pegamos no portal da Veracode com os nomes: **VERACODE_API_KEY_ID** e **VERACODE_API_KEY_SECRET**

Em YML, fica assim:
```
trigger:
- master

pool:
  vmImage: ubuntu-latest

variables:
- group: VeracodeIaC
```

Em nosso fluxo, vamos fazer a análise e depois gerar um relatório, conhecido como [SBOM](https://dev.to/m3corp/o-que-e-sbom-5bc0). A ferramenta tem um uso bem simples, e você pode consultar todas as possibilidades na [documentação](https://docs.veracode.com/r/Container_Security_Commands).

A sintaxe básica é:
`./veracode [scan/sbom] --source [Pasta/Container/Arquivo/URL do REPO] --type [Equivalente ao que foi passado no source] --format [Formatação da exibição]`

Para deixar menos abstrato, no caso em que queremos fazer a análise e o SBOM do container, podemos fazer dessa forma:
```
./veracode scan --source google/cadvisor:latest --type image --format table
./veracode sbom --source google/cadvisor:latest --type image --format table
```
Nos dois casos, passamos com parâmetro a imagem do container. 

Para a análise do IaC, vamos passar a pasta para o scan e a URL do repositório para o SBOM:
```
./veracode scan --type directory --source ./terraform/ --format table
./veracode sbom --type repo --source https://github.com/IGDEXE/Terragoat --format table
```
Pensando num pipeline, eu gosto da ideia de usar a formatação de tabela, para facilitar a leitura dos LOGs:
![Tabela com os resultados do scan](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fzhlsi24gzayw59bx9sg.png)

Você pode consultar os exemplos de pipelines completos em nosso [GitHub](https://github.com/M3Corp-Community/Veracode/tree/main/Pipelines/Az%20DevOps), mas para testar, recomendo que tente com o do Container, já que não precisa de nenhuma configuração adicional fora as variáveis:
```
trigger:
- master

pool:
  vmImage: ubuntu-latest

variables:
- group: VeracodeIaC

steps:

- script: |
    curl -fsS https://tools.veracode.com/veracode-cli/install | sh
  displayName: 'Configuração inicial'

- task: CmdLine@2
  inputs:
    script: './veracode scan --source google/cadvisor:latest --type image --format table'
  displayName: 'Scan'

- task: CmdLine@2
  inputs:
    script: './veracode sbom --source google/cadvisor:latest --type image --format table'
  displayName: 'SBOM'
```

Para saber mais sobre a Veracode e solicitar um ambiente de testes, entre em [contato](https://www.m3corp.com.br/contato/).