Veracode Upload & Scan Deep Dive
Tags: veracode, security, beginners, tutorial
Published: 2023-06-21 11:58:14

Por Veracode Upload & Scan, ou apenas U&S, vamos entender o processo feito pelo Wrapper ao utilizar a ação composta "Upload & Scan", responsável por fazer todo o processo de carregamento dos arquivos, organização e validação.

Como dá a entender o termo "[ação composta](https://docs.veracode.com/r/c_wrapper_composite_actions)", conforme a documentação podemos ver que existem [ações independentes](https://docs.veracode.com/r/c_wrapper_simple_actions) para fazer cada uma das etapas mas para simplificar, vamos utilizar essa ação conjunta. Caso em seu projeto exista alguma necessidade muito específica não coberta por ela, recomendo ler a seção das ações para criar um caminho personalizado. 

Ao utilizar o U&S vamos fazer em conjunto a análise de código próprio, ou [SAST](https://dev.to/m3corp/o-que-e-sast-5213), e a análise de componentes de terceiros, ou [SCA](https://dev.to/m3corp/o-que-e-sca-2j29). 

O arquivo que precisamos enviar varia conforme a linguagem e sempre recomendamos a leitura do [guia de empacotamento](https://docs.veracode.com/r/c_comp_quickref). 

Para as credenciais, podemos passá-las diretamente como parâmetros ou criar um [arquivo de credenciais](https://dev.to/m3corp/configurando-o-arquivo-de-credenciais-3c0k), já que o Wrapper primeiramente busca por ele para validar se tem as informações necessárias. 

Em algumas ferramentas de CI/CD, temos tarefas/plugins que abstraem o uso do Wrapper, como é o caso do [Jenkins](https://docs.veracode.com/r/c_about_jenkins) e do [Azure DevOps](https://dev.to/m3corp/integrando-veracode-com-azure-devops-408f). Para os outros casos, ou caso não queira instalar esses plugins, pode executar o Wrapper em sistemas Linux, Mac ou Windows, tendo ele versões em Java e em EXE. 
Existe também uma [imagem Docker](https://hub.docker.com/r/veracode/api-wrapper-java) já configurada, que pode ser utilizada. 

**Como implementar o U&S em uma esteira ou terminal**
Para esse exemplo, vamos pensar na versão em Java, já que ele funciona em todos os sistemas da mesma forma. Para ambientes Windows, recomendo usar a versão EXE dele, já que assim não precisa instalar o Java. [Clique aqui](https://docs.veracode.com/r/c_about_wrappers) para saber exatamente quais são as dependências do Wrapper. 

Basicamente, vamos precisar apenas fazer o download do Wrapper e utilizá-lo. Pode definir um processo para sempre efetuar esse download, ou no caso de uma infraestrutura que se mantem, pode salva-lo em algum ponto que possa ser consultado. 

Em Linux/Mac, podemos fazer esse processo de download dessa forma:
```
curl -o veracode-wrapper.jar https://repo1.maven.org/maven2/com/veracode/vosp/api/wrappers/vosp-api-wrappers-java/23.4.11.2/vosp-api-wrappers-java-23.4.11.2.jar
```

Para a implementação, vamos chamar o Wrapper e passar os parâmetros: 
```
java -jar veracode-wrapper.jar -vid ${VeracodeID} -vkey ${VeracodeKey} -action uploadandscan -appname ${VeracodeProfile} -createprofile true  -version $(date +%H%M%s%d%m%y) -filepath ${CaminhoPacote}
```

Ou caso use um arquivo de credenciais, pode simplificar para:
```
java -jar veracode-wrapper.jar -action uploadandscan -appname ${VeracodeProfile} -createprofile true  -version $(date +%H%M%s%d%m%y) -filepath ${CaminhoPacote}
```

Como parâmetros temos:
```
# A ação conjunta que explicamos
-action uploadandscan

# Nome conforme o perfil de aplicação
-appname ${VeracodeProfile}

# Caso queira fazer a criação dinamicamente
-createprofile true

# Identificador do scan dentro do perfil, recomendo sincronizar com uma data ou com um número de versão/build
-version $(date +%H%M%s%d%m%y)

# Caminho do arquivo que vai ser analisado, criado conforme o guia de empacotamento
-filepath ${CaminhoPacote}
```

Executado dessa forma, vamos ter o U&S iniciando o processo, jogando os resultados para o que chamamos de [Policy Scan](https://dev.to/m3corp/os-diferentes-modos-de-se-realizar-sast-com-a-veracode-1e8a) e não aguardando os resultados. Caso queira que ele aguarde a conclusão do processo, basta adicionar o parâmetro: 
```
# Onde X é o número de minutos limite para aguardar a conclusão
-scantimeout X
```

Para saber todas as opções, [clique aqui](https://docs.veracode.com/r/r_uploadandscan). 

**Consultando os resultados**
O retorno do Wrapper é bem protocolar, basicamente nos retornando apenas o status geral, como "scan concluído" ou "Não foi possível iniciar devido a problema x". 

Para de fato consultar os resultados temos algumas opções:
- Fazer a integração com um BugTracking, como o [Azure Boards](https://dev.to/m3corp/importacao-de-falhas-para-o-azure-boards-3013)
- Utilizar o Wrapper para buscar os resultados e exibi-los de [forma personalizada](https://github.com/M3Corp-Community/Veracode/blob/main/SOs/Windows/Resultados%20SAST%20Terminal.ps1)
- Utilizar uma IDE como o [Visual Studio](https://docs.veracode.com/r/Run_a_Scan_and_View_Results_Using_Veracode_Static_for_Visual_Studio) para receber os resultados
- Usar o [portal da Veracode](https://analysiscenter.veracode.com/)

Para esse artigo, vamos pensar na última opção, mas na lista deixei links para saber sobre os outros caminhos. 

Dentro de um perfil de aplicação, temos alguns locais diferentes para consultar, para facilitar, recomendo que veja nosso vídeo tutorial explicando exatamente quais são as telas e o que temos nelas:
{% youtube _I4lQi-5uTU %}

Mas de uma maneira bem rápida, caso não possa ver o vídeo, temos no canto esquerdo as seções dentro de um determinado scan, sendo cada uma um tipo de visão diferente. 

Em View Report, temos uma visão mais resumida e executiva, junto ao controle de políticas e a opção de fazer o download no formato PDF ou XML:
![View Report](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/59jb0qdsnf4tbaohjbon.png)

Como comentamos, ao usar o U&S fazemos tanto SCA quanto SAST de forma unificada, mas na plataforma separamos os resultados para melhor organização. Em Software Composition Analysis temos os componentes de terceiros, caso queira ver mais detalhes deles, basta clicar em seu nome:
![Software Composition Analysis](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/056202ot5crn3zicpwdh.png)

Os resultados de código próprio ficam na seção Triage Flaws:
![Triage Flaws](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xmv40la3qt7euv08fs9l.png)

Caso existam pontos de falha que gerem mais de um problema, eles vão aparecer em Flaw Sources:
![Flaw Sources](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ujgwqrco93wme0svzyyt.png)

E por fim, caso queira saber o que foi considerado no scan, pode acessar os módulos clicando no nome do scan e em Review Modules:
![Review Modules](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tjyv3wv7l0zthjwcvu3w.png)