<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Brainfork]]></title><description><![CDATA[Brainfork]]></description><link>https://ricardomaia.eti.br</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1646618149669/5_byEt0hQ.png</url><title>Brainfork</title><link>https://ricardomaia.eti.br</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 11 May 2026 21:31:07 GMT</lastBuildDate><atom:link href="https://ricardomaia.eti.br/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Automatizando a descoberta de Plugins do WordPress]]></title><description><![CDATA[Já faz um tempo que tenho utilizado a ferramenta Nuclei do ProjectDiscovery para automatizar o processo de inventário de ativos e identificação de componentes vulneráveis em aplicações.
O WordPress é sem dúvida o CMS (Content Management System) mais ...]]></description><link>https://ricardomaia.eti.br/automatizando-a-descoberta-de-plugins-do-wordpress</link><guid isPermaLink="true">https://ricardomaia.eti.br/automatizando-a-descoberta-de-plugins-do-wordpress</guid><category><![CDATA[Nuclei]]></category><category><![CDATA[WordPress]]></category><category><![CDATA[infosec]]></category><dc:creator><![CDATA[Ricardo Maia]]></dc:creator><pubDate>Sat, 24 Dec 2022 01:42:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671845619990/6f01a34b-4f5b-4caa-a4f5-de826ee8944d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Já faz um tempo que tenho utilizado a ferramenta Nuclei do ProjectDiscovery para automatizar o processo de inventário de ativos e identificação de componentes vulneráveis em aplicações.</p>
<p>O WordPress é sem dúvida o CMS (Content Management System) mais popular na Internet, ocupando uma fatia de nada mais que 65% (para se ter uma ideia o 2º colocado tem uma participação de apenas 6,6%).</p>
<p>O Nuclei funciona por meio de <a target="_blank" href="https://github.com/projectdiscovery/nuclei-templates">templates</a> que instruem a ferramenta quais ações realizar sobre o alvo. Esta ações podem ser desde uma simples identificação de um software até a exploração de uma vulnerabilidade em várias etapas.</p>
<p>Um dos templates disponíveis no Nuclei fazia a identificação dos plugins presentes em uma instalação do WordPress por força-bruta, passando uma relação de aproximadamente 90.000 palavras. Essa abordagem não me pareceia muito eficiente e, dependendo do número de URLs testadas, o processo se demonstrava bastante oneroso em termos de recursos de processamento além de inundar o alvo com requisições desnecessárias.</p>
<p>Pensando nisso, <a target="_blank" href="https://github.com/ricardomaia/nuclei-template-generator-for-wordpress-plugins/blob/main/src/python/main.py">desenvolvi um script em Python</a> que acessa o site do WordPress e faz uma varredura pelos 200 plugins mais populares e, em seguida, acessa o respectivo repositório SVN do plugin para recuperar o número da última versão disponível e, finalmente, gera automaticamente um template que, além de identificar o plugin, verifica se está na versão mais recente, oferecendo uma informação bastante útil sobre a possível presença de componentes desatualizados.</p>
<p>Esta é a aparência do template gerado, neste caso, para o plugin contact-form-7.</p>
<pre><code class="lang-yaml"><span class="hljs-attr">id:</span> <span class="hljs-string">wordpress-contact-form-7</span>

<span class="hljs-attr">info:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">Contact</span> <span class="hljs-string">Form</span> <span class="hljs-number">7</span> <span class="hljs-string">Detection</span>
  <span class="hljs-attr">author:</span> <span class="hljs-string">ricardomaia</span>
  <span class="hljs-attr">severity:</span> <span class="hljs-string">info</span>
  <span class="hljs-attr">reference:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">https://wordpress.org/plugins/contact-form-7/</span>
  <span class="hljs-attr">metadata:</span>
    <span class="hljs-attr">plugin_namespace:</span> <span class="hljs-string">contact-form-7</span>
    <span class="hljs-attr">wpscan:</span> <span class="hljs-string">https://wpscan.com/plugin/contact-form-7</span>
  <span class="hljs-attr">tags:</span> <span class="hljs-string">tech,wordpress,wp-plugin,top-100,top-200</span>

<span class="hljs-attr">requests:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">method:</span> <span class="hljs-string">GET</span>
    <span class="hljs-attr">redirects:</span> <span class="hljs-literal">true</span>
    <span class="hljs-attr">max-redirects:</span> <span class="hljs-number">2</span>
    <span class="hljs-attr">path:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"<span class="hljs-template-variable">{{BaseURL}}</span>/wp-content/plugins/contact-form-7/readme.txt"</span>

    <span class="hljs-attr">payloads:</span>
      <span class="hljs-attr">last_version:</span> <span class="hljs-string">helpers/wordpress/plugins/contact-form-7.txt</span>

    <span class="hljs-attr">extractors:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">type:</span> <span class="hljs-string">regex</span>
        <span class="hljs-attr">part:</span> <span class="hljs-string">body</span>
        <span class="hljs-attr">internal:</span> <span class="hljs-literal">true</span>
        <span class="hljs-attr">name:</span> <span class="hljs-string">internal_detected_version</span>
        <span class="hljs-attr">group:</span> <span class="hljs-number">1</span>
        <span class="hljs-attr">regex:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-string">'(?i)Stable.tag:\s?([\w.]+)'</span>

      <span class="hljs-bullet">-</span> <span class="hljs-attr">type:</span> <span class="hljs-string">regex</span>
        <span class="hljs-attr">part:</span> <span class="hljs-string">body</span>
        <span class="hljs-attr">name:</span> <span class="hljs-string">detected_version</span>
        <span class="hljs-attr">group:</span> <span class="hljs-number">1</span>
        <span class="hljs-attr">regex:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-string">'(?i)Stable.tag:\s?([\w.]+)'</span>

    <span class="hljs-attr">matchers-condition:</span> <span class="hljs-string">or</span>
    <span class="hljs-attr">matchers:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">type:</span> <span class="hljs-string">dsl</span>
        <span class="hljs-attr">name:</span> <span class="hljs-string">"outdated_version"</span>
        <span class="hljs-attr">dsl:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-string">compare_versions(internal_detected_version,</span> <span class="hljs-string">concat("&lt;</span> <span class="hljs-string">", last_version))

      - type: regex
        part: body
        regex:
          - '(?i)Stable.tag:\s?([\w.]+)'</span>
</code></pre>
<p>Como se pode notar o template utiliza como <code>payload</code> o conteúdo de um arquivo que contêm o número da versão do componente para então compará-lo à versão detectada no arquivo <code>readme.txt</code>.</p>
<p>O template quando executado gera uma saída como na figura a seguir:</p>
<p><img src="https://user-images.githubusercontent.com/1353811/205873579-e92e61d0-f81f-4648-9216-5f1fa22168bb.png" alt="image" /></p>
<p>Observe a diferença entre as variáveis <code>outdate_version</code> e <code>detected_version</code> que são exibidas conforme o caso.</p>
<p>Para manter os templates atualizados faço uso do <a target="_blank" href="https://github.com/ricardomaia/nuclei-template-generator-for-wordpress-plugins/blob/main/.github/workflows/template-update.yml">GitHub Actions</a> para executar o script diariamente.</p>
<p>Na data de hoje (23/12/2022) meu <a target="_blank" href="https://github.com/projectdiscovery/nuclei-templates/pull/6202">PR (Pull Request)</a> foi aceito e incluído no repositório do projeto. 🎉🎉🎉</p>
]]></content:encoded></item><item><title><![CDATA[Protegendo o acesso ao Splunk® free]]></title><description><![CDATA[Tenho usado há alguns anos plataforma Splunk® Enterprise para agregar, correlacionar e visualizar os logs de aplicações em meus servidores virtuais, contudo, a licença free possui algumas limitações importantes que no meu contexto, as principais são ...]]></description><link>https://ricardomaia.eti.br/protegendo-o-acesso-ao-splunkr-free</link><guid isPermaLink="true">https://ricardomaia.eti.br/protegendo-o-acesso-ao-splunkr-free</guid><category><![CDATA[infrastructure]]></category><category><![CDATA[ssh]]></category><dc:creator><![CDATA[Ricardo Maia]]></dc:creator><pubDate>Mon, 07 Mar 2022 02:25:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1646619784077/UT6EB1Svz.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Tenho usado há alguns anos plataforma Splunk® Enterprise para agregar, correlacionar e visualizar os logs de aplicações em meus servidores virtuais, contudo, a licença free possui algumas limitações importantes que no meu contexto, as principais são o fato de não suportar autenticação e só existir o perfil administrador.</p>
<p>Com estas limitações todas as funcionalidades como busca, dashboards, configurações e logs ficam acessíveis para qualquer pessoa que acesse a console web. Então para prevenir esse problema você poderia usar um túnel SSH para conectar o seu PC diretamente ao servidor que estaria configurado para aceitar apenas conexões locais.</p>
<p>Aqui parto do pressuposto que você já possui o Splunk instalado e tem conhecimentos básicos sobre comandos de terminal no Linux.</p>
<p>Edite o arquivo web.conf localizado em <code>$SPLUNK_HOME/etc/system/default/</code> modificando a respectiva linha como se segue:</p>
<pre><code class="lang-ini"><span class="hljs-attr">server.socket_host</span> = localhost
</code></pre>
<p>Salve as mudança e reinicie o serviço SplunkWeb:</p>
<pre><code class="lang-console">$SPLUNK_HOME/bin/splunk restart splunkweb
</code></pre>
<p>Crie um túnel SSH entre seu computador e servidor remoto:</p>
<pre><code class="lang-terminal">ssh user@your-splunk-server.com -L 1080:localhost:8000
</code></pre>
<p>Abra seu navegador no endereço: http://localhost:1080/en-US/app/launcher/home</p>
<p>Pronto! Você verá que a interface gráfica web será exibida mesmo sem estar exposta a Internet. 👌</p>
]]></content:encoded></item><item><title><![CDATA[É seguro utilizar Autenticação sem Senha?]]></title><description><![CDATA[Em segurança da informação é comum ouvirmos falar na tríade da segurança composta pelos aspectos da confidencialidade, integridade e disponibilidade, contudo, temos outra tríada importante e nem tão conhecida que envolve os aspectos da segurança, fun...]]></description><link>https://ricardomaia.eti.br/e-seguro-utilizar-autenticacao-sem-senha</link><guid isPermaLink="true">https://ricardomaia.eti.br/e-seguro-utilizar-autenticacao-sem-senha</guid><category><![CDATA[Security]]></category><category><![CDATA[passwords]]></category><dc:creator><![CDATA[Ricardo Maia]]></dc:creator><pubDate>Fri, 04 Mar 2022 03:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1646583291623/UeQONGVe6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Em segurança da informação é comum ouvirmos falar na tríade da segurança composta pelos aspectos da <strong>confidencialidade, integridade e disponibilidade</strong>, contudo, temos outra tríada importante e nem tão conhecida que envolve os aspectos da <strong>segurança, funcionalidade e usabilidade</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1646585252006/O_h_0n-iS.png" alt="hashnode post.png" /></p>
<p>Como se pode observar na representação do triângulo, existe uma interdependência entre estes aspectos. À medida que tornamos um sistema mais seguro, dificultamos seu uso e perdemos em termos de funcionalidade. Ou seja, em teoria, um sistema perfeitamente seguro seria tão difícil de usar ou com tão poucas funcionalidades que se tornaria inútil.</p>
<p>Na contramão deste processo observamos o crescimento da Autenticação sem Senha ou Passwordless Authentication, com a finalidade de proporcionar, simultaneamente, maior segurança e usabilidade (facilidade de uso). Mas o quanto disso é verdade?</p>
<p>Em primeiro lugar, precisamos perceber que a proteção de dados por senhas já não é mais suficiente. Segundo <a target="_blank" href="https://www.verizon.com/business/resources/reports/2021/2021-data-breach-investigations-report.pdf">relatório da Verizon</a>, estima-se que aproximadamente 81% dos incidentes com comprometimento de dados ocorrem em razão de senhas fracas ou roubadas.</p>
<p>Somado a este cenário, em <a target="_blank" href="https://services.google.com/fh/files/blogs/google_security_infographic.pdf">enquete realizada pelo Google / Harris Poll</a>, aponta que 52% dos respondentes utilizam a mesma senha em vários serviços e 13% utiliza a mesma senha em todas as suas contas.</p>
<p>Na autenticação sem senha a verificação das credenciais não depende do segredo de algo que usuário sabe (a senha), mas sim de algo que o identifica de forma única (posse).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1646619310447/WTOb0_fWA.jpeg" alt="1646439316512.jpeg" /></p>
<p>A autenticação sem senha anda de mãos dadas com outro conceito, denominado autenticação de dois fatores (two factor authentication - 2FA) que utiliza, por exemplo, uma segunda senha de uso único ou "link mágico" enviado por e-mail, SMS, por meio de aplicativos instalados no celular, biometria (iris, digital, face etc.) ou ainda <a target="_blank" href="https://fidoalliance.org/how-fido-works/">tokens UF2/FIDO</a>.</p>
<p>Alguns benefícios no uso da autenticação sem senha incluem:</p>
<ul>
<li>melhor experiência do usuário;</li>
<li>simplificação na gestão de senhas pela área de TI;</li>
<li>menor exposição a ataques de força bruta, <em>phishing</em>, <em>keylogging</em> ou roubo de credenciais;</li>
</ul>
<p><strong>Mas finalmente respondendo a pergunta... É seguro utilizar Autenticação sem Senha?
</strong></p>
<p>Bem, isso depende principalmente do método utilizado. Entre os mais fracos estão os links mágicos ou códigos de uso único enviados por e-mail. Isso porque a segurança estará diretamente relacionada a segurança do e-mail que pode utilizar para autenticação a forma convencional de usuário e senha.
Em terceiro lugar eu elegeria o SMS. Apesar de estar sujeito a ataques de <a target="_blank" href="https://en.wikipedia.org/wiki/SIM_swap_scam">SIM Swap</a> ou interceptação, é bem mais seguro do que o e-mail, e a mensagem é entregue diretamente para algo que o usuário de fato tem a posse física, no caso, o celular.</p>
<p>No segundo lugar os aplicativos de autenticação no celular. Esse método resolve o problema do SIM Swap, mas normalmente requer que você armazene de forma segura, geralmente de forma impressa, códigos de backup para o caso de perda do aparelho. Ainda assim gosto bastante desta abordagem.
No topo da lista e primeiro lugar estão os tokens UF2/FIDO. Estes dispositivos podem combinar múltiplos fatores de autenticação, como biometria da digital, e utiliza técnicas avançadas de criptografia assimétrica.</p>
<p>Os maiores problemas na autenticação sem senha, como já mencionado, são os custos elevados dependendo da solução, não protege contra ataques de SIM Swap, pode ser um problema para o usuário no caso da perda do dispositivo (celular ou token) e a biometria não é a prova de falhas.
Apesar de tudo, é um controle de segurança que vale à pena. O Google, por exemplo, iniciou no ano passado a adoção de 2FA para seus usuários e já r<a target="_blank" href="https://blog.google/technology/safety-security/reducing-account-hijacking/">eduziu em 50% o comprometimento de contas entre os usuários que adotaram</a>.</p>
]]></content:encoded></item></channel></rss>