Sobre o modelo de segurança das carteiras de software | Razão

Sobre o modelo de segurança das carteiras de software | Razão

Nó Fonte: 2671485

Podemos distinguir dois tipos predominantes de carteiras: carteiras de software e hardware. Eles cumprem a mesma função, mas de maneira diferente. As carteiras de software são consideradas mais simples de usar: um único programa é suficiente para criar, validar e assinar transações. Com uma carteira de software, não é necessário criar a transação no software e confirmá-la em um dispositivo de hardware.

Duas semanas atrás, Histórias proibidas revelou um ataque direcionado contra milhares de pessoas em todo o mundo. Este ataque explorou vulnerabilidades no Android e iOS, para instalar spyware desenvolvido pelo NSO Group: Pegasus. Este malware é capaz de monitorar toda a atividade do dispositivo e exfiltrar informações pessoais: conversas por SMS, WhatsApp e Signal, chamadas telefônicas etc. Este artigo explica como, nessas condições, esse malware seria capaz de extrair todos os segredos de carteiras de software e as diferenças do ponto de vista da segurança entre carteiras de software em telefones celulares e computadores de mesa.

Este artigo pretende ser não muito técnico. Para mantê-lo relativamente simples, apenas os recursos básicos serão discutidos.

Protegendo segredos

O que é armazenado em uma carteira criptográfica?

Na verdade, as carteiras não armazenam as criptomoedas dos usuários: elas apenas armazenam os segredos, principalmente as chaves privadas, que permitem acessar as criptomoedas e a capacidade de gastá-las. Essas chaves privadas são principalmente chaves privadas ECC (criptografia de curva elíptica) em curvas diferentes, dependendo do blockchain. As curvas mais comuns são secp256k1 (Bitcoin, Ethereum…), Ed25519 (Monero) ou BLS12-381 (Ethereum 2).

Essas chaves são usadas para assinar transações e, de maneira mais geral, para interagir com ativos de blockchain.

O armazenamento dessas chaves depende do tipo de carteira: determinística ou não. Uma carteira hierárquica determinística (HD) permite a criação de uma árvore de chaves a partir de um único segredo mestre chamado semente (cf. BIP44). Esta semente é muitas vezes derivada de uma sequência mnemônica de 12, 18 ou 24 palavras geradas aleatoriamente ou escolhidas pelo usuário (cf.BIP39). Esses mnemônicos permitem limitar o número de chaves a serem armazenadas: elas podem ser recalculadas a qualquer momento a partir da semente. As carteiras HD armazenam apenas este mnemônico ou a semente.

Carteiras não determinísticas geram uma nova chave para cada uso e devem armazenar todas elas. As carteiras não determinísticas não podem ser facilmente migradas para outra carteira, pois os backups não são compatíveis.

Os principais recursos de segurança de uma carteira consistem em gerar, armazenar e usar esses segredos adequadamente. Existem diferentes níveis de segurança contra diferentes tipos de ameaças:

  • Proteção contra ataques de “empregada malvada”: Um invasor com acesso temporário à carteira não deve ser capaz de adicionar um backdoor dentro da carteira que permita roubar o PIN ou os segredos de proteção da senha.
  • Material criptográfico seguro: Chaves e nonce gerados pela carteira nunca devem ser previsíveis. Além disso, o conhecimento dos segredos (exceto a semente) gerados em algum momento não permitirá prever o segredo a ser gerado no futuro.
  • Proteção em repouso: Se um invasor obtiver dados persistentes de uma carteira de software, ele não poderá extrair as chaves.
  • Proteção durante o uso secreto: Quando a carteira é desbloqueada, as chaves não podem ser acessadas por um invasor ou malware.
Hardware wallets

O modelo de segurança de uma carteira de hardware visa evitar essas ameaças de segurança. As carteiras de hardware protegem contra malware por design. Eles são dispositivos independentes que assinam transações por conta própria. Os materiais criptográficos sempre ficam dentro do dispositivo e nunca são enviados para o aplicativo de software com o qual se comunicam. A interface de comunicação é sempre simples, o que reduz drasticamente a superfície de ataque. Pode ser USB, Micro SD ou câmera + tela (através do código QR), ou Bluetooth Low Energy.

Além disso, as carteiras de hardware incorporam uma tela diretamente no dispositivo, permitindo que o usuário verifique as ações que está prestes a realizar ao interagir com suas chaves secretas. Essas verificações manuais em dispositivos são uma contramedida muito eficiente contra malware no computador/celular. Onde o malware em um computador/dispositivo móvel pode acessar os segredos (seed ou chaves privadas) ou até mesmo trocar/modificar endereços ou valores quando o usuário está realizando uma transação, isso não é possível com uma carteira de hardware.

As carteiras de hardware também são projetadas para proteger contra ataques de “empregada malvada” e contra um invasor com acesso físico. Dependendo da carteira de hardware, eles têm diferentes níveis de segurança, mas em todos os casos são projetados para proteger contra essas ameaças. Uma descrição detalhada dos modelos de ameaças Ledger Nano pode ser encontrada SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

Carteiras de Software

As carteiras de software regulares protegem os segredos com meios regulares: mecanismos de segurança do sistema operacional em que são executados e, às vezes, um controle de acesso baseado em um PIN ou senha.

A seguir, carteiras de desktop (Windows, macOS, Linux) e carteiras móveis são consideradas. As principais diferenças entre eles dependem principalmente dos mecanismos de segurança oferecidos pelo sistema operacional.

Carteiras de software em um computador

Várias carteiras populares, como Electrum, Exodus, Atomic ou Bitcoin core, rodam em computadores.

Em um computador, os mecanismos de segurança oferecidos pelo sistema operacional para isolar um processo de carteira de outros processos são limitados. A maioria dos aplicativos é executada pelo mesmo usuário e os aplicativos podem ler os dados de outros aplicativos.

A segurança dessas carteiras de software depende principalmente da segurança da senha que as protege e também do fato de que nenhum malware é executado no sistema operacional (o que é bastante difícil de garantir, veja as notícias recentes sobre o Pegasus).

Na maioria das vezes, a semente é armazenada em um contêiner criptografado protegido por uma senha. Um ataque direto consiste, para um malware ou uma ferramenta de administração remota, em recuperar esse contêiner criptografado e enviá-lo ao invasor. Em seguida, a senha pode ser forçada ou obtida usando um keylogger.

Em um cenário em que um invasor consegue acessar apenas o contêiner criptografado (o invasor encontra uma chave USB contendo uma carteira ou instala malware em um computador, mas a vítima nunca abre seu aplicativo de carteira), o invasor precisa forçar a senha.

A maioria das senhas são ruim. Existem bilhões de senhas que vazaram na web, e muitas pessoas tendem a reutilizar suas senhas para diversos serviços. Ferramentas prontas permitem que você recupere senhas para carteiras de criptomoedas, como btcrecover or hashcat. As senhas podem ser complexas, mas por trás de cada carteira há dinheiro real, portanto, os invasores não hesitarão em investir recursos para quebrar essas senhas.

Dois princípios básicos de segurança para manter suas senhas seguras são usar um gerenciador de senhas e nunca reutilizar sua senha para fins diferentes.

A ameaça mais preocupante para carteiras de software são malwares e ladrões dedicados, desenvolvidos especificamente para drenar seus fundos. Esses malwares, como KPOT ou EletroRAT, não precisam nem forçar sua senha: eles podem capturá-la diretamente quando você a digita, descriptografar os dados de configuração da carteira e exfiltrar a semente.

Aqui está um aplicativo de brinquedo, desenvolvido para este artigo, que tem como alvo a carteira Electrum (embora possa ter sido outra carteira de software). Ele simula um malware que rouba a senha do usuário quando ela é digitada pela vítima. A senha é então usada para descriptografar os dados da carteira e exibir a semente:

Como você pode ver, mesmo que a senha seja complexa, o aplicativo é capaz de recuperá-la, pois a detecta diretamente na memória.

Este exemplo é muito semelhante ao recente malware .SCR campanhas usadas para roubar criptomoedas. Os criminosos usaram técnicas de engenharia social para induzir os usuários a baixar um protetor de tela malicioso. Este protetor de tela estava, na verdade, roubando informações da vítima do computador, incluindo informações de carteira e câmbio de criptomoedas.

Para concluir sobre carteiras de software em execução em computadores:

  • Na maioria dos casos, as carteiras de software executadas em computadores protegem a semente do usuário usando uma senha.
  • O controle de acesso para esses arquivos de carteira depende principalmente da segurança do computador. Na prática, é difícil proteger os computadores contra malware e, à medida que as criptomoedas se tornam comuns, os ataques contra carteiras se tornam cada vez mais sofisticados.
  • Usar essas carteiras de software para proteger ativos digitais não é uma boa ideia. Qualquer malware especializado poderá obter os arquivos da carteira e encontrar as senhas offline ou obter a senha por meio de um keylogger.
Carteiras de software em um smartphone

Os smartphones Android e iOS oferecem, por padrão, recursos de segurança que não são amplamente usados ​​em sistemas operacionais de desktop.

Os sistemas operacionais móveis oferecem proteção de aplicativos e dados do usuário. Em particular, os sandboxes de aplicativos são obrigatórios para todos os aplicativos. Este não é o caso, por exemplo, do Windows: por padrão, qualquer aplicativo pode acessar os dados do usuário.

Portanto, um aplicativo malicioso não pode ler dados de outro aplicativo, exceto se:

  • Ele encontra uma vulnerabilidade nesse aplicativo.
  • Ou ele consegue escalar privilégios, por exemplo, explorando uma vulnerabilidade do kernel que permite obter acesso root ao sistema.

Infelizmente, tais ataques existem. Eles são muito mais fáceis em versões desatualizadas do Android e iOS e em dispositivos mais antigos ou baratos, onde o código de terceiros costuma ser menos seguro.

Em um sistema operacional atualizado, esses ataques são mais difíceis, mas não remotamente inviáveis. Por exemplo, Ian Beer mostrou um ataque de clique zero extremamente impressionante no iOS 13.5 em dezembro de 2020. Guang Gong apresentou um cadeia de exploração para fazer root remotamente em uma ampla gama de dispositivos Android baseados em Qualcomm em junho de 2020. E, duas semanas atrás, Histórias proibidas revelou que o NSO Group usou uma cadeia de exploração para atingir dispositivos iOS e Android recentes usando vulnerabilidades de dia 0.

Os invasores menos sofisticados podem usar vulnerabilidades locais, permitindo-lhes extrair dados da carteira de um aplicativo malicioso. Corretores de vulnerabilidade, como pagamento Zerodium até US $ 200,000 para uma escalação de privilégio para root no Android e iOS, mas até $ 1,500,000 para ataques remotos.

Estudamos algumas carteiras Android/iOS. Sua segurança depende do próprio aplicativo, mas também dos recursos de segurança do sistema operacional subjacente. Obviamente, quando a segurança do sistema operacional é derrotada, o aplicativo não é mais seguro

Dois métodos para proteger a semente são comumente usados:

  • A proteção por senha – os dados da carteira são protegidos por uma senha digitada pelo usuário. O design é o mesmo das carteiras de mesa. Na prática, os dados são mais difíceis de extrair do que de um computador, pois a recuperação de dados de um aplicativo malicioso é tecnicamente mais difícil, pelos motivos explicados acima. No entanto, recuperar a senha depois que os dados foram roubados é, na prática, mais fácil: inserir senhas complexas em telefones celulares é tedioso, portanto, os usuários tendem a escolher senhas mais simples. Além disso, os mecanismos de derivação de chave (usados ​​para criar uma chave a partir de uma senha) em dispositivos móveis geralmente são mais simples de quebrar, pois costumam ser mais leves por motivos de desempenho.
  • Coinomi e Metamask são exemplos de tais carteiras.

No vídeo a seguir, mostramos outro aplicativo de brinquedo desenvolvido para este artigo. É um malware disfarçado como um widget de ticker Bitcoin falso. O malware explora uma vulnerabilidade conhecida em um dispositivo não corrigido para obter acesso root no dispositivo e exfiltrar a semente criptografada para um servidor remoto. O servidor então força bruta a senha para descriptografar a semente.

Este método não é específico para uma carteira. Pode ser (mais ou menos) facilmente adaptado a qualquer carteira protegida por senha. Aqui está o mesmo exemplo com a Carteira Coinbase:

[Conteúdo incorporado]

  • Segurança baseada no Android Keystore (ou iOS Keychain) – Nesse caso, os dados da carteira são criptografados com uma chave de criptografia armazenada no Android Keystore (iOS Keychain). Esses serviços foram inicialmente projetados para armazenar chaves de criptografia com segurança, e muitos aplicativos os usam para gerar uma chave que criptografará todos os dados confidenciais do usuário. Os aplicativos que usam o Keystore implementam o seguinte mecanismo:
    • O aplicativo solicita que o Keystore gere uma chave de criptografia para um determinado identificador. Keystore gera a chave e a armazena com segurança.
    • Quando o aplicativo deseja criptografar ou descriptografar um blob, ele envia o blob junto com o identificador de chave para o Keystore.
    • Por fim, o keystore verifica se o aplicativo tem realmente os direitos para usar essa chave e envia de volta os dados de saída para o aplicativo.

Com esse modelo, o aplicativo não pode saber o valor da chave, mas pode usá-la. É ainda possível associar à chave controlos de acesso adicionais: por exemplo, o acesso à chave pode ser condicionado a uma autenticação do utilizador (solicitação de um PIN ou padrão de desbloqueio).

Esse mecanismo pode fornecer segurança adicional, em comparação com a proteção baseada em senha. De fato, em telefones recentes, o Keystore é apoiado por um Trusted Execution Environment (TEE) ou, às vezes, por um Secure Element.

Isso significa que um invasor com privilégios de root não poderá extrair chaves de criptografia do armazenamento de chaves. No entanto, eles poderão usar o Keystore como um oráculo de descriptografia e criptografar ou descriptografar quaisquer dados que desejarem.

Keystore oferece criptografia, mas também serviços de assinatura. Então, uma carteira poderia proteger suas chaves de criptografia, tornando-as difíceis de extrair? Infelizmente a resposta é não: carteiras de software não usam Keystore para assinar transaçõesas chaves privadas são sempre manipuladas em texto simples pelo aplicativo.

Isso ocorre por um motivo simples: KeyStore e KeyChain oferecem serviços genéricos de assinatura e criptografia, mas não suportam a criptografia usada em criptomoedas. Por exemplo, o KeyStore implementa a Assinatura ECDSA, mas apenas nas curvas NIST definidas no FIPS 186-4 (P-224, P-256, P-384 e P-521). Bitcoin usa outra curva, secp256k1, que ainda não é suportado.

Para resumir, Keystore e Keychain são bons serviços para proteger chaves secretas e privadas. Eles podem oferecer alguma segurança criptografando dados confidenciais: algumas classes de vulnerabilidades (leitura de arquivo arbitrário, por exemplo) serão abordadas pela criptografia Keystore. No entanto, se uma escalação de privilégio root não for suficiente para extrair os valores de chave de um armazenamento de chaves baseado em hardware, será suficiente descriptografar dados confidenciais. Um invasor capaz de instrumentar o aplicativo é capaz de recuperar seus segredos.

Para concluir sobre carteiras móveis:

  • O mecanismo de isolamento entre aplicativos fornecidos pelo iOS/Android eleva o nível de segurança em comparação com uma carteira de software executada em um computador. O invasor precisa primeiro de uma escalação de privilégio para acessar os dados do aplicativo. Isso é viável em dispositivos desatualizados. Atacantes habilidosos (Ian Beer fez isso sozinho em 6 meses, mas… É Ian Beer) também podem fazer isso em dispositivos atualizados e recentes.
  • Os serviços de proteção de chave (KeyStore, KeyChain) podem adicionar uma camada adicional de segurança para proteger os segredos em repouso. No entanto, como eles não suportam algoritmos criptográficos para aplicativos de criptomoeda, a chave ainda pode ser extraída.
  • Em todos os casos, um invasor com acesso root pode recuperar a semente em repouso, quando usada, ou aproveitar os direitos do usuário para esvaziar a carteira usando a carteira de software como um oráculo.

Aqui está um último exemplo de um spyware de brinquedo visando a carteira Blockchain.com (embora isso possa ser executado em muitas outras carteiras com a mesma facilidade). Ele é instalado remotamente e monitora a carteira. Depois que o usuário é autenticado usando sua impressão digital, a chave de criptografia é desbloqueada e os dados da carteira são descriptografados. O spyware instrumentaliza o aplicativo para recuperar essa chave de criptografia. Em seguida, exfiltra a chave e os dados da carteira para um servidor remoto:

[Conteúdo incorporado]

Conclusão

Como conclusão, as carteiras de software têm diferentes níveis de segurança. No entanto, seu modelo de ameaça não cobre o caso de um malware em execução no sistema operacional com escalonamento de privilégios. Isso ocorre por design: o aplicativo de carteira não pode ser mais seguro do que o sistema operacional em que é executado.

  • O mecanismo de isolamento entre aplicativos fornecidos pelo iOS/Android eleva o nível de segurança em comparação com uma carteira de software executada em um computador. O invasor precisa primeiro de uma escalação de privilégio para acessar os dados do aplicativo.
  • Os serviços de proteção de chave (KeyStore, KeyChain) podem adicionar uma camada adicional de segurança para proteger os segredos em repouso. No entanto, como eles não suportam algoritmos criptográficos para aplicativos de criptomoeda, as chaves devem ser manipuladas diretamente do aplicativo, portanto, oferecem uma proteção limitada.
  • Em todos os casos, um invasor com acesso root pode recuperar a semente em repouso, quando usada, ou aproveitar os direitos do usuário para esvaziar a carteira usando a carteira de software como um oráculo.

Carimbo de hora:

Mais de Ledger