Blaze Blog /

Histórias de dois problemas de segurança em carteiras de criptomoedas

Crypto
Jul 20, 2023
7min read
Ilustração estilizada de uma carteira de criptomoedas

Introdução

Uma carteira de criptomoedas é um programa de software usado para armazenar, enviar e receber moedas digitais como Bitcoin, Ethereum e outras. Essas carteiras geralmente utilizam uma combinação de chaves públicas e privadas para proteger transações e salvaguardar os ativos do usuário. As chaves públicas são usadas para receber fundos, enquanto as chaves privadas são usadas para autorizar transações. As carteiras de criptomoedas mais populares são as de software e as de hardware.

Um dos aspectos fundamentais das carteiras de software é que elas podem ser hot wallets ou cold wallets. As hot wallets estão conectadas à internet, permitindo transações rápidas e fáceis, mas podem ser mais suscetíveis a hackers ou ataques cibernéticos. As cold wallets, por outro lado, são mantidas offline, oferecendo maior segurança, porém exigindo etapas adicionais para iniciar transações.

As carteiras de hardware são dispositivos físicos usados para armazenar chaves privadas offline. A principal vantagem é a camada extra de segurança ao manter as chaves privadas isoladas da internet, reduzindo o risco de acesso não autorizado.

As carteiras de software são populares entre os usuários de criptomoedas devido à sua facilidade de uso, acessibilidade e flexibilidade, já que geralmente são gratuitas e podem ser baixadas de várias fontes. Basicamente, existem três tipos: carteiras para desktop, dispositivos móveis e web.

Uma das carteiras de software mais populares é a MetaMask, disponível como extensão nos principais navegadores como Chrome, Firefox e Edge, além de aplicativos para Android e iOS. Ela atua como uma ponte entre navegadores comuns e a blockchain, permitindo que os usuários acessem e interajam facilmente com dApps (aplicativos descentralizados).

Carteira Hierárquica Determinística (HD)

As carteiras de criptomoedas geram uma única chave privada para cada endereço de carteira individual (embora você possa ter vários endereços por chave). Isso implica certas limitações e riscos de segurança devido à dificuldade de gerenciar múltiplos endereços, acompanhar saldos e criar backups seguros.

No universo das criptomoedas, uma carteira HD oferece maior segurança e facilidade de uso para gerenciar múltiplos ativos digitais. Ela é baseada em uma especificação chamada BIP32 (Bitcoin Improvement Proposal 32) e é amplamente utilizada na indústria de criptoativos.

As carteiras HD resolvem esses problemas implementando uma estrutura hierárquica de chaves derivadas de uma chave mestra. A chave mestra é gerada de forma aleatória e segura durante o processo de inicialização da carteira. A partir dessa chave mestra, cria-se uma estrutura em árvore de chaves secundárias, daí o termo "hierárquica".

A principal vantagem de uma carteira HD é que ela permite aos usuários gerar um número ilimitado de endereços exclusivos para receber fundos, todos derivados de uma única chave mestra. Isso elimina a necessidade de gerenciar manualmente várias chaves privadas, simplificando o processo de gestão da carteira.

Hierarchical Deterministic (HD) Wallet

Frase de Recuperação (Seed Phrase) e Chaves Privadas

Uma frase de recuperação ou frase mnemônica é um conjunto de palavras usado para gerar as chaves privadas de uma carteira de criptomoedas. Geralmente, consiste em 12, 18 ou 24 palavras, escolhidas aleatoriamente de uma lista de milhares para garantir que sejam únicas e difíceis de adivinhar.

A frase de recuperação deve ser mantida de forma segura e confidencial, pois é um elemento crucial para proteger e gerenciar uma carteira de criptomoedas, servindo como backup e permitindo que os usuários recuperem sua carteira em caso de perda de seus dispositivos.

Abaixo está um exemplo de uma frase de recuperação na MetaMask

MetaMask secret recovery phrase

A partir da frase de recuperação, é possível gerar várias contas dentro da carteira. Cada conta terá uma chave privada associada que, assim como a frase de recuperação, deve ser mantida em segurança e sob sigilo.

MetaMask accts

MetaMask pvt key

Uma chave privada é usada para assinar uma transação quando um usuário a inicia a partir de sua carteira, o que serve como prova matemática de que a transação é legítima e autorizada pelo proprietário da carteira.

Perder ou expor uma chave privada pode resultar na perda permanente de fundos e é irreversível, já que qualquer pessoa com acesso a ela pode controlar a carteira associada e seus ativos.

Enquanto a frase de recuperação consiste em um conjunto de palavras, a chave privada é representada por números e letras aleatórios, como as sequências em vermelho abaixo:

Accounts private keys

Portanto, se a chave privada for exposta, apenas a conta relacionada será afetada, enquanto o comprometimento da frase de recuperação afetará todas as contas existentes dentro da carteira.

Ataques comuns

A frase de recuperação e as chaves privadas são muito atraentes para cibercriminosos por um motivo simples: é relativamente fácil roubar fundos se qualquer uma dessas informações for comprometida e, claro, se os usuários tiverem ativos valiosos em carteiras como Bitcoin, Ethereum ou qualquer ativo que possa ser convertido em moeda fiduciária. Assim, as carteiras de criptomoedas podem estar vulneráveis a vários ataques, e é importante que os usuários estejam cientes desses riscos para proteger seus ativos digitais. Os principais vetores de ataque envolvem a combinação de engenharia social, golpes de phishing e aplicativos de carteira falsos.

Em golpes de phishing, os atacantes criam sites falsos ou enviam e-mails enganosos que imitam serviços legítimos de carteiras de criptomoedas. Essas tentativas de phishing visam enganar os usuários para que insiram suas chaves privadas, senhas ou frases de recuperação, que os atacantes podem então usar para acessar e roubar fundos das carteiras das vítimas. Alguns golpes são sofisticados, mas muitos não são.

A engenharia social envolve manipular indivíduos para que revelem informações confidenciais ou realizem ações que comprometam sua segurança. Os atacantes podem se passar por representantes de suporte ao cliente ou figuras influentes na comunidade de criptomoedas para enganar os usuários e fazê-los divulgar a frase de recuperação ou a chave privada de suas carteiras. Às vezes, podem pedir que você escreva no chat, mas, em alguns casos, os atacantes podem criar aplicativos de carteira falsificados que imitam carteiras de criptomoedas populares. Esses aplicativos falsos geralmente são oferecidos em lojas de aplicativos de terceiros ou sites e podem conter código malicioso projetado para roubar as chaves privadas e os fundos dos usuários.

Exemplo real de um atacante tentando capturar a chave privada

Telegram crypto scam

Portanto, é importante verificar a legitimidade das solicitações por meio de canais oficiais e nunca compartilhar informações confidenciais com ninguém. Como regra, os administradores nunca enviam mensagens diretas aos usuários primeiro.

Os usuários devem sempre verificar duas vezes a URL do site, usar favoritos e evitar clicar em links suspeitos ou fornecer informações confidenciais. Além disso, é crucial baixar aplicativos de carteira apenas de fontes oficiais e verificar as informações do desenvolvedor antes de instalar qualquer aplicativo.

Os usuários devem continuar protegendo a frase de recuperação e a chave privada; escrever em texto simples na área de trabalho ou em um rascunho de e-mail não é uma opção segura.

Camada extra de segurança em carteiras de software

Alguns recursos comuns das carteiras de criptomoedas incluem a capacidade de visualizar seu histórico de transações, verificar seu saldo e enviar e receber moedas digitais.

A segurança de uma carteira de software geralmente depende das práticas do usuário, como usar senhas fortes e exclusivas, ativar a autenticação de dois fatores e atualizar o software regularmente. Por outro lado, para usar essas camadas adicionais de segurança, é importante que os aplicativos as forneçam e que o usuário possa, no mínimo, confiar nesses recursos.

Detalhes sobre as duas vulnerabilidades de segurança

Esta seção explica duas vulnerabilidades (já corrigidas) na carteira de criptomoedas Harmony. Esses problemas foram descobertos em 2022 e relatados ao fornecedor antes do encerramento do projeto como um todo.

Problema nº 1: Desvio da autenticação por PIN através da manipulação do armazenamento local

A primeira análise foi na Harmony Wallet extensão (Chrome). O fabricante oferecia um recurso de segurança adicional por meio de um PIN de quatro dígitos.

Quatro dígitos numéricos podem ser muito atraentes para realizar um ataque de força bruta, mas durante a análise, foi possível contornar a tela de bloqueio da carteira devido à falta de verificação do PIN armazenado no Local Storage, sem a necessidade de qualquer ataque automatizado.

Após instalar a extensão no navegador, uma tela para configurar um novo PIN é exibida:

Harmony set up PIN code

Em seguida, através da inspeção de elementos do Local Storage no Chrome, observou-se que o código PIN estava nulo, já que ainda não havia sido definido:

Harmony PIN setting

DevTools null PIN

Após definir o PIN, é possível verificar que o Local Storage atualizou o pincode:

PIN code set

No entanto, a vulnerabilidade ocorre na chave “LockState” apenas modificando o parâmetro “payload”. A imagem a seguir mostra a carteira bloqueada e o payload de “LockState”

Wallet in LockState

No exemplo acima, o “payload” de “LockState” foi modificado de d5764fb5 para d5764fb4, apenas alterando o último caractere para qualquer outro valor.

Então, ao clicar duas vezes no ícone da carteira, podemos comprovar o bypass:

Harmony after bypass 1

Harmony after bypass 2

Problema nº 2: Chave Privada e Palavras-semente são armazenadas em texto simples

Durante a avaliação da carteira oByte, foi encontrada uma vulnerabilidade que permite a um atacante capturar a Chave Privada e as Palavras-semente da carteira da vítima.

A vulnerabilidade ocorre devido ao armazenamento incorreto de informações confidenciais no arquivo de log em ~/.config/byteball/Default/Local Storage/leveldb durante a configuração de uma nova instalação da oByte Wallet.

A imagem a seguir ilustra o caminho do armazenamento local (Local Storage Path) antes de iniciar a nova instalação:

Path

Durante a configuração, observou-se que os novos arquivos foram criados em ~/.config/byteball/Default/Local Storage/leveldb. Até o momento, nenhuma informação sensível no 000003.log arquivo:

Local storage leveldb

Logo após concluir a configuração, é possível identificar a vulnerabilidade, que consiste na Chave Privada (xPrivKey) e nas Palavras-Semente (mnemonic) armazenadas no 000003.log arquivo:

Local Storage after

Para confirmar essas informações em texto simples logo após abrir a carteira e inspecionar o Armazenamento Local com as Ferramentas de Desenvolvedor (DevTools), é possível recuperar a frase-semente e a chave privada:

Seed words exposure

Conclusão

O valor financeiro potencial das criptomoedas torna a segurança uma preocupação primordial para usuários, desenvolvedores e todo o ecossistema de criptomoedas.  

Mesmo com todos os recursos de segurança empregados pelos desenvolvedores, o elo mais fraco geralmente sempre serão os usuários. Portanto, os usuários devem tratar informações confidenciais, como frases-semente e chaves privadas, com cuidado, além de estarem atentos para evitar ataques como golpes de phishing.

Por outro lado, os desenvolvedores devem sempre implementar recursos de segurança para prevenir ataques e fraudes em carteiras de criptomoedas. Também é importante que esses recursos de segurança utilizados sejam confiáveis, uma vez que os usuários confiarão a eles seus ativos.

É importante ressaltar que, embora essas aplicações funcionem naturalmente no lado do cliente, o mínimo de informações confidenciais deve ser armazenado e, claro, elas não podem ser simplesmente esquecidas lá, como uma chave privada em um arquivo de texto simples.

Do you have questions? Let's talk.

Get in touch with our cybersecurity experts

Read More