Vamos organizar esse projeto em duas partes, sendo a primeira os requisitos e a segunda o processo de fato.
Para a pipeline em si, estou utilizando uma imagem Windows e criei um grupo de variáveis onde armazenei as duas credenciais de API, pode saber mais sobre elas aqui, utilizando os nomes padrões veracode_api_key_id e veracode_api_key_secret:
trigger:
- main
variables:
- group: Veracode-DAST
- name: veracodeAppName
value: MSDN.Gruyere
pool:
vmImage: windows-latest
Na variável veracodeAppName, colocamos o nome do perfil de aplicação onde vinculamos o resultado do DAST
Para os requisitos, precisamos ter o HTTPIE e o autenticador da Veracode, podemos instalar eles via CLI:
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
pip install httpie
pip install veracode-api-signing
displayName: 'Install Requirements'
Para receber os resultados, vamos utilizar uma combinação de chamadas de API com o HTTPIE e o tratamento das informações via Powershell. O nosso fluxo é:
- Recebemos o nome do perfil
- Usamos ele para obter o código da aplicação/GUID
- Filtramos a ultima analise DAST completa
- Validamos se nela existem falhas, e caso existam, exibimos elas
Traduzindo para o Powershell, criamos um script chamado DAST-Resultados.ps1 com os seguintes comandos:
[CmdletBinding()]
param (
[Parameter()]
$veracodeAppName
)
# Recebe os detalhes do perfil de App
$infosApp = http --auth-type=veracode_hmac GET "https://api.veracode.com/appsec/v1/applications/?name=$veracodeAppName" | ConvertFrom-Json
$guidApp = $infosApp._embedded.applications.guid
# Recebe os scans DAST
$historicoDAST = http --auth-type=veracode_hmac GET "https://api.veracode.com/appsec/v2/applications/$guidApp/findings?scan_type=DYNAMIC&violates_policy=TRUE" | ConvertFrom-Json
$falhasDAST = $historicoDAST._embedded.findings
# Valida se existe alguma falha que viola a politica
$totalFalhas = $falhasDAST.count
if ($totalFalhas -gt 0) {
Write-Host "Foram encontradas falhas nesse scan"
$falhasDAST
Write-Error -Message "Total de Falhas: $totalFalhas" -Category SecurityError
}
No meu caso, salvei ele dentro da raiz do repositório.
Voltando ao nosso pipeline, podemos iniciar o script dessa forma:
- task: PowerShell@2
inputs:
filePath: 'DAST-Resultados.ps1'
arguments: '$(veracodeAppName)'
displayName: 'Resultados DAST'
No final, nosso script completo fica:
# O script PS1 está na seção de SOs/Windows
trigger:
- main
variables:
- group: Veracode-DAST
- name: veracodeAppName
value: MSDN.Gruyere
pool:
vmImage: windows-latest
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
pip install httpie
pip install veracode-api-signing
displayName: 'Install Requirements'
- task: PowerShell@2
inputs:
filePath: 'DAST-Resultados.ps1'
arguments: '$(veracodeAppName)'
displayName: 'Resultados DAST'
Top comments (0)