SCA Agent-Based Deep Dive
Tags: veracode, security, sca, tutorial
Published: 2023-06-20 13:43:56

**Requisitos de implementação**
Liberação dos endereços:
- https://sca.analysiscenter.veracode.com
- https://api.sourceclear.io
- https://download.sourceclear.com

Ter um usuário com a role de Submitter.
Usar um sistema operacional e/ou imagem com suporte a comandos Unix ou Windows.
Para administrar os Workspaces, ter a role Workspace Administrator ou Workspace Editor.

**Como criar um Workspace**
Na tela inicial do [portal da Veracode](https://web.analysiscenter.veracode.com/login), vamos na seção "**Scans & Analysis**" e selecionamos "**Software Composition Analysis**":
![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ay8ivbsvrrxh72rdkjqu.png)

Nessa nova tela, selecionamos a aba "**Agent-Based Scan**", clicamos no botão "**Actions**" e selecionamos "**Create Workspace**":
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bj54npnbalg35zksm5kd.png)


Informamos um nome para esse ambiente e caso seja necessário vincular ele a um time, após digitar o nome clicamos em "**More Options**" e informamos o time, caso não seja necessário apenas clicamos em "**Create**".

A tela de configuração do agente vai ser aberta, nela podemos seguir guias específicos sobre como gerar e configurar o agente em varias ferramentas e sistemas. Como nosso objetivo é apenas pegar a credencial para utilizar a solução, podemos clicar em qualquer um, mas recomendo para agilizar que clique em "**Jenkins / Hudson**" e depois em "Create Agent & Generate Token":
![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j564ij9ldbjazxyxx3ls.png)

Conforme as orientações que vemos na tela, para autenticar com esse valor vamos precisar adiciona-lo a uma variável chamada **SRCCLR_API_TOKEN** independente de qual seja a ferramenta que vai implementar. 

**Como implementar o SCA numa esteira?**
Para exemplificar, vamos usar o Github Actions para fazer o uso do SCA Agent-Based para encontrar eventuais falhas nos componentes de terceiros, usando uma imagem Linux. 

Dentro da seção de Secrets do GitHub Action, vamos criar um valor com o nome **SCA**, onde vamos armazenar o valor da credencial que obtemos conforme a seção anterior. 

Nossa etapa pode ser executada simultaneamente ao processo de build ou de forma sequencial, recomendo quando possível paralelizar, já que isso vai ajudar no tempo total de execução do pipeline. Para implementar, precisamos apenas criar um job com o seguinte código: 
```
Veracode_SCA:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Veracode SCA
        env:
          SRCCLR_API_TOKEN: ${{ secrets.SCA }} # Lembrar de criar as credenciais no Secrets
        run: |
          curl -sSL 'https://download.sourceclear.com/ci.sh' | bash -s – scan --update-advisor
```

Existem vários parâmetros que pode utilizar dentro do SCA, para mais detalhes recomendo que leia a [documentação](https://docs.veracode.com/r/Veracode_SCA_Agent_Commands). Mas dentro de nosso exemplo, estamos utilizando a opção para fazer o scan na pasta onde ele for executado (é preciso que seja a mesma onde fica o arquivo de dependências do projeto, conforme a [linguagem](https://docs.veracode.com/r/c_comp_quickref)) e o recurso de Update Advisor, que verifica quais as versões que não vão quebrar o seu projeto caso atualizadas.

Entendendo os resultados
Uma das vantagens de implementa-lo é conseguir no proprio LOG de execução verificar os eventuais problemas encontrados, organizados em seções. 

Nosso LOG inicia com uma visão geral dos resultados, onde temos os números do que foi encontrado:
![Inicio do LOG](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qoxy6psh7jq11hj77eh.png)

Na seção de "Public Data" temos as falhas que já tem um registro publico, também conhecido como CVE, organizadas por severidade catalogada:
![Public Data](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b0ntl33sdxuyhon8omje.png)

Em "Premium Data" temos as falhas que a Veracode encontrou por meio de suas próprias pesquisas e que ainda não receberam um CVE. 
É possível consultar essa base por meio desse [link](https://sca.analysiscenter.veracode.com/vulnerability-database).
![Premium Data](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ieorr483fig6w8f2jnb9.png)

Na seção de licenciamento, vemos os números das quantidades nos níveis de potenciais riscos:
![Seção de licenciamento](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gjxg2hggle3be4tcawvz.png)

Em "Issues" temos todos os problemas listas e organizados por ID, tipo de falha, severidade, descrição e o ponto de falha (representando pelo nome do componente e sua versão):
![Issues](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w5ok6wz7q8p0za6pb7g5.png)

Por fim, temos a seção do Update Advisor com as recomendações de atualização de alguns componentes (quando identificadas melhores versões para o seu projeto dentro de algumas que poderiam causar alguma quebra) e um link para consultar os resultados na plataforma:
![Update Advisor](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q4py3vp9n56kw15oskmj.png)

Dentro da plataforma podemos ver as informações de forma mais visual:
![Plataforma](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0387vcz9ngj9k9dyt01.png)

Ao clicar em uma vulnerabilidade, temos os detalhes sobre ela e como corrigir:
![Detalhe das falhas](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p9fb22hzrq581e66pvl6.png)

E caso não seja uma dependência direta, temos acesso ao mapa de dependências: 
![Mapa de dependencias](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/03ti1kzeot5dk4r1cw4c.png)

**Como configurar regras para quebra de fluxo?**
Para fazer o gerenciamento das opções, no [portal da Veracode](https://web.analysiscenter.veracode.com/) acesse a aba de "**Scans & Analysis**" e clique em "**Software Composition Analysis**", selecionando a aba "**Agent-Based Scan**".

Nessa tela vamos ver a listagem de todos os Workspaces que criamos, bastando selecionar qual queremos personalizar as regras. 
![Agent](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aa2bpfy7oykejytaabj0.png)
Com o Workspace selecionado, vamos clicar em "**Rules**" no canto inferior direito. Nessa nova tela, selecionamos a aba "**Custom Rules**" e clicamos em "**Edit**":
![Rules](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ye0ukfellbl957m1j06x.png)
Agora cada uma das opções permite edição. 
Caso queira que para algum desses controles o pipeline quebre, altere em "**Level**" de "**Warning**" para "**Error**". Caso precise de algum controle diferente dos padrões, selecione "**Add Control**".

Depois de personalizar basta clicar em "**Save**" no mesmo local onde estava o botão "**Edit**". 

As modificações vão começar a funcionar no próximo scan.