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:
- Isso ainda deixa os nós que executam IBD sem proteção antes de receberem blocos de checkpoint.
- 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.