Todos os instantâneos vão para o céu

imagem alt Agora todos nós usamos aplicativos bancários. É conveniente, rápido e, em nossa opinião, seguro. Os bancos até inseriram códigos PIN adicionais para que, mesmo que você perca seu telefone ou caia nas mãos de pessoas de fora, seus fundos e dados confidenciais estejam protegidos. E é tão legal! Os bancos se preocupam com a nossa segurança!

Infelizmente, se você abrir o mesmo aplicativo bancário no gerenciador de tarefas, verá todo o conteúdo da tela (por exemplo, informações sobre a conta, cartão bancário, bate-papo em que discutiu algo com um funcionário do banco). Você pode verificar isso em seus aplicativos bancários. Estudei todos os mais famosos - e todos eles não escondem informações confidenciais quando você está em segundo plano.

Por exemplo, rangi latas abstratas, em páginas abstratas. E agora vou lhe fazer uma pergunta imediatamente: você vai transferir dinheiro para sua mãe / namorada / cachorro, você já está na página de transferência e saiu do aplicativo para copiar o código do sms (se você negou o acesso ao aplicativo bancário em um ataque de paranóia) ou ver qual Qualquer informação. Mas quando você decide voltar ao seu aplicativo bancário, qual tela você escolhe?

Como vemos, antes de você ter duas telas absolutamente idênticas e com pressa, você pode não perceber isso. Você clica no último aplicativo, acessa, insere os dados e pronto, seu dinheiro foi transferido. Para onde eles foram transferidos? Para quem?

E o assunto não é apenas nesse banco abstrato, eu olhei para vários dos bancos mais populares e todos eles sofrem com esse problema.

imagem alt

Curiosamente, no lado do iOS, o conteúdo da tela no gerenciador de tarefas está oculto.

imagem alt

E há uma explicação para isso. Mas mais sobre isso mais tarde, agora estamos falando sobre o Android. Então, por que ocultar o conteúdo da tela se o usuário saiu do aplicativo?

Vamos primeiro entender como o gerenciador de tela funciona (tela Recentes)


imagem alt

Nesta tela, vemos uma lista de nossos aplicativos abertos anteriormente. Até nos é mostrado o local em que paramos nossa interação com um aplicativo específico. Mas o fato é que não vemos o aplicativo em si, vemos um instantâneo feito antes de sair do aplicativo.

O que realmente acontece (brevemente):


  • O aplicativo mudou para o segundo plano
  • O Window Manager coloca o instantâneo do aplicativo no GraphicBuffer
  • O GraphicBuffer é enviado para o SystemUI via Binder para visualizar o aplicativo.

Portanto, o que vemos aqui não é o conteúdo do aplicativo, mas apenas um instantâneo tirado no último momento antes da transição de um aplicativo específico para o plano de fundo.

Mas, você adivinhou, não é tão simples, você pode acessar esses instantâneos e, por exemplo, também mostrar ao usuário na tela Recentes outro aplicativo sob o pretexto de bancário, que é o que os Trojans usam. O usuário retorna ao aplicativo bancário, insere todos os detalhes solicitados, o dinheiro é transferido, mas não para onde gostaríamos.

Ou você pode simplesmente enviar essas fotos, por exemplo, para a China, onde os duros chineses acumulam informações sobre tudo e todos. Os métodos de uso das capturas de tela obtidas podem ser pensados ​​infinitamente.

Na maioria das vezes, é claro, os aplicativos bancários ou aplicativos que contêm qualquer informação crítica que não se destina a olhares indiscretos precisam cuidar de ocultar dados confidenciais.

Negar a criação de snapshots ou a sua colocação em azul somente é possível em um aplicativo específico. E a documentação diz que apenas os fabricantes de dispositivos podem modificar a classe responsável pelo mecanismo de recebimento e armazenamento de instantâneos.

Como impedir que o sistema faça capturas instantâneas


Existem várias maneiras, no entanto, infelizmente, nem todas são bastante otimistas. Se você deseja usar algum deles em seu aplicativo, verifique se tudo funcionará bem em todos os dispositivos.

Você pode definir o parâmetro para a atividade:

android:excludeFromRecents = "true" 

No entanto, esse método violará a lógica da interação do usuário com o aplicativo, pois o aplicativo não aparecerá na tela Recentes.

 if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); } setContentView() 

Esse método não viola a lógica da interação, mas o sistema começa a tratar o conteúdo da tela do aplicativo como protegido, não permitindo que sejam feitos instantâneos. A seguir, é apresentado um exemplo de como isso ficará na tela Recentes.

Além disso, existe uma maneira de rastrear onPause (). Mas aqui você deve manter constantemente a visualização preparada no estado View.GONE, para que, quando o aplicativo entrar em segundo plano, você possa tornar o View.VISIBLE. Mas isso também não funcionará com muita confiabilidade, pois, infelizmente, é impossível controlar o tempo de remoção da captura instantânea.

By the way, o carrinho poderia, bem, quem duvidaria :) Na tela é um bate-papo secreto, neste caso, FLAG_SECURE é usado.

imagem alt

Então, por que os bancos ocultam o conteúdo de um aplicativo na plataforma iOS, que é considerado mais seguro (o que é enganoso), e o deixam como é para a plataforma Android? Provavelmente, eles simplesmente não gostam da aparência do aplicativo na Tela Recentes. Isso é apenas uma tela branca. No iOS, a implementação permite que você faça lindamente. Como resultado, obtemos danos à segurança por uma questão de beleza. Talvez você não se importe contanto que seu dinheiro esteja onde você gostaria e a confidencialidade dos dados seja inabalável. Mas você está pronto para pagar? ..

Portanto, para não terminar com uma nota tão pessimista, levantaremos a questão: isso também pode ser feito muito bem para o Android? Na verdade, eu já criei uma maneira, mas primeiro você precisa testá-la.

Se você estiver interessado neste tópico, posso descrever como tudo funciona por dentro. Como posso obter instantâneos, como o sistema Android funciona, sobre as vulnerabilidades de aplicativos móveis.

Decidi me desafiar e escrever algo útil regularmente. Vou postar esboços no meu canal @paradisecurity em telegramas e depois coletá-los em postagens completas. Tchau, tchau.

Source: https://habr.com/ru/post/pt431024/


All Articles