Veracode: Usando Pipeline Scan no Windows

Ivo Dias
5 min readJan 16, 2021

Pipeline Scan é uma ferramenta criada pela Veracode, uma das principais empresas no ramo de segurança da informação, para analisar a qualidade e possíveis falhas de segurança em projetos.

O fluxo da ferramenta é bem simples, apontamos quais arquivos queremos que ele analise e a analise é feita. A ideia desse artigo, é mostrar como podemos construir um exemplo simples de código, que vai fazer o download da ferramenta, antes verificando se ela já não está instalada, receber os arquivos e enviar para a analise.

Antes de começar

Naturalmente, precisamos para utilizar a ferramenta, ter uma conta valida e gerar algumas informações, sendo no mínimo, seu ID e chave da API, para facilitar, vou deixar um link para o site do fabricante, onde tem melhores orientações sobre essa parte.

A ferramenta é feita em Java, então precisamos ter ele configurado para ela funcionar.

Criando uma função para utilizar a ferramenta

No meu caso, pensei em inicialmente criar uma função para fazer a validação, pois no cenário que precisei escrever esse script, precisava pegar vários arquivos dentro de uma pasta e enviar. Para escrever uma função, precisamos pensar no fluxo dela, basicamente, a nossa vai ser uma função muito simples, que recebe parâmetros e executa uma ação, sem ter um retorno de dados, ou seja, não transformamos nada com ela, apenas a criamos para evitar uma repetição de código para um processo especifico.

Para funcionar, precisamos de quatro informações, que chamaremos aqui de parâmetros, o ID da Veracode, a chave da API, o arquivo que queremos analisar e em qual pasta está a ferramenta. O arquivo que vamos passar, vai ser um objeto do Powershell e não um caminho, pois dentro da função, vamos pegar algumas informações dele. A ordem dos parâmetros é o que define a posição em que informaremos isso ao utiliza-la, então é importante pensar nisso.

Função e parâmetros

Definidos os parâmetros, conforme imagem acima, vamos trabalhar na função em si, eu particularmente, gosta de sempre utilizar a estrutura do Try-Catch, pois com ela, já temos um tratamento intuitivo para erros. Basicamente, colocamos o que queremos dentro do bloco Try, e em caso de algum erro ao executar, paramos e acionamos o bloca Catch, onde colocamos nossa mensagem de erro.

Dentro da função, vamos incialmente tratar aquele objeto com as informações do arquivo, onde vamos pegar duas informações dele, seu nome de exibição e seu caminho completo. Para acessar as informações de um objeto, colocamos o nome dele (no caso da variável que representa ele) “.” o nome do atributo que queremos a informação.

Depois, utilizamos a ferramenta Pipeline Scan, passando os parâmetros que pegamos seguindo o padrão de uso da ferramenta (vou deixar nas referencias o manual dela com todos os parâmetros e informações).

No bloco Catch, vamos pegar a possível mensagem de erro, e exibi-la de uma forma fácil de ser entendida. No final, nossa função ficara assim:

Função para utilizar o Pipeline Scan

Parâmetros de configuração

Para utilizar esse script, vamos precisar de algumas informações, eu particularmente, gosto de agrupar elas num trecho inicial do código, para facilitar futuras manutenções. Para esse projeto, vamos precisar do link de download da ferramenta, do nosso ID e chave da API, o tipo de arquivos que queremos filtrar e a pasta onde vamos instalar a ferramenta.

Não recomendo que deixe as chaves expostas no código, existem formas de fazer isso sem coloca-las diretamente, como utilizando o gerenciador de credenciais do Powershell, mas para esse exemplo, vamos fazer algo bem simples, mas volto a não indicar que em produção, e muito menos num projeto publico, deixe duas credenciais expostas. Nosso bloco ficara assim:

Configurações

Instalando a ferramenta

A ideia é que o script consiga trabalhar sozinho e que faça o download da ferramenta, mas não queremos que isso seja feita sem necessidade, por isso, antes do download, validamos se esse processo já não foi feito. Como a ferramenta já vem pronta, vamos apenas fazer o download do arquivo ZIP e extrair a ferramenta para o local que queremos.

Para esse processo, utilizaremos funções já prontas do Powershell, para validar se o caminho padrão que utilizamos já existe, e assim verificar se já temos a ferramenta, fazer o download e extrair o arquivo, conforme a imagem abaixo:

Download do Pipeline Scan

Com “./”, definimos que utilizaremos a pasta atual, ou seja, onde o script está sendo executado.

Encontrando os arquivos e verificando

Finalmente, vamos fazer a analise em si, mas antes, precisamos pegar o que vamos analisar. Para esse exemplo, vamos filtrar, dentro da pasta onde o script está sendo executado, todos os arquivos com uma determinada extensão (de um determinado tipo), incluindo as subpastas. Utilizaremos a função Get-ChildItem, para podermos receber essa informação como um objeto, assim poderemos pegar varias informações dele, como queremos para o uso da função.

Colocamos todos esses objetos em uma variável, e para poder acessar sequencialmente todos eles, vamos utilizar um laço de repetição, para que cada item da lista, seja passado como parâmetro para nossa função, ou seja, se tivermos 10 itens, faremos 10 vezes o processo, enviando um item por vez de acordo com sua posição na lista.

No final, nosso exemplo fica assim:

Recebe os arquivos e analisa

Utilizamos “*” para representar “qualquer nome”, assim podemos receber todos os itens, independente de seu nome, mas que terminem com a extensão que queremos.

Concluindo

Com esse script, podemos utilizar de uma forma fácil a ferramenta Pipeline Scan, vou deixar o link da postagem dele no Github, caso queria copiar ou utilizar, junto com alguns outros projetos que fiz relacionados a isso.

Referencias

Pipeline Scan

Tipos de arquivos suportados

Credenciais Veracode

Código no GitHub

--

--

Ivo Dias

MCC, MSLA and Microsoft Community Moderator. Currently work with DevOps and write articles about automation, IT support and script development