Skip to content

Instantly share code, notes, and snippets.

@paulojeronimo
Created June 22, 2017 14:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paulojeronimo/08c0b0e2c499407555bc748bc42b7122 to your computer and use it in GitHub Desktop.
Save paulojeronimo/08c0b0e2c499407555bc748bc42b7122 to your computer and use it in GitHub Desktop.

Como salvei meus bitcoins após passar por pânico e insegurança ao manuseá-los na carteira MultiBit

Imaginando ter sido hackeado e furtado em bitcoins

No dia 10 de junho de 2017, eu passei por uma situação real de pânico, imaginando ter sido hackeado e furtado em bitcoins. O problema começou quando tentei abrir minha carteira desktop no software MultiBit. Esse maldito software estourou um erro na tela quando eu o abri. Isso aconteceu, de repente, após eu já tê-lo colocado em execução no meu Macbook em momentos anteriores. E esse fato, por si só, já me deixou preocupado e tenso.

Trabalhando cotidianamente com softwares, já passei por várias situações em que eles param abruptamente mostrando uma tela para depuração do problema. Sei também que programas defeituosos, e/ou infectados com vírus, geralmente quebram com facilidade. Em versões antigas do Windows, em situações de quebra, aparece aquela famosa tela azul. (E, ainda hoje, há situações em que a tela amedrontadora reaparece). No macOS, vem uma tela pra depuração do programa. Obviamente, nenhum usuário comum (que não seja um desenvolvedor muito experiente) saberia como depurar um problema apresentado por uma tela como essa. No macOS, entretanto, situações de erro como essas são bem menos comuns de aparecerem que em outros sistemas operacionais.

O pior ainda estava por vir: ao reabrir o programa e inserir minha senha para tentar abrir a carteira, a senha que eu estava utilizando não funcionava mais. Desse momento em diante, vieram pensamentos desesperadores (sempre precedidas por um palavrão que indicava minha indignação):

  • "Cace$%%^ …​ *um hacker invadiu meu computador e roubou meus bitcoins."

  • "Put#@#%%% .. pra que eu fui essa fazer merda de transfeir bitcoins de minhas carteiras de custódia para uma carteira desktop? Eu li em alguns lugares que uma carteira de custódia seria mais segura, mas fui enganado …​!"

  • "Mer#$!%(…​ como explicarei pra minha esposa que perdi toda uma grana que poderíamos ter utilizado pra viajar e/ou fazer outros investimentos!?"

Tentei me acalmar. Veio a minha cabeça que eu havia seguido todas as regras mínimas de segurança. Agora, eu deveria por em prática o processo de recuperação da carteira MultiBit. Parti pra execução desse processo. Mas, pra aumentar ainda mais o meu pesadelo, o processo de recuperação não funcionava!

Agora, meu desespero entrava em nível hard! Nesse momento, minha esposa passa ao meu lado e tenta me apressar para sairmos. Ela precisaria estar em seu trabalho dentro de alguns instantes. E eu havia me comprometido a acompanhá-la. Pensei: ok, no caminho vou esfriar minha cabeça pra trilhar meus próximos passos.

Na saída, e a espera pelo elevador: uma mulher que conhece bem o seu marido nota, obviamente, que ele não está bem simplesmente observando sua face. Então, ela pergunta: o que aconteceu? Eu, sem saber como disfarçar meu terror, despejo: acho que um hacker invadiu meu notebook e roubou alguns bitcoins. Pronto …​ agora eu também colocava minha esposa em pânico, revelando uma possível verdade.

Nesse dia, o bitcoin estava custando por volta de R$ 10.000. E, eu disse que havia sido roubado em "alguns" bitcoins (não fracionados). Ela então faz a segunda pergunta: "Tem certeza? Estamos falando de quanto?" Eu respondo: "Algo em torno de milhares de reais. Mas, ainda, não estou certo do que realmente ocorreu. Quando chegarmos ao teu trabalho investigarei melhor. Pode ser simplesmente um erro do software e, talvez, existe uma solução para o problema." Mesmo dizendo isso, eu já me encontrava em pânico!

Partindo pra investigação

Como eu não sabia se meu computador havia sido realmente invadido, tomei algumas providências quando o religuei.

A primeira delas foi não reconectar meu notebook, de imediato, a Internet. Dessa forma, eu poderia ter a esperança de "não ter outras informações transmitidas para a web".

A segunda providência foi localizar e fazer um backup dos arquivos gerenciados pelo MultiBit. Fiz isso abrindo um prompt de linha de comando e executando:

cd; find . -iname 'multibit*'

A saída do comando acima apresentou-me a localização do diretório gerenciado pelo MultiBit. Nela, também saiu o nome do arquivo de log gerado por esse software:

./Library/Application Support/MultiBitHD
./Library/Application Support/MultiBitHD/logs/multibit-hd.log

Fiz um backup de todo o diretório MultiBitHD. Em seguida, removi essa aplicação do meu macOS. Renomeei o diretório de dados MultBitHD para outro nome. Reconectei-me a Internet.

Comecei a ler o arquivo de log (multibit-hd.log). Para o aumento do meu desespero, encontrei linhas dentro desse arquivo que pareciam informar que um dispositivo de hardware havia se conectado ao MultiBit. Achei muito estranho …​

Após algumas horas perdidas na investigação lendo links apontados pelo Google e as issues abertas no GitHub do MultiBit, descobri a thread mais relevante para o meu problema: Password does not unlock wallet although 100% sure password is correct #753. Lendo-a encontrei um comentário muito relevante, apontando para um projeto desenvolvido pela própria pessoa que o fez (@ashatch). Resolvi testá-lo na expectativa de obter a solução para o problema.

Warning

Ainda ontem, 21/Jun/2017, estive procurando informações sobre quem mais poderia ter passado pelo mesmo problema que eu. Descobri, no steemit.com, a existência dos seguintes artigos:

Recuperando-me do pânico

Como também desenvolvo aplicações em Java, da mesma forma que o autor do wallet-recover, senti-me seguro ao ler o seu código fonte. O MultiBit utiliza a especificação BIP39. A partir dessa especificação é possível saber que endereços/chaves são geradas para uma carteira em particular. Então, no processo de recuperação, o código do wallet-recover faz uso dessa especificação.

Baixei seu código e fiz sua construção (realizada pelo Maven). Logo após, executei-o (como abaixo), recebendo a seguinte saída:

$ java -jar target/recover-1.0.0-SNAPSHOT.jar words.txt --key 10 --privateKeys
FOUND,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,1616908
EMPTY,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,0
FOUND,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,97493188
EMPTY,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,0
FOUND,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,204750318
EMPTY,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,0
EMPTY,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,0
EMPTY,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,0
EMPTY,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,0
EMPTY,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,0

Você pode observar que o programa recebe como input um arquivo contendo uma lista de palavras (words.txt). Essa lista foi a que eu salvei, obviamente, ao criar a carteira no MultiBit.

Important

SEMPRE, SEEEEEMPREEE, siga os procedimentos de recuperação de uma carteira e, armazene as informações necessárias num local seguro. Dessa forma, você pode tentar, assim como eu, ter uma chance sucesso para recuperar seus bitcoins em caso de desastres.

Como saída para a execução, conforme mostrado acima, são apresentados quatro valores para cada endereço da carteira: O primeiro informa FOUND ou EMPTY dependendo do endereço ter saldo ou não. O segundo é próprio endereço (chave pública). O terceiro, apresentado apenas quando o parâmetro --privateKeys é passado, mostra a chave privada do endereço. O último campo é o saldo.

Note

Obviamente, eu substitui os valores reais dos endereços públicos e privados por XXXX e YYYY.

De posse dos endereços disponíveis (chaves públicas) com saldo na carteira e, também, de suas chaves privadas, criei uma nova carteira de custódia na Blockchain.

Importei os endereços que possuiam saldo para a carteira da Blockchain. Isso pode ser realizado acessando o menu Settings/Addresses e a operação + Import Address.

Finalmente, de posse da chave privada de cada endereço, também fiz transferência dos saldos existentes nas contas importadas para o endereço na carteira da Blockchain. Dessa forma, acumulei todos os saldos dos endereços que tinha na carteira da MultiBit, num único endereço da nova carteira da Blockchain.

Conclusão

Provavelmente, mesmo que eu dispusesse algum tempo para fazer uma análise do código fonte do MultiBit, não voltaria a utilizá-lo. Da mesma forma, eu não aconselharia ninguém a utilizar esse software! Pelo contrário, eu diria: não use essa mer%##:P! A confiança das pessoas no Bitcoin, e na Blockchain é a base para o sucesso de seu uso. Perceba que o problema que eu tive me impediu de acessar minha carteira. Sem acessá-la, no melhor dos casos, esses bitcoins ficariam parados ali na blockchain perdidos e sem uso, para sempre. Pior que isso seria se eu realmente tivesse sido hackeado tendo bitcoins furtados.

Eu me considero um "usuário avançado" de bitcoins pois tenho uma boa capacidade para, além de entender a tecnologia, compreender códigos fontes de seus projetos. Em função disso, e pelos conhecimentos que detenho na área de segurança da informação, "eu me arrisco" com o Bitcoin. Mas, fico imaginando como um "usuário comum", sem esses conhecimentos, resolveria os problemas que enfrentei.

Aprendi que:

  1. Você não deve partir para o uso de uma carteira desktop simplesmente pele fato de ter visto alguns vídeos divulgados no YouTub, falando bem dessa carteira.

  2. Para confiar numa carteira desktop é muito importante que você também faça sua própria pesquisa, APROFUNDADA, sobre ela.

  3. Se o software de carteira não for um software livre, de código aberto, você já deveria ter um pé atrás na sua utilização. Pois, nesse caso, você teria necessariamente que confiar num código que não vê e que não teria como analisar, para saber o que ele realmente faz. Dessa forma, em termos de confiança, utilizar uma carteira que você não tem o código fonte é como confiar no banco que você atualmente utiliza mas, com a desvantagem de que, se você perder seus bitcoins, não terá para quem reclamar?

  4. Mesmo tendo grande precaução com segurança ao utilizar meu notebook, eu ainda fiquei, nesse episódio, com a preocupação de que ele poderia ter sido invadido. Isso me fez voltar a racionar que, talvez, as carteiras de custódia possam ser bem mais seguras do que as carteiras desktop. Mas, pensando assim, caio novamente na questão, tradicional, de ter que confiar num terceiro para "guardar meu dinheiro".

As melhores soluções para guardar bitcoins talvez sejam armazená-los em carteiras de papel ou de hardware. Mas isso é assunto para próximos posts. Sendo assim, voltarei para falar sobre isso, em breve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment