Como utilizar as imagens docker da Veracode para automatizar as integrações SAST
Tags: security, devsecops, cybersecurity, veracode
Published: 2023-07-27 18:25:52

No mundo de DevOps temos o Docker engine como um grande auxiliador dentro das etapas de desenvolvimento para testes, build, homologação e etc.

Dentro de um pipeline CI/CD, alguns players oferecem os recursos dos containers docker para facilitar os testes e automações, assim cada etapa como: job, task ou step, podem ser facilmente executadas sem a necessidade de se preocupar em instalar dependências e realizar configurações que consomem tempo.

Nesse artigo, iremos entender um pouco sobre como podemos aplicar a estratégia de esteira DevSecOps utilizando imagens de container Docker para automatizar Scans SAST com a Veracode.

---

Abaixo iremos utilizar como exemplo o Github Actions, mas isso poderia ser aplicado a qualquer outra ferramenta CI/CD adaptando o uso de acordo com a respectiva solução.

---

As imagens oficiais Veracode podem ser encontradas diretamente no [Dockerhub Veracode](https://hub.docker.com/u/veracode). Elas são constantemente atualizadas e hardenizadas para garantir que tudo funcione da forma mais segura. Logo que um novo API Wrapper é lançado, automaticamente já será anexado a uma nova versão da imagem, garantindo que tenhamos os recursos mais atualizados já disponíveis.

---

Exemplo abaixo será usado um exemplo de projeto em Django (PyGoat):

`1. Etapa - SAST Policy Upload and Scan`

```
  Veracode-SAST-Policy-Scan:
    runs-on: ubuntu-latest
    container:
      image: veracode/api-wrapper-java:latest
      options: --user root
    steps:
    - uses: actions/checkout@master

    - name: scan 
      run: |
          zip -r pygoat.zip . -i '*.py' '*.html' '*.js'
          java -jar /opt/veracode/api-wrapper.jar -vid "${{ secrets.VID }}" -vkey "${{ secrets.VKEY }}" -action UploadAndScan -createprofile false -appname "Pygoat-Showroom" -version "${{ github.run_id }}" -filepath pygoat.zip -scantimeout 20

```

* No primeiro exemplo temos o SAST Policy Scan sendo executado a partir da imagem `veracode/api-wrapper-java:latest`


* Por padrão a imagem roda com um usuário não privilegiado e, para executar todas ações necessárias, utilizamos o recurso de `--user root` temporariamente


* Essa imagem já contém o CLI do ZIP instalado, assim evita que tenhamos que criar uma etapa anterior de ZIP ou Archive, salvar esse artefato com a aplicação dentro e executar em outro container para Upload and Scan ou até mesmo instalar o ZIP dentro a imagem utilizada


* No ZIP, estamos solicitando que seja incluso somente os arquivos referente à aplicação, assim o artefato terá seu tamanho otimizado e, também ignoramos outros arquivos que não fazem sentido para o scan SAST como: PDF, JPG, etc.


* Em seguida, executamos o API Wrapper com a action de `UploadAndScan` para o SAST


`2. Etapa - SAST Pipeline Scan`

```
   Veracode-SAST-Pipeline-Scan:
    runs-on: ubuntu-latest
    container:
      image: veracode/pipeline-scan:latest
      options: --user root
    steps:
      - name: checkout
        uses: actions/checkout@master

      - name: scan 
        run: |
          zip -r -v pygoat.zip . -i '*.py' '*.js' '*.html'  
          java -jar /opt/veracode/pipeline-scan.jar -vid "${{ secrets.VID }}" -vkey "${{ secrets.VKEY }}" -f pygoat.zip -p "PyGoat-Showroom" -pn "Veracode Recommended Medium"
```

* O Pipeline Scan também possui uma imagem Docker dedicada `veracode/pipeline-scan:latest` onde o seu uso é praticamente igual a da Etapa - SAST Policy Upload and Scan

---

Tanto a imagem `veracode/api-wrapper-java` quanto `veracode/api-signing` podem ser utilizadas para automatizar outras tarefas além do SAST, pois elas interagem diretamente sobre as APIs da Veracode, assim podemos por exemplo: criar usuários, times, download de relatórios, busca de informações e trigger para execução de uma análise Dinâmica (DAST).