DEV Community

Cover image for Como pegar os resultados do DAST em um pipeline?
Ivo Dias for M3Corp

Posted on

Como pegar os resultados do DAST em um pipeline?

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
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

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 é:

  1. Recebemos o nome do perfil
  2. Usamos ele para obter o código da aplicação/GUID
  3. Filtramos a ultima analise DAST completa
  4. 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
}
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

Top comments (0)