<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: michelleamesquita</title>
    <description>The latest articles on DEV Community by michelleamesquita (@michelleamesquita).</description>
    <link>https://dev.to/michelleamesquita</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1035706%2F9554361c-ae26-473f-a43f-31cdfc81289e.png</url>
      <title>DEV Community: michelleamesquita</title>
      <link>https://dev.to/michelleamesquita</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/michelleamesquita"/>
    <language>en</language>
    <item>
      <title>Criando meu próprio Github Actions para a área de AppSec</title>
      <dc:creator>michelleamesquita</dc:creator>
      <pubDate>Mon, 03 Apr 2023 16:42:35 +0000</pubDate>
      <link>https://dev.to/appsec_brasil/criando-meu-proprio-github-actions-para-a-area-de-appsec-1251</link>
      <guid>https://dev.to/appsec_brasil/criando-meu-proprio-github-actions-para-a-area-de-appsec-1251</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GVcQMmWR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rd3jpeyl2u6t59bpv8ai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GVcQMmWR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rd3jpeyl2u6t59bpv8ai.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Olá pessoal, tudo bem? 😊&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;O que é Github Actions?&lt;/p&gt;

&lt;p&gt;Ele serve para você automatizar de forma fácil todo o processo de desenvolvimento de software, utilizando o conceito CI/CD por meio do &lt;strong&gt;&lt;a href="https://docs.github.com/en/actions"&gt;workflow&lt;/a&gt;&lt;/strong&gt; (build, teste e deploy ) no seu repositório.&lt;/p&gt;

&lt;p&gt;O mais interessante é que você pode criar uma action e compartilhar no &lt;strong&gt;&lt;a href="https://github.com/marketplace"&gt;Github Marketplace&lt;/a&gt;&lt;/strong&gt; e assim, qualquer pessoa poderá usar a sua action!&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

&lt;p&gt;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.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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 }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;code&gt;inputs&lt;/code&gt; : é utilizado para passar os parâmetros que serão passados no argumento argumento (&lt;code&gt;docker run sast -d=. -l=python&lt;/code&gt;) . Então, "path" recebe o valor de "python", no exemplo.&lt;br&gt;
&lt;code&gt;runs&lt;/code&gt; : é 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.&lt;br&gt;
Caso queiram ver os demais exemplos, segue a &lt;strong&gt;&lt;a href="https://docs.github.com/en/actions/creating-actions"&gt;documentação&lt;/a&gt;&lt;/strong&gt; do Github também 😊&lt;/p&gt;

&lt;p&gt;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 😅)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Iymy4f3A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gvza7iq5y9h1l2lht5vs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Iymy4f3A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gvza7iq5y9h1l2lht5vs.png" alt="Image description" width="880" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q583OU6D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sdg8y2stw25iccmrgakd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q583OU6D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sdg8y2stw25iccmrgakd.png" alt="Image description" width="880" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y-0Puho6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ny3i2ipr2cy248m68ffc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y-0Puho6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ny3i2ipr2cy248m68ffc.png" alt="Image description" width="880" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XvxE6sX1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s31g4yrdqwc25by8wne9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XvxE6sX1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s31g4yrdqwc25by8wne9.png" alt="Image description" width="880" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Link para minha Action no Marketplace: &lt;a href="https://github.com/marketplace/actions/sast-validator"&gt;https://github.com/marketplace/actions/sast-validator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Link para o meu repositório no Github:&lt;br&gt;
&lt;a href="https://github.com/michelleamesquita/sast-validator"&gt;https://github.com/michelleamesquita/sast-validator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para criar tags no versionamento, segue as linhas de código:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;➜ git tag -a -m “My first action release” v40&lt;br&gt;
➜ git push - follow-tags&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qjKbeXp3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ncia5yvb5vdngfok0cb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qjKbeXp3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ncia5yvb5vdngfok0cb7.png" alt="Image description" width="880" height="78"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Por fim, quando houver um push na branch Main, o código que analisa vulnerabilidades irá avaliar essa branch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MHb_ewMe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9db3aoti8s68p2tn0u1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MHb_ewMe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9db3aoti8s68p2tn0u1n.png" alt="Image description" width="880" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FmfiGUOP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kw340x7r3q2lqrrzaorc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FmfiGUOP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kw340x7r3q2lqrrzaorc.png" alt="Image description" width="880" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zBheGwbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j1k6ao427nqdomps6l60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zBheGwbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j1k6ao427nqdomps6l60.png" alt="Image description" width="880" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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 &lt;strong&gt;validar&lt;/strong&gt;. Como também, podemos aumentar a quantidade de regras e também para linguagens específicas, onde utilizei o RegEx para realizar esses testes.&lt;/p&gt;

&lt;p&gt;Espero que tenham gostado 💜👩‍💻&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>devsecop</category>
      <category>appsec</category>
    </item>
    <item>
      <title>Automações na área de AppSec 🤖</title>
      <dc:creator>michelleamesquita</dc:creator>
      <pubDate>Tue, 28 Feb 2023 22:50:58 +0000</pubDate>
      <link>https://dev.to/appsec_brasil/automacoes-na-area-de-appsec-2f65</link>
      <guid>https://dev.to/appsec_brasil/automacoes-na-area-de-appsec-2f65</guid>
      <description>&lt;p&gt;Olá, pessoal.&lt;br&gt;
Tudo bem?&lt;/p&gt;

&lt;p&gt;Esse é o meu primeiro post utilizando a plataforma dev.to! Eu possuo um &lt;a href="https://michelleamesquita.medium.com/"&gt;blog&lt;/a&gt; no Medium também, onde falo de AppSec/DevSecOps caso queiram ler, mas dependendo, futuramente, eu possa adicionar alguns artigos que escrevi lá aqui também. 😊&lt;/p&gt;

&lt;p&gt;Sem mais delongas, gostaria de tratar um pouco sobre o assunto automações para a área de AppSec.&lt;/p&gt;

&lt;p&gt;Começo com esse texto pois dentro dessa vasta área de Application Security, existe espaço para todos trabalharem, desde conscientização dos desenvolvedores ou mesmo adição de ferramentas na pipeline!&lt;/p&gt;

&lt;p&gt;No entanto, o foco hoje é na parte de &lt;strong&gt;secure code review&lt;/strong&gt;! Isso é importante de ser falado pois muito se fala de adição de ferramentas de &lt;strong&gt;&lt;a href="https://owasp.org/www-community/Source_Code_Analysis_Tools"&gt;SAST&lt;/a&gt;, &lt;a href="https://owasp.org/www-project-devsecops-guideline/latest/02b-Dynamic-Application-Security-Testing"&gt;DAST&lt;/a&gt; e &lt;a href="https://owasp.org/www-project-dependency-check/"&gt;SCA&lt;/a&gt;&lt;/strong&gt;. No entanto, as ferramentas trazem bastante &lt;em&gt;&lt;strong&gt;falso positivos&lt;/strong&gt;&lt;/em&gt;. Assim, temos que exercitar bem a lógica de programação para validarmos o &lt;em&gt;output&lt;/em&gt; que a ferramenta retorna. Como também, questionar se a ferramenta está validando todos os pontos que ela deveria checar.&lt;/p&gt;

&lt;p&gt;Dessa forma, o secure code review é extremamente necessário para validar e confirmar o que o SAST retorna. Isso porque as ferramentas possuem diversas lógicas internas com expressões regulares, mas que nem sempre identificam que um ponto foi tratado (falso positivo) ou não retornam todos os pontos que estão vulneráveis!&lt;/p&gt;

&lt;p&gt;Além disso, é interessante pensar e entender na lógica que uma ferramenta de SAST funciona. Nesse caso, trouxe como exemplo o &lt;a href="https://checkmarx.com/glossary/static-application-security-testing-sast/"&gt;Checkmarx&lt;/a&gt;, na imagem abaixo, é que ela analisa o input da ferramenta (parâmetros), output (saída para o usuário) e através disso, ele busca se existe um sanitizador (algo que modifique a entrada do usuário) para a vulnerabilidade &lt;strong&gt;&lt;a href="https://owasp.org/www-community/attacks/xss/"&gt;XSS&lt;/a&gt;&lt;/strong&gt;. Caso exista essa regra na ferramenta, ele entende que a vulnerabilidade foi tratada.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W-zmsmWV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v868aujwh5p0wgfns2jt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W-zmsmWV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v868aujwh5p0wgfns2jt.png" alt="Imagem que exemplifica a lógica do Checkmarx" width="880" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como as ferramentas possuem uma lista de regras pré-setadas, é importante que o analista de AppSec também crie suas próprias regras de acordo com as vivências na área, até para confirmar ou analisar se existem pontos também críticos. Embora as ferramentas na pipeline já agilizem muito o processo, precisamos ter esse entendimento que é necessário realizar nossa própria &lt;strong&gt;análise&lt;/strong&gt; também. &lt;/p&gt;

&lt;p&gt;Para isso, eu desenvolvi um script que funciona como um grande &lt;strong&gt;&lt;a href="https://regexr.com/"&gt;RegEx&lt;/a&gt;&lt;/strong&gt;, onde eu crio as minhas regras para validar ainda mais pontos.&lt;/p&gt;

&lt;p&gt;Segue o link no Github para quem quiser contribuir também 😎.&lt;br&gt;
&lt;a href="https://github.com/michelleamesquita/sast-validator"&gt;https://github.com/michelleamesquita/sast-validator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu criei regras para algumas das principais vulnerabilidades que vejo acontecer no dia-a-dia. Como também, separei por algumas funcionalidades como autenticação, upload de arquivos e reset/conexão de bancos com senhas. Quando falamos de code review, esse é um ponto super importante para entender aonde procurar por vulnerabilidades: &lt;strong&gt;funcionalidades da aplicação&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Funcionamento da aplicação:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h2IYN8fg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l9re92jwwkhawxmnw55e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h2IYN8fg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l9re92jwwkhawxmnw55e.png" alt="Imagem que contém o comando para executar o script" width="880" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comando:&lt;br&gt;
&lt;code&gt;python3 sast.py -d PATH -l Language (optional) &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Output:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cPKo0j-W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/87wz1trdc5n1py74smok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cPKo0j-W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/87wz1trdc5n1py74smok.png" alt="Imagem que contém o output do script" width="880" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espero que gostem! 💜👩‍💻&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
