Veracode + Windows: Configurando credenciais, Wrapper e Pipeline Scan
Tags: veracode, beginners, tutorial, security
Published: 2023-03-30 17:33:07

Para facilitar o processo de configuração em ambientes Windows, podemos automatizar as etapas com um script Powershell. 
Nele vamos passar como parâmetros as duas credenciais de API, que você pode consultar como obtê-las [clicando aqui](https://dev.to/m3corp/credenciais-da-veracode-340m), e como opcional pode definir uma pasta de instalação. Por padrão eu deixei a pasta da Veracode onde precisamos criar o arquivo de credenciais. 

Nosso script vai:
1. Receber os parâmetros 
2. Criar as pastas
3. Adicionar a pasta das ferramentas ao PATH do sistema
4. Fazer o download e organização do Pipeline Scan
5. Fazer o download e organização do Wrapper

Para utilizar o Pipeline Scan vai ser preciso ter o Java instalado. 
O arquivo de credenciais é necessário para autenticar os plugins nas IDEs e o uso do Wrapper, já que com ele configurado não é preciso passar os parâmetros VID e VKEY. 

Traduzindo para Powershell, temos:
```
param (
    [parameter(position=0,Mandatory=$True)]
    $VeracodeID,
    [parameter(position=1,Mandatory=$True)]
    $VeracodeKey,
    [parameter(position=2)]
    $pastaferramenta = "$env:USERPROFILE/.veracode"
)

# Cria as pastas
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE/.veracode"
New-Item -ItemType Directory -Force -Path "$pastaferramenta"

# Adiciona o caminho no Path do sistema
if ($env:Path -NotContains $pastaferramenta) {
    Write-Host "Add $pastaferramenta ao path"
    [System.Environment]::SetEnvironmentVariable("Path", $env:Path + ";$pastaferramenta", 'User')
}

# Cria o arquivo de credenciais
$templateCredenciais = @"
[default]
veracode_api_key_id = $VeracodeID
veracode_api_key_secret = $VeracodeKey
"@
Write-Host "Criando arquivo de credenciais"
Set-Content -Path "$env:USERPROFILE/.veracode/credentials" -Value "$templateCredenciais"

# Download e configuração: Pipeline Scan
Write-Host "Configurando: Pipeline Scan"
$urlDownload = "https://downloads.veracode.com/securityscan/pipeline-scan-LATEST.zip" # Define a url de download
$caminhoDownload = "$env:LOCALAPPDATA/VeracodePipeline.zip" # Define um caminho para o arquivo de download
Invoke-WebRequest -Uri "$urlDownload" -OutFile "$caminhoDownload" # Faz o download
Expand-Archive -Path "$caminhoDownload" -DestinationPath "$pastaferramenta" -Force # Descompacta o ZIP para uma pasta
Remove-Item "$caminhoDownload" # Remove o arquivo de download

# Download e configuração: API Wrapper
Write-Host "Configurando: Wrapper"
$urlDownload = "https://tools.veracode.com/integrations/API-Wrappers/C%23/bin/VeracodeC%23API.zip" # Define a url de download
$caminhoDownload = "$env:LOCALAPPDATA/VeracodeAPI.zip" # Define um caminho para o arquivo de download
Invoke-WebRequest -Uri "$urlDownload" -OutFile "$caminhoDownload" # Faz o download
Expand-Archive -Path "$caminhoDownload" -DestinationPath "$pastaferramenta" -Force # Descompacta o ZIP para uma pasta
Rename-Item -Path "$pastaferramenta/VeracodeC#API.exe" -NewName "$pastaferramenta/VeracodeAPI.exe" -Force # Renomei para remover o # do nome
Remove-Item "$caminhoDownload" # Remove o arquivo de download

# Encerramento
Write-Host "Processo concluído"
```

Dessa forma temos tudo configurado para utilizar Veracode de forma fácil no Windows.