Criando meu próprio Github Actions para a área de AppSec
Tags: githubactions, devsecop, appsec
Published: 2023-04-03 16:42:35


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rd3jpeyl2u6t59bpv8ai.png)


Olá pessoal, tudo bem? 😊

Hoje resolvi trazer esse tema, pois na área de AppSec/DevSecOps é muito importante conhecer outras ferramentas que possam ajudar na integração e checagens de segurança durante a fase de desenvolvimento de um software.

O que é Github Actions?

Ele serve para você automatizar de forma fácil todo o processo de desenvolvimento de software, utilizando o conceito CI/CD por meio do **[workflow](https://docs.github.com/en/actions)** (build, teste e deploy ) no seu repositório.

O mais interessante é que você pode criar uma action e compartilhar no **[Github Marketplace](https://github.com/marketplace)** e assim, qualquer pessoa poderá usar a sua action!

Achei essa ideia sensacional, principalmente se você quiser criar um código, como no nosso caso, que será para encontrar vulnerabilidade no código. Assim, não precisaremos passar por todos steps como clonar o repositório do projeto, instalar dependências ou Docker para o projeto específico, para depois executá-lo!

Agora que entendemos para o que serve o Github Actions, precisamos criar a nossa Action. Para isso, termos que ter em mente que precisamos criar um arquivo chamado action.yml e que o mesmo precisa estar no diretório principal (root). Dessa forma, será entendido pelo Github que esse é o arquivo que dará origem a nossa action.

```
name: 'SAST validator'
author: 'michelleamesquita'
description: 'Using python to verify vulnerabilities into code'
inputs:
  path:
    required: true
    default: "."
  language:
    required: false
runs:
  using: 'docker'
  image: 'Dockerfile'
  args:
    - -d=${{ inputs.path }}
    - -l=${{ inputs.language }}
```

Nesse arquivo, é importante entendermos que possuem alguns parâmetros importantes que serão usados para a criação da minha action utilizando container (Docker).

`inputs` : é utilizado para passar os parâmetros que serão passados no argumento argumento (`docker run sast -d=. -l=python`) . Então, "path" recebe o valor de "python", no exemplo.
`runs` : é a parte principal do actions. Ele serve para definir o tipo de runner, que no nosso caso é 'docker'. Assim precisamos passar parâmetros específicos do Docker. Por exemplo a imagem e os argumentos que serão os inputs setados previamente.
Caso queiram ver os demais exemplos, segue a **[documentação](https://docs.github.com/en/actions/creating-actions)** do Github também 😊


Para utilizarmos essa action em outros projetos, será necessário publicar no Marketplace. Para isso, colocarei os passos abaixo: (só não reparem no número da versão que criei, pois estava apenas testando na época 😅)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gvza7iq5y9h1l2lht5vs.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sdg8y2stw25iccmrgakd.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ny3i2ipr2cy248m68ffc.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s31g4yrdqwc25by8wne9.png)


Link para minha Action no Marketplace: https://github.com/marketplace/actions/sast-validator

Link para o meu repositório no Github:
https://github.com/michelleamesquita/sast-validator

Para criar tags no versionamento, segue as linhas de código:

`➜ git tag -a -m “My first action release” v40
➜ git push - follow-tags`


Para adicionar a action no repositório, será necessário criar esse diretório: `.github/workflows/` , onde será necessário passar um arquivo yaml, como no exemplo abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ncia5yvb5vdngfok0cb7.png)

```
on:
  push:
    branches:
    - main

jobs:
  sast_job:
    runs-on: ubuntu-latest
    name: SAST Validator
    steps:
      - name: Checkout repository content
        uses: actions/checkout@v2 

      - name: SAST validator
        uses: michelleamesquita/sast-validator@v40
        with:
          options: -v $PWD/:/app
          path: .
          language: python
```

Nesse código acima, é importante entender que precisamos utilizar a `actions/checkout@v2` para poder ler o arquivo do diretório corrente do projeto que usará o `sast-validator`.
Utilizamos o parâmetro `options` para compartilhar o volume entre o container e a máquina virtual linux (Ubuntu) que está sendo utilizada para rodar esse job.

Por fim, quando houver um push na branch Main, o código que analisa vulnerabilidades irá avaliar essa branch.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9db3aoti8s68p2tn0u1n.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kw340x7r3q2lqrrzaorc.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j1k6ao427nqdomps6l60.png)



Assim, o código de validador de vulnerabilidades (SAST Validator), foi utilizado como prova de conceito para encontrar potenciais vulnerabilidades. No entanto, é importante salientar que é necessário o analista de segurança **validar**. Como também, podemos aumentar a quantidade de regras e também para linguagens específicas, onde utilizei o RegEx para realizar esses testes.

Espero que tenham gostado 💜👩‍💻