• PT/BR
  • ENG/US

Clipboard: A terra de ninguém da tecnologia moderna

  • 18/05/2021
  • Fábio Sartorato
  • Blog
  • Alto Contraste
  • +Aumentar fonte
  • -Diminuir fonte
Clipboard: A terra de ninguém da tecnologia moderna

O clipboard, ou área de transferência, é um pequeno buffer temporário para o transporte de informações e está presente nos nossos sistemas operacionais há muito tempo, inclusive nos nossos dispositivos móveis. De ponto de vista de um usuário final, essa funcionalidade é extremamente útil nas atividades diárias realizadas em celulares e PCs; não é rara a ocasião em que o usuário copia um pedaço de texto de uma aplicação para outra, tais como mensagens, códigos de verificação, partes de códigos fonte, endereços web, entre outros.

Porém essa fantástica funcionalidade esconde um lado sombrio. É uma terra de ninguém.

Falando especificamente da plataforma Android, todo processo é capaz de acessá-lo, desde que esteja em primeiro plano (a partir do Android 10) ou a qualquer momento (nos Android anteriores). Esse acesso é de escrita e leitura, não sendo empregado nenhum tipo de permissão, que é um dos métodos de controle de acesso aos recursos do Android, ou aviso ao usuário.

Nós, aqui do time de segurança do SiDi, fizemos um estudo profundo do funcionamento do clipboard no Android para entender seu processo interno e como uma aplicação maliciosa seria capaz de abusar desse design para seu próprio ganho.

 

O Clipboard no Android

A o sistema operacional Android oferece um objeto “clip” que pode ser de 3 tipos:

  • Texto – Dado contendo caracteres ASCII simples. Ao copiar esse tipo de dado, o framework insere o conteúdo no objeto “clip” e adiciona ao clipboard. Ao colar, o dado original é inserido num buffer de destino;
  • URI – Quando copiando dados mais complexos, tais como imagens de um content provider, a URI que referencia esse dado é adicionada ao clipboard. Ao colar, a URI é resolvida pelo framework e o conteúdo ao qual ela aponta, é inserido no destino.
  • Intent – Especificamente usado para atalhos de aplicações. Esse intent é copiado e colado diretamente.

Para implementar uma aplicação com suporte à funcionalidade do clipboard, os desenvolvedores devem instanciar uma referência à classe ClipboardManager através do serviço de sistema clipboard. Esse objeto é o responsável por fazer todo o tratamento de copiar e colar entre o destino e o buffer do clipboard.

 

O lado sombrio do Clipboard

Essa é uma das funcionalidades mais úteis do ecossistema Android, porém, como dito anteriormente, ela esconde um lado sombrio da qual, muitas vezes, o usuário não tem ciência.

Como um exercício, imagine um simples aplicativo de lanterna. Ele ajuda o usuário a encontrar suas chaves do carro que caíram no banco de trás, salva a pele num momento em que a energia acaba e dá um clima muito místico na hora de contar histórias de terror na festa de aniversário da criançada.
Agora imagine que o usuário acabou de baixar esse aplicativo da Google Play Store. É um app com 5 estrelas e com comentários muitos bons, tais como: “Esse app é perfeito! Ele ilumina meus dias mais escuros!”

Porém, vamos lembrar como funciona o framework de clipboard no Android de uma perspectiva de um desenvolvedor:

  1. Copiando
    1. Pega uma referência para o serviço de sistema do clipboard
    2. Cria um novo objeto do tipo clip e copia o dado para ele
    3. Usa o método setPrimaryClip(clip) para adicionar o dado ao clipboard
  2. Colando
    1. Pega uma referência ao serviço de sistema do clipboard
    2. Checa se existe algum dado no clipboard usando o método hasPrimaryClip()
    3. Usa o método getPrimaryClip().getItemAt(0) para acessar o dado dentro do clipboard e tratá-lo

Parece super simples. Qualquer aplicação consegue pegar uma referência para esse serviço sem precisar pedir nenhum tipo de permissão.
Para aqueles que não estão familiarizados com programação Android, na implementação de uma aplicação um desenvolvedor necessita usar o ferramental disponibilizado pelo framework para suportar a funcionalidade do clipboard através dos métodos das classes do serviço do Clipboard.

Vale lembrar que, a partir do Android 10, apenas a aplicação que está em primeiro plano pode acessar o clipboard e ler/editar seu conteúdo.

Agora, repare bem no item 2.b:

Checa se existem algum dado no clipboard usando o método hasPrimaryClip()

Uma aplicação (em primeiro plano para Android 10+) não precisa, necessariamente, utilizar a funcionalidade de clipboard, mas ainda assim consegue, continuamente, consultar o conteúdo do clipboard. Não só isso; também é possível modificar qualquer dado que esteja presente.

Agora, voltemos para nosso inofensivo app de lanterna e imagine que ele está sendo executado num dispositivo com Android 9 ou menos (que de acordo com StatCount, em abril de 2021, contemplava quase 50% dos usuários).

Nesse cenário, o aplicativo de lanterna pode instanciar um método que checa a todo momento as alterações no clipboard.

Quando notificado, esse mesmo aplicativo pode invocar o método ClipboardManager.getPrimaryClip().getItemAt(0), processar o dado que estava presente no clipboard e usá-lo/alterá-lo como quiser, inclusive alterando-o para algo malicioso.

Mas, que tipo de dado estamos falando?

  • Contas de banco que serão inseridas num app bancário para transferências;
  • Conversas privadas de WhatsApp, Telegram etc;
  • Links – Pode ser usado para ataques de phishing ou propaganda direcionada;
  • Senhas, sejam estas criadas pelo usuário ou de gerenciadores de senha;
  • Código de barras de boletos

Uma aplicação maliciosa que consiga acessar e alterar esses dados tem um grande impacto na privacidade e segurança do usuário. Lembrando, novamente, que se a plataforma estiver com uma versão igual ou superior à versão 10, então a janela de ataque muda. Seria possível apenas recuperar essas informações enquanto o aplicativo malicioso estiver em foco.

 

Então… o que se pode fazer sobre isso?

Primeiramente, sempre manter o dispositivo o mais atualizado possível. Conforme mudanças são incorporadas na plataforma, maiores proteções à privacidade e segurança vem sendo adicionadas. A partir do Android 10 o risco de um ataque como descrito neste post é muito menor, uma vez que apenas aplicações em foco podem acessar o clipboard.

Existe, também, um ticket na AOSP (o projeto do código do Android) levantando exatamente esse questionamento. Contudo esse ticket foi aberto em 2015, fechado em 2020 como “won’t do” e considerado obsoleto, ou seja, desconsideram esse ticket como um potencial problema de segurança/privacidade e optaram por não alterar a funcionalidade.

Uma solução plausível seria a inclusão de uma permissão do nível “dangerous” que forçaria os aplicativos a comunicarem e solicitarem ao usuário o OK para acessar o clipboard, porém isso depende de as empresas incluírem essa permissão e lógica nas próximas versões do Android.

Por enquanto, a melhor maneira de se precaver contra possíveis aplicações maliciosas que abusam da funcionalidade do clipboard é sempre manter em mente que essa funcionalidade pode ser abusada, sendo mais seletivo com aquilo que é colado/copiado do clipboard, além de estar ciente dos riscos de sua utilização.

#SejaSiDier

Faça parte do nosso universo tecnológico

Trabalhe no sidi