Divulgação de DoS de memória devido a spam de cabeçalhos

MEDIA TEAM

Antes do Bitcoin Core v24.0.1, os invasores podiam enviar spam para nós com cadeias de cabeçalhos de baixa dificuldade, que poderiam ser usadas para travar pares remotamente.

Esta questão é considerada Alto gravidade.

Detalhes

Bitcoin Core armazena os cabeçalhos do blockchain na memória. Isso o torna suscetível a sofrer DoS, fazendo com que ele baixe e armazene cadeias extremamente longas de cabeçalhos, mesmo que sejam de baixa dificuldade. É importante observar que, uma vez criada, uma cadeia de ataque poderá ser reutilizada para travar qualquer nó da rede.

A possibilidade de usar isso para atacar nós é conhecida há muito tempo e foi a principal razão pela qual o sistema de checkpoint ainda estava em vigor: fazer um invasor iniciar um ataque no último checkpoint torna-o muito mais caro do que começar no bloco gênese. No entanto, ao longo do tempo, com a diminuição dos custos do hashrate, até mesmo esta mitigação tornou-se menos eficaz.

Este ataque foi descoberto de forma independente e relatado ao projeto Bitcoin Core em janeiro de 2019 por David Jaenson, que sugeriu a introdução de novos pontos de verificação como uma mitigação prática. No entanto:

  1. Isso ainda deixa os nós que executam IBD sem proteção antes de receberem blocos de checkpoint.
  2. Ele depende da adoção semirregular do ecossistema de software atualizado com novos pontos de verificação, uma prática com a qual os contribuidores do Bitcoin Core há muito se sentem desconfortáveis.

Mais tarde, ganhou maior atenção quando Braydon Fuller postou seu artigo “Expansão da largura da cadeia” à lista de discussão bitcoin-dev em outubro de 2019. Ele já havia relatado isso de forma responsável à lista de segurança Bitcoin Core. A abordagem sugerida não foi adotada no Bitcoin Core devido a preocupações com a convergência da rede ao limitar o número de cadeias paralelas.

Na época, o custo computacional para criar uma enorme cadeia de cabeçalhos de baixa dificuldade era igual a cerca de 32,28% da mineração de um bloco na ponta. Isso representa um custo de cerca de 4,12 BTC, já que a recompensa do bloco era de cerca de 12,77 BTC.

Em Fevereiro de 2022, o custo do ataque caiu ainda mais para cerca de 14,73% do custo de mineração de um bloco, o que levou à investigação de soluções alternativas. Se não fosse resolvido, o custo hoje (setembro de 2024) seria de apenas 4,44% de um bloco. Estes números traduzem-se num custo de cerca de 1,07 BTC e 0,14 BTC respetivamente, dada a recompensa do bloco nestas datas.

Uma proteção contra este DoS foi implementada no Bitcoin Core PR
#25717em que o nó primeiro verificará se uma cadeia apresentada tem trabalho suficiente antes de se comprometer a armazená-la. Com isso, o Bitcoin Core não depende mais de pontos de verificação para se proteger contra quaisquer ataques conhecidos.

Atribuição

O crédito vai para David Jaenson e Braydon Fuller por redescobrirem o ataque de forma independente, estimando seu custo e sugerindo modificações.

O crédito vai para Suhas Daftuar e Pieter Wuille por pesquisar uma solução satisfatória e implementá-la.

Linha do tempo

  • 17/07/2010 – Bitcoin 0.3.2 é lançado, que introduz pontos de verificação. Eles protegem, entre outras coisas, contra spam de bloqueio de baixa dificuldade.
  • 21/11/2011 – O Bitcoin 0.5.0 é lançado, o que ignora a validação de script para blocos antes do último ponto de verificação. Isso torna a função dos pontos de verificação ainda mais crítica para a segurança.
  • 09/04/2014 – O bloco 295000 é extraído, que se torna o último ponto de verificação do Bitcoin Core. A proteção oferecida pelos pontos de verificação contra spam de bloco começa a diminuir a partir deste ponto, à medida que os custos de hashrate diminuem.
  • 16/02/2015 – Bitcoin Core 0.10.0 é lançado, com sincronização de cabeçalhos primeiro. Isso enfraquece o ataque de spam de bloco de baixa dificuldade para um bloco cabeçalho ataque de spam.
  • 08/03/2017 – O Bitcoin Core 0.14.0 é lançado, o que desembaraça o salto da validação de script dos pontos de verificação, deixando-os relevantes apenas para proteção contra spam de cabeçalho de bloco.
  • 28/01/2019 – David Jaenson relata esse problema à lista de discussão de segurança do Bitcoin Core.
  • 18/09/2019 – Braydon Fuller envia por e-mail a lista de segurança do Bitcoin Core com um artigo intitulado “Ataques de negação de serviço de expansão da largura da cadeia Bitcoin”, que discute os perigos do spam de bloco e cabeçalho de bloco, uma análise de custos e uma solução proposta.
  • 26/09/2019 – Suhas Daftuar responde a Braydon Fuller que é um problema conhecido e o convida a postar seu artigo na lista de discussão bitcoin-dev.
  • 04/10/2019 – Braydon Fuller envia seu artigo para a lista de discussão bitcoin-dev.
  • 31/10/2019 – Em resposta aos eventos acima, Suhas Daftuar abre relações públicas
    #17332 com uma prova de conceito anterior, mas impraticável, ele trabalhou para melhorar a situação, na esperança de causar mais discussão sobre o tema.
  • 2022-02 – Suhas Daftuar e Pieter Wuille discutem esta questão e estimam que o custo deste ataque tornou-se agora tão baixo que justifica uma ação imediata e a necessidade de evitar falar sobre o assunto publicamente.
  • 22/06/2022 – Suhas Daftuar abre relações públicas #25454 como trabalho preparatório para implementar uma correção.
  • 22/06/2022 – Suhas Daftuar envia mensagens a um grupo de colaboradores de longa data detalhando o ataque, seu custo e a solução na qual Pieter Wuille e ele estão trabalhando.
  • 26/07/2022 – Suhas Daftuar abre relações públicas #25717em coautoria com Pieter Wuille, que implementa a correção.
  • 30/08/2022 – PR #25717 é mesclado.
  • 2022-10-21 – Relações Públicas de Niklas Gögge #26355 é mesclado, o que corrige um bug na etapa de pré-sincronização de cabeçalhos que foi introduzida no PR #25717. Sem isso, ainda teria sido possível bloquear cabeçalhos de spam. A descoberta deste bug, e a possibilidade de erros potenciais não descobertos, é a razão pela qual os antigos pontos de verificação ainda não foram totalmente removidos.
  • 12/12/2022 – Bitcoin Core 24.0.1 é lançado com a correção.
  • 07-12-2023 – A última versão vulnerável do Bitcoin Core (23.2) chega ao fim da vida útil.
  • 18/09/2024 – Divulgação pública.
Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *