Na competição pela palavra mais popular do ano, a palavra "blockchain" provavelmente se tornaria o vencedor da esfera de TI. Apesar de haver uma tendência
doentia de introduzi-la ativamente em qualquer lugar - na medicina, na economia, na Internet das coisas, criando coelhos e fazendo tortas, as criptomoedas continuam sendo o principal escopo da blockchain. E todo mundo sabe: carteiras virtuais para hackers - como um gato com creme azedo.
Neste artigo, consideraremos o ataque "Timejacking", com base na vulnerabilidade no processamento de registros de data e hora de blocos no sistema de criptomoeda Bitcoin e tentaremos explicar por que o ataque é e sua implementação bem-sucedida não é.
PS Haverá muitos derivados da palavra "tempo". Muito.
Em poucas palavras
Pela primeira vez, Alex Boverman escreveu sobre o ataque Timejacking. Você pode se familiarizar com a publicação
aqui . Qual é a essência: o ataque explora vulnerabilidades do mecanismo para verificar os carimbos de data e hora dos blocos e o contador de tempo no Bitcoin. O atacante manipula um dos contadores de tempo do nó da vítima e cria um bloco "envenenado". A vítima abandonará esse bloco e o restante da rede aceitará com êxito e, por favor - provocamos um garfo! Toda a rede usa uma cadeia de blocos construídos após o "envenenado", e a vítima considera uma cadeia alternativa com gastos repetidos de token (também conhecidos como gastos duplos), nos quais o bloco "envenenado" não aparece, como válido.
O ataque é realizado em duas etapas. Para deixar mais claro, vamos falar sobre cada um deles separadamente.
Ato 1. Criando um garfo e isolando a vítima
Um invasor precisa gerar uma "MAÇÃE de contenção" - o bloco muito "envenenado" que a vítima ignorará. Da mesma forma, a vítima soltará outros blocos que serão adicionados sequencialmente após o "envenenado".
Como enganar uma vítima e forçá-lo a largar o bloco correto?O cabeçalho de cada bloco tem um carimbo de data / hora que o nó verifica durante a verificação. Esse valor deve cair dentro de um determinado intervalo, que chamaremos de janela temporária. O intervalo da janela de tempo é mostrado na figura abaixo:
A janela de tempo possui dois limites:
- menor - t min , é igual à mediana dos carimbos de data / hora dos 11 blocos anteriores ao bloco verificado
- superior - igual ao valor do tempo da rede t 0 + 2 horas
O valor do registro de data e hora do bloco é verificado não em relação ao horário do sistema do nó, mas em relação ao tempo médio dos seus vizinhos - horário da rede (também conhecido como horário ajustado na rede).
Como o tempo de rede é considerado:
- Quando uma nova conexão é estabelecida, os nós trocam a hora do sistema
- Cada nó calcula o desvio da hora do seu próprio sistema em relação à hora do sistema de cada um de seus vizinhos.
- Para desvios calculados, o valor mediano é selecionado.
- Hora do sistema nativo + desvio médio = tempo da rede
Aqui está um exemplo de cálculo do tempo da rede:
Assim, um invasor pode manipular o valor do tempo de rede da vítima conectando a ele um número suficiente de vizinhos anunciando o tempo de atraso do sistema. O valor do tempo da rede da vítima diminui - o limite superior do intervalo de valores aceitáveis do registro de data e hora do bloco verificado diminui. Mas se o desvio do tempo do vizinho exceder
70 minutos , o tempo dele não será levado em consideração ao calcular o tempo da rede. Portanto, o valor máximo pelo qual o tempo de rede da vítima pode ser reduzido é de 70 minutos.
Assim, nosso bloco "envenenado" é um bloco cujo carimbo de data e hora deve cair na janela de tempo de todos os nós da rede, exceto a vítima. Somente então a rede inteira aceitará com êxito, e a vítima cujo tempo de rede for modificado não a abandonará com menos sucesso. Na figura abaixo - a janela de tempo da vítima versus a janela de tempo dos nós restantes.
Observe que, graças ao protocolo NTP, podemos assumir que, para a maioria dos nós, a hora do sistema é aproximadamente a mesma, ou seja, a hora da rede de cada nó é próxima do valor da hora do sistema.
Como resultado, a vítima é isolada da rede principal e considera incorreta a cadeia principal de blocos, que será construída pelo restante dos nós a partir do bloco "envenenado". Ao mesmo tempo, a vítima aceitará com confiança os outros bloqueios, gerados pelo atacante pela cadeia alternativa.
Ato 2. Gastos duplos
Nesse estágio, o atacante gera uma cadeia alternativa, na qual adiciona uma transação que transfere tokens para a carteira da vítima. Blocos de corrente alternativos são enviados para a vítima. Na figura abaixo - a faixa de valores do registro de data e hora do bloco "envenenado".
A vítima aceitará essa cadeia, porque o valor dos carimbos de data / hora é selecionado pelo invasor em sua própria janela de tempo e os nós restantes a ignoram corretamente - afinal, eles já estão construindo sua cadeia a partir do bloco "envenenado", que é mais longo que a alternativa. Como resultado, a vítima acredita que recebeu fichas e envia as mercadorias. E a rede principal tem certeza de que os tokens não saíram da carteira do atacante e ele recebe os bens por "obrigado" - afinal, a maioria não pode estar enganada. Final, o herói do lado sombrio triunfa!
Mas não é tão simples
Armadilha No. 1Enorme poder de computação está envolvido na mineração de Bitcoin hoje. A probabilidade de geração bem-sucedida de um bloco "envenenado" pode ser estimada pela seguinte fórmula:
Hoje, o
hashrate total da rede Bitcoin é aproximadamente igual a H = 34 × 10
18 hash / s. Nesse caso, usando o dispositivo mais produtivo
desta lista , cuja taxa de hash declarada é h = 18 × 10
12 hash / s, a probabilidade de gerar um bloco “envenenado” em 1 ano (t = 365 × 24 × 60) é de aproximadamente 3%. E se extrairmos
dessas estatísticas um pool de mineração relativamente pequeno que possui 0,3% do hashrate total, a probabilidade de geração bem-sucedida de blocos em três dias é de 73%.
Armadilha No. 2Com o passar do tempo da rede da vítima, o registro de data e hora do bloco "envenenado" finalmente cairá na janela de tempo da vítima. Então a vítima mudará a cadeia alternativa para a principal, uma vez que toda a rede trabalha nela e sua altura será maior. O bloqueio "envenenado" cairá na janela de tempo da vítima em não mais de 70 minutos - este é o tempo máximo pelo qual é necessário concluir a segunda etapa.
Para que a vítima aceite a transação com gastos duplos, o bloco com ela deve ser confirmado por outros 6 blocos (para um cliente padrão). O infrator terá que gerar blocos de confirmação de forma independente e, ao mesmo tempo, é necessário cumprir os 70 minutos mencionados acima. Boverman
considera uma situação em que um invasor possui 10% da energia de toda a rede. Em tal situação, levará ~ 5,5 horas para gerar 6 blocos com uma taxa de sucesso de 10%. Por 3,3 horas, a probabilidade de sucesso cai para 1%, por 140 minutos - 0,147%. Segundo essas estimativas, gerar com sucesso 6 blocos em 70 minutos é uma fantasia.
Armadilha No. 3Quando o nó calcula o tempo da rede, leva em consideração o tempo do sistema apenas dos
200 primeiros vizinhos - o desvio médio não será recalculado. Isso significa que o ataque deve ser implementado até que o número de vizinhos já conectados à vítima não exceda 99 - caso contrário, o tempo anunciado pelo atacante não será mediano. Esse número de vizinhos será executado em cerca de 24 horas e, depois disso, a vítima precisará ser reiniciada - por exemplo, usando o DoS.
O fim
Em conclusão, podemos dizer que o ataque "Timejacking" é muito bom, mas nas duras realidades o Bitcoin está se tornando inaplicável. E quanto a outros sistemas usando blockchain? Vamos deixar esta pergunta para sua pesquisa!