Skip to main content

O que há de tão preocupante nos exploits em circulação — e como priorizá-los?

Escrito por
Headshot of Rachel Cheyfitz

Rachel Cheyfitz

Headshot of Shani Gal

Shani Gal

prioritize vulns

21 de novembro de 2019

0 minutos de leitura

Nem todas as vulnerabilidades são iguais.Embora seja verdade que você nunca deva ignorar uma vulnerabilidade de código aberto, algumas podem levar algum tempo até serem exploradas para invadir seu sistema. Por outro lado, certas vulnerabilidades conhecidas representam, de fato, um risco grande e imediato.

Em um cenário de vulnerabilidades cada vez mais numerosas, é difícil encontrar e corrigir todas com rapidez suficiente. Podemos supor que muitos responsáveis pela manutenção talvez desistam antes mesmo de começar, simplesmente por se sentirem frustrados com o volume.

Para diferenciar e priorizar as vulnerabilidades, devemos avaliar o risco que cada uma representa, definir qual é o risco mínimo que queremos abordar e começar por aí.

Um dos principais fatores de risco é a facilidade de explorar uma vulnerabilidade específica. Quando alguém demonstra como tirar proveito de uma vulnerabilidade, isso é chamado de exploit. Quando o exploit é amplamente divulgado em fontes como posts de blog, fóruns, exploit-db ou frameworks de exploração como metasploit, ele costuma ser chamado de exploit em circulação.

Uma pequena porcentagem das vulnerabilidades conhecidas será explorada, ou seja, usada para invadir um sistema. As vulnerabilidades de maior risco são aquelas com maior probabilidade de exploração e, por isso, devem ser priorizadas e corrigidas primeiro, como mostra o diagrama:

Diagrama de Venn que mostra todas as vulnerabilidades divulgadas, as vulnerabilidades exploradas e as vulnerabilidades no seu ambiente, destacando as principais vulnerabilidades para você

Neste post, explicamos como os exploits em circulação aumentam o risco, como avaliar esse risco e como priorizar e corrigir suas vulnerabilidades com rapidez.

Apache Struts: um exploit em circulação que levou a um ataque real

Você provavelmente já ouviu falar do vazamento de dados da Equifax, uma conhecida empresa de análise de crédito que expôs os dados altamente pessoais de 145,5 milhões de clientes. O vazamento teve origem em uma vulnerabilidade conhecida em um pacote do Apache Struts, para a qual havia exploits em circulação publicados apenas alguns dias antes do ataque. A disponibilidade do código do exploit ajudou os hackers a invadir os sistemas da Equifax dois meses depois da publicação — e as consequências foram devastadoras. Veja a linha do tempo dos ataques ao Apache Struts abaixo:

Linha do tempo de um ataque ao Apache Struts 2, mostrando a divulgação da vulnerabilidade, a correção, o lançamento do exploit e o aumento dos ataques entre 14 de fevereiro e 29 de abril.

O que é a maturidade do código de exploit e como ela influencia o risco de uma vulnerabilidade?

Usamos a maturidade de qualquer código de exploit (ou maturidade do exploit, para abreviar) para avaliar o quanto uma vulnerabilidade é realmente explorável no mundo real, considerando:

  • Se o exploit foi publicado (está “em circulação”); e

  • O quanto esses exploits publicados são realmente “úteis” — ou seja, se a publicação facilita de fato a exploração da vulnerabilidade.

Em outras palavras, se não houver nenhum exploit disponível, provavelmente será mais difícil tirar proveito de uma vulnerabilidade. Ao mesmo tempo, mesmo que haja um exploit disponível, isso também não significa necessariamente que a vulnerabilidade ainda possa ser explorada com facilidade.

Fatores que influenciam o risco de um exploit publicado

Neste post, vamos falar sobre dois fatores que influenciam a maturidade do código de exploit.

Fator I: qual é a praticidade de explorar essa vulnerabilidade?

O primeiro fator é se existe uma distância entre a teoria acadêmica e a implementação prática — e qual é o tamanho dessa distância. Para entender os riscos de um exploit em circulação, devemos avaliar se ele é:

  • Prático e aplicável no mundo real ou se, por enquanto, existe apenas na teoria; e

  • se pode ser aplicado em todos os casos ou se há condições que limitam seu uso.

Um exploit discutido apenas na teoria pode representar um risco muito menor do que um exploit publicado, testado e comprovado. Da mesma forma, um exploit aplicável a apenas 1% dos casos em que a vulnerabilidade aparece representa um risco muito menor do que um que demonstra como explorá-la com facilidade, independentemente das circunstâncias.

Fator II: qual é o nível de conhecimento necessário?

O segundo fator é o nível de conhecimento necessário para explorar a vulnerabilidade. É preciso ser um hacker especialista para tirar proveito dela ou até mesmo iniciantes conseguem fazer isso? Quanto mais fácil for usá-la, maior a probabilidade de alguém fazer isso.

Agora que colocamos as coisas em perspectiva, fica mais fácil entender a relação comum entre exploits publicados e vulnerabilidades que acabam sendo exploradas. Não é de surpreender que este estudo mostre que, quando há um exploit publicado disponível, a vulnerabilidade tem quatro vezes mais chances de ser realmente explorada. Outros estudos chegaram a afirmar que a publicação de um exploit aumenta o risco em 7 vezes!

Se já temos o CVSS, por que também precisamos da maturidade do exploit?

O Common Vulnerability Scoring System (CVSS) já considera alguns fatores de risco em seu cálculo, incluindo a maturidade do código, que indica se há um código de exploit público relevante disponível. No entanto, como o número de vulnerabilidades conhecidas cresce exponencialmente com o tempo, o sistema abrangente de pontuação nem sempre reflete o risco real — ou a ausência dele — que uma vulnerabilidade pode representar. Em um post publicado no início deste ano, Liran Tal observou que, embora a “pontuação da vulnerabilidade seja determinada por uma série de partes reconhecidas, o sistema complexo é composto por mais de uma dúzia de características principais e, sem orientação, experiência e informações de apoio adequadas, é fácil cometer erros”.

Priorizar pela maturidade do exploit é não apenas correto, mas também eficaz

Ao priorizar especificamente pela maturidade do exploit, podemos identificar com eficácia as vulnerabilidades de maior risco e reduzir o conjunto priorizado a apenas cerca de 10% do total. Entre os clientes da Snyk, apenas 4–12% das vulnerabilidades têm um exploit maduro disponível; esse número varia conforme o ecossistema (veja a tabela abaixo). Esse resultado é compatível com outros dados, como a estatística encontrada aqui, que indica que foram observados exploits em circulação para 5,5% das vulnerabilidades publicadas. 

A porcentagem de vulnerabilidades exploráveis em relação ao total pode variar entre ecossistemas, dependendo do uso dos pacotes. Na tabela abaixo, você encontra os dados médios de clientes da Snyk em alguns ecossistemas importantes: 

Ecossistema

Vulnerabilidades exploráveis
**
(dados agregados da Snyk)**

JavaScript

19,1%

Java

3,9%

Python

11,6%

Devemos corrigir outras vulnerabilidades? Claro que sim. Toda vulnerabilidade representa um risco, embora algumas sejam mais arriscadas que outras, e há muitas outras formas de priorizar — falaremos sobre elas no futuro. O ponto principal é que, como toda vulnerabilidade representa um risco, precisamos priorizar com atenção. E a melhor forma de começar é avaliar a maturidade do código de exploit.

Como descubro quais das minhas vulnerabilidades têm exploits em circulação?

Para apoiar e proteger nossos usuários, agora permitimos que priorizem as vulnerabilidades detectadas em seus projetos de acordo com a maturidade do exploit!

Com base em nossas pesquisas e no CVSS, definimos três categorias:

  • Maduro: há um código de exploit publicado que pode ser usado facilmente para explorar esta vulnerabilidade.

  • Prova de conceito: há uma prova de conceito teórica publicada ou uma explicação detalhada que demonstra como explorar esta vulnerabilidade.

  • Nenhum exploit conhecido: não foi encontrado código de prova de conceito nem exploit para esta vulnerabilidade, ou eles não estão disponíveis publicamente.

Ao consultar as vulnerabilidades do seu projeto, agora você pode ver se uma delas tem um exploit em circulação. Também é possível filtrar e priorizar os resultados da análise, corrigir as vulnerabilidades de acordo com essa prioridade e visualizar um relatório consolidado. Assim, você pode priorizar e corrigir primeiro as vulnerabilidades mais importantes e arriscadas.

Painel de vulnerabilidades mostrando um problema de alta gravidade do tipo Zip Slip no adm-zip e uma opção para abrir um pull request com a correção.

Comece agora!

É fácil começar:

1. Acesse a Snyk e abra a página detalhada de Projetos de qualquer um dos seus projetos:

Painel de projetos com uma lista de repositórios, busca, filtros por origem, barra de progresso da importação e contagem de problemas críticos, médios e baixos.

2. Os novos filtros aparecem à esquerda:

Escala de maturidade de exploits com as categorias Maduro, Prova de conceito, Nenhum exploit conhecido e Sem dados, além de contagens e descrições.

3. Clique em Maduro para ver as vulnerabilidades de maior risco com base na maturidade do exploit e começar a corrigi-las.

Consulte nossa documentação para saber mais.

O que vem a seguir?

Agora que lançamos a opção de priorizar pela maturidade do exploit, continuaremos apresentando outros métodos de priorização para corrigir vulnerabilidades e ajudar nossos usuários a proteger seus pacotes de forma eficaz.

Comece a participar de desafios de Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.