“O bom, o mau e o feio”; O que aconteceu no bug mais grave da história do Bitcoin

Durante mais de um ano, todas as versões do Bitcoin Core – a principal implementação de software do Bitcoin – continham um grave bug de software. O bug foi corrigido com o Bitcoin Core 0.16.3 (e o 0.17.0rc4), lançado esta semana, e a rede agora parece estar segura, sem nenhum dano. O projeto Bitcoin Core, desde então, lançou um relatóriocompleto de divulgação, revelando que o bug foi ainda pior do que se pensava anteriormente.

Para esclarecer a amplitude do erro, a agência de notícias Bitcoin Magazine listou os detalhes “bons, os maus e feios” sobre um dos erros mais desagradáveis do Bitcoin Core até hoje (não necessariamente nessa ordem).

O mau

O ruim, claro, é o bug em si, agora documentado como CVE-2018-17144 no banco de dados Common Vulnerabilities and Exposures.

O bug foi introduzido como parte de uma melhora de desempenho relacionada à retransmissão de blocos implementada no Bitcoin Core 0.14.0, lançado oficialmente em março de 2017. Em suma, o bug teria nós com falhas em rejeitar um bloco contendo uma transação que gasta as mesmas moedas (“Entradas”) várias vezes. Com isso, haveria uma forma (irregular) de gastos duplos, exatamente aquilo que o Bitcoin foi projetado para evitar.

O bug apresentou um problema sério, que poderia ter se manifestado de várias maneiras.

Primeiro, as versões do Bitcoin Core 0.14.0 a 0.14.2 (e, em alguns casos, versões mais recentes), teriam aceitado o bloco mas, ao mesmo tempo, reconheceriam que algo estava errado. No entanto, eles não seriam capazes de dizer exatamente o que estava errado. Como resultado, o nó pararia completamente de funcionar e desligaria. Se um bloqueio inválido causado por esse bug tivesse chegado a esses nós, eles teriam, na verdade, caído. E isso seria ruim.

Mas fica muito pior.

As versões Bitcoin Core 0.15.0 a 0.16.2 incluíram outra melhoria de desempenho, fazendo com que, em alguns casos, esses nós não mais percebessem que algo estava errado. Especificamente, se a moeda com gasto duplo não tivesse sido movida no mesmo bloco (o que geralmente é o caso), esses nós teriam aceitado a transação e bloqueariam normalmente. Já no pior cenário, um minerador mal intencionado poderia ter inflacionado a quantidade de Bitcoin copiando suas próprias moedas, e qualquer um que confiasse nas versões 0.15.0 a 0.16.2 do Bitcoin Core aceitaria essas moedas como válidas.

Tecnicamente, o bug também poderia ter causado um fork da blockchain entre nós afetados – Bitcoin Core 0.15.0 a 0.16.2 e forks que se basearam nelas – e nós não afetados – mais notavelmente o Bitcoin Core 0.13.2 e versões mais antigas, bem como implementações alternativas. No entanto, isso é improvável, já que a última categoria provavelmente não teria poder de hash suficiente para gerar um único bloco em alguns dias, muito menos vários blocos. Esses nós teriam parado em vez disso, esperando por um bloco válido.

Ainda assim, o bug em questão poderia ter permitido um dos piores ataques ao Bitcoin em anos. É preocupante para muitos que esse bug fez parte de um lançamento da implementação de software líder do Bitcoin, bem como vários forks baseados nele, e permaneceu despercebido por cerca de 18 meses.

O bom

Agora, vamos às boas notícias.

A primeira, e principal, é que o bug nunca foi explorado por ninguém.

A segunda boa notícia é que não seria pouco provável que o bug tivesse sido explorado. Isso ocorre porque o ataque só poderia ter sido explorado por um minerador que, intencionalmente, criasse um bloco de “ataque”; um minerador que fizesse isso por acidente ou um usuário comum não poderiam explorar a falha.

Isso significa que um minerador teria que arriscar conscientemente a perda de uma recompensa de US$ 80.000 (valores atuais). Um ataque como esse teria sido notado com bastante rapidez, pois tudo acontece em um blockchain público, e relatórios de incidentes provavelmente inundariam salas de bate-papo e fóruns. Nesse ponto, a base de usuários do Bitcoin certamente concordaria que a inflação adicional foi, na verdade, causada por um bug – e não deveria ser aceita como uma nova regra de protocolo.

Portanto, como com o bug que causou o incidente de estouro de valor em 2010 ou o bug que dividiu a rede Bitcoin em 2013, a maioria dos mineradores (por hash power) teria atualizado ou rebaixado seu software rapidamente, rejeitando o “bloco de ataque” e seguindo a “cadeia honesta” em seu lugar. Assim que esta cadeia honesta ultrapassasse a “cadeia de ataque”, os nós vulneráveis ​​teriam mudado para a cadeia honesta e desconsiderado a cadeia de ataque, deixando o minerador atacante sem nenhuma recompensa.

Além disso, as moedas na cadeia de ataque certamente perderiam valor rapidamente: os mercados não aceitarão uma moeda que pode ser copiada “do nada” por um minerador malicioso. Como tal, este teria feito cair imediatamente o valor das moedas duplicadas, derrotando o ponto do ataque. (O minerador também poderia ganhar dinheiro ao vender as moedas e derrubar os mercados, mas isso ainda traz riscos significativos.)

A terceira boa notícia é que o bug foi divulgado responsavelmente por uma pessoa desconhecida na segunda-feira a vários desenvolvedores do Bitcoin Core (e as implementações Bitcoin ABC e Bitcoin Unlimited). Ele foi originalmente apresentado como um bug de negação de serviço (DoS) que, como mencionado, melhorava as versões 0.14.0 a 0.14.2 do Bitcoin Core. Mas em uma análise mais aprofundada, o colaborador da Bitcoin Core e o funcionário da Chaincode Labs, Matt Corallo, descobriram que o mesmo bug também era uma vulnerabilidade.

O bug foi rapidamente corrigido e, na terça-feira, uma nova versão do Bitcoin Core foi lançada: Bitcoin Core 0.16.3. O bug também foi corrigido na versão Bitcoin Core, 0.17.0. Enquanto isso, o seleto grupo de colaboradores do Bitcoin Core que estavam cientes do bug começou a abordar os principais participantes do ecossistema Bitcoin, principalmente mineradores e grandes empresas, pedindo que eles atualizassem para o Bitcoin Core 0.16.3. Usuários regulares também foram convidados a atualizar.

A quarta boa notícia é que a maioria dos mineradores na rede provavelmente já atualizaram o sistema e se livraram do bug. Isso significa que, mesmo que um invasor tente explorá-lo, ele não conseguirá ir muito longe. Os mineradores honestos ultrapassariam a cadeia de ataque mais cedo ou mais tarde, e mesmo nós não atualizados aceitariam a cadeia honesta como a única cadeia válida. Por questões de segurança, recomenda-se atualmente que os usuários esperem por confirmações extras antes de aceitar um pagamento.

(Em termos técnicos, os efeitos no protocolo Bitcoin são os seguintes: O Bitcoin Core 0.15.0 introduziu um “bug acidental” que nunca foi acionado pelos mineradores e, portanto, nunca levou a um fork ou falha. O erro foi corrigido por uma atualização imposta pelo minerador nos últimos dois dias, que, a essa altura foi adotada por toda a comunidade.

O feio

A gravidade de um bug como esse pode ser complicada de se lidar em uma rede aberta, descentralizada e em operação contínua, suportada por software de código aberto. Como exemplificado quando o Bitcoin Unlimited corrigiu um bug no início de 2017, o próprio ato de corrigir uma vulnerabilidade no código pode revelá-lo a potenciais adversários, abrindo uma janela de ataque até que a correção seja amplamente implantada em nós no campo.

Para evitar tais ataques, os desenvolvedores do Bitcoin Core, conscientes do problema, decidiram não tornar pública a gravidade do bug. Inicialmente omitindo algumas informações de mineradores, empresas e o grande público, eles optaram por divulgar a vulnerabilidade DoS mas não a vulnerabilidade à inflação. Eles esperavam que a vulnerabilidade do DoS (e algumas recomendações fortes) fosse razão suficiente para os usuários atualizarem os sistemas, sem avisar um invasor em potencial. Uma divulgação completa seguiria mais tarde.

No entanto, nem todos apoiaram essa abordagem. Como o bug ficou sob os holofotes, mais pessoas começaram a descobrir por si próprias que o bug era mais grave do que apenas uma vulnerabilidade DoS. Há rumores de que alguns começaram a vazar toda a extensão da vulnerabilidade, possivelmente colocando a rede Bitcoin em maior risco de ataque. Quando a vulnerabilidade foi reportada no Hacker News (embora mais tarde retraída), havia poucas razões para ocultá-lo por muito mais tempo.

Felizmente, até então, parecia que o Bitcoin Core sabia que a maioria dos mineradores tinha atualizado, o que significa que a rede Bitcoin está segura. Embora antes do planejado originalmente, o projeto Bitcoin Core optou por publicar a divulgação completa até quinta-feira à noite.

No entanto, várias altcoins baseadas no código do Bitcoin ainda estão vulneráveis ao ataque, e o fato de que a fraqueza agora é conhecida publicamente provavelmente não ajudará. Embora as principais implementações das maiores criptomoedas baseadas em bases de código Bitcoin – mais notavelmente o Bitcoin ABC do Bitcoin Cash – tenham implementado correções e também estejam seguras, moedas menores ainda podem estar em risco.

Por: Luciano Rocha
Fonte: Criptomoedas Fácil

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Categorias

WhatsApp chat