Android 7.1 Nougat possui um “modo de pânico” secreto para barrar malwares

Embora haja a percepção de que o Android não é tão seguro assim (e não faltam motivos para isso), o Google trabalha constantemente para tornar o robozinho mais estável e confiável. A diferença de filosofia em comparação à Apple, que blinda o iOS e não permite sideload sem jailbreak contribui para que os usuários acabem por sabotar o sistema, muitas vezes por ingenuidade ao inserir um aplicativo suspeito por fontes externas.

Mesmo apps aparentemente legítimos vira e mexe driblam as normas de segurança do Google, começam a se comportar de forma errática e a fazer mais do que deveriam, seja coletando dados ou na pior das hipóteses, capturando o dispositivo e impedindo qualquer outra ação. Foi pensando nisso que os desenvolvedores do Android introduziram uma nova função, desativada por padrão na última atualização da versão 7.1 Nougat: uma espécie de “modo de pânico” que sobrescreve qualquer ação de aplicativo quando detecta um comportamento específico do usuário.

A ideia é permitir que o usuário se safe de uma situação em que um aplicativo mal intencionado está tentando assumir o controle de um dispositivo Android, e nesses casos a reação mais comum é apertar a tecla Voltar várias vezes em desespero, numa tentativa fútil de voltar à tela principal. A função do “modo de pânico” é detectar esse número de acionamentos incomum da tecla e nesse caso e matar todos os processos do app, volta para o Home e dá ao incauto usuário a chance de desinstalar o app sacana.

O recurso foi descoberto pela comunidade no fim de semana e não está ativo, precisa ser acionado através de uma modificação direta no código-fonte e por isso mesmo o Google sequer mencionou sua existência. Em primeiro lugar apenas aparelhos que rodam o Android 7.1 Nougat receberam o recurso, o que indica um provável feature a ser introduzido no Android O (Oatmeal Cookie? Orange Cake? Não, não será Oreo) e posteriormente ativado na versão atual do robozinho. Não se sabe se ele será introduzido nas versões anteriores (provavelmente não) e nem quando ele será ativado com certeza, mas o “modo de pânico” existe.

É legal ver que o Google está se preocupando não apenas em remover apps maliciosos da Play Store (ainda que eles se multipliquem feito coelhos), mas também dando opções para que os usuários possam sair de situações delicadas por conta de um malware independente de onde ele veio. O ideal seria que o“”modo de pânico” fosse incluído também nas versões anteriores do Android, mas isso dificilmente irá acontecer.

Fonte: XDA Developers.

Relacionados: , , , , , , ,

Autor: Ronaldo Gogoni

Um cara normal até segunda ordem. Além do MeioBit dou meus pitacos eventuais como podcaster do #Scicast, no Portal Deviante.

Compartilhar
  • Não sei porque até hoje ninguém nunca pensou num malware que não contenha código malicioso, mas sim baixe o código remotamente e através de reflexão execute esse código. Isso possibilitaria executar infinitas possibilidades de código, uma vez que reflexão roda em tempo de execução e não compilação.

    Uma vez fiz um sistema que executava código Java a partir de blocos de código salvos em um banco de dados, pois as regas de negócio eram escritas pelo usuário e traduzidas para código pelo sistema (o usuário não via o código-fonte gerado).

    Isso em teoria é possível fazer no Android e até mesmo no iOS.

    • Mario Neis

      curti bastante isso daí bicho, tou estudando Cyber Security agora, e brilhou umas ideias interessantes pra testar em laboratório aqui 🙂

    • Wallacy

      Já existem Malwares assim, é por isso que anti-virus além do trace detector tem base de dado de malware. Logo eles descobrem o seu padrão de “baixar código” e colocam isso na base para bloqueio, seja usando uma estrategia P2P ou fontes estáticas, dificilmente você vai obter tais fontes maliciosas sem ser descoberto.

      • Eu falo de algo simples, que do ponto de vista de um antivírus passaria batido, tal como um request HTTP simples, que na verdade retorna um texto puro (que na verdade é o código-fonte a ser executado por reflexão). Acho que um algoritmo desses passaria batido pela heurística do antivírus. A única fragilidade seria o código que faz a reflexão, aí sim o antivírus pode considerar como “perigoso”.

        • DanielBastos

          Ai vc entra em outra categoria de detecção.

          Se este fonte tiver que ser compilado, além de vc ter que baixar o compilador(O que já é um problema, pq ele vai ter que vir como binário), assim que vc gerar o novo programa, a maioria dos antivírus vai achar “esquisito” um executável nunca visto antes e bloqueia(a maioria faz isso pelo menos)

          Se vc tá pensando em Java(como falou antes), ai a abrangência cai pq o cara ia ter que ter o jdk instalado (não só o jre)

          • Aí que está, não precisa de nada instalado (nem compilador e nem SDK). O Java (e qualquer linguagem moderna, incluindo o Objective C e Swift da Apple) tem reflexão e por si só é possível executar código arbitrário.

            Tudo que o malware precisa fazer é baixar um TXT (nem precisar arquivo físico, basta fazer o “download” via HTTP) e executar esse bloco de texto, que na verdade é um código-fonte malicioso.

            Exemplo simples disso: http://www.beanshell.org/manual/quickstart.html#Calling_BeanShell_From_Your_Application

          • Wallacy

            Só como nota, não é possível executar nada não compilado previamente em Swift, e na maior parte dos casos também não em Objetive-C (nesse último caso é permissível executar novos métodos em objetos distintos, mas eles precisam estar previamente compilado).

            Swift é mais restrito que C inclusive.

          • Em Objective C dá sim, inclusive dá para criar classes inteiras em tempo de execução https://stackoverflow.com/questions/7550012/does-objective-c-have-reflection

            Swift suporta reflexão, portanto dá pra executar de alguma forma código arbitrário https://appventure.me/2015/10/24/swift-reflection-api-what-you-can-do

          • Wallacy

            Desculpe, você está errado. Suportar reflexão não é tudo que é necessário para executar códigos arbitrários.

            Em Objective-C, você pode sim inclusive criar classes inteiras em tempo de execução, mas para isso você precisa que cada função ou método esteja previamente compilado. O montador é capaz de substitui ou adicionar métodos usando como referencia o ponteiro de alguma função previamente existente. Swizzling é a técnica mais usada nesse contexto em ObjC, fiz todo um bando dados baseado nisso, muito util, mas não executa nada arbitrário.

            Em Swift pior ainda. Eu não disse que não tinha reflexão, tem, bem imatura mas tem, porém está anos luz de poder executar códigos arbitrários. Vai contra inclusive a propria filosofia da linguagem que é a previsibilidade. A Reflexão em Swift é apenas para é para obter informações dos objetos, obter ponteiros diretos para métodos, etc. Não tem como fazer build de nada novo.

            Só como referencia, hoje 12/07/2017, a ABI do Swift não é compatível com ele mesmo, qualquer lib em Swift precisa ser recompilada com seu executável final para rodar o programa, uma lib compilada em uma build anterior não funciona (de forma garantida, algumas vezes funciona) com a nova pois a ABI é variável. Esse problema deve ser resolvido até o final do ano, com o freeze da ABI, mas não significa ainda que existe qualquer capacidade de execução de código JIT! Quanto a isso por exemplo, existe uma proposta da IBM para uma extensão da linguagem para permitir isso, tem um fork no github que o cara fez os ajustes, precisou de muito trabalho, e ainda não funciona direito pois viola varios contratos da linguem (a forma que os protocolos são acessados etc), essa versão só funciona em uma versão especifica e também não é capaz de adicionar coisas novas, pois depende de embebedar o SIL (LLVM Swift Intermediary Language) como static library no executável.

            Poderia ir mais adentro no assunto, porém o que você está querendo é algo que precisa muito mais que reflexão, em linguagens estaticamente compiladas isso simplesmente não é possível, é necessário mecanismos JIT, suporte a variable ABI, etc. É possível fazer isso em JAVA, sim! Mas só porque se usa o mecanismo de reflexão em java para isso não significa que outras vão fazer o mesmo, não faz o menor sentido, nem é para isso que a reflexão existe inclusive.

            Como eu disse, Swift inclusive é mais restrito que C, inclusive Chris Lattner reforçou isso em uma das discussões sobre o memory ownership model do Swift, e porque ele não pode fazer algumas operações em memoria direta (já que possuímos ponteiros diretos como em C, e Swift é uma C derived language) pois em C poderíamos fazer substituição de códigos direto na memoria devido a algumas falhas de segurança no ownership model (em C++ também não da pra fazer).

            O ponto é, linguagens como JAVA, Ruby, JS, etc… Usam VMs e possuem mecanismos JIT, isso permite sim que executemos códigos arbitrários. Já linguagens como ObjC, Swift e C são estaticamente compiladas, e o assembly final é estaticamente referenciado, não existe nenhum mecanismo em run time para adicionar novas rotinas, apenas, no caso do ObjC, alterar objetos dinamicamente usando trechos recompilados dado ao modelo de mensagem entre objetos, em Swift nem isso existe, já que como em C, temos referencia direta para cada ponteiro de função, e pelo ownership model isso é estritamente modulado na tabela de referencias (como em C) durante a compilação, e já que não existe como trocar essa parte da memoria também (como em C daria) tal como outras linguagens derivadas do C (como C++) por questão de segurança, para fazer o que você propõe, seria necessário o HackerMan.

            Um pouco mais o sobre Swift: https://github.com/apple/swift/tree/master/docs

            O que você está propondo é muito mais simples com linguagens que suportam executar Scripts, nesse caso é relativamente simples em diversas linguagem, isso inclui Swift ou qualquer outra linguagem de sistema. Mas isso é fichinha para os Antivirus.

          • Bacana sua explicação, tinha uns pontos que eu não sabia no Swift.

          • DanielBastos

            No caso, quando falei de compilador, tava pensando mais em windows mesmo.

            Mobile eu não sei muito pq eu trabalho mais com Desktop. Mobile só apps híbridas. Mas eu fiz mais ou menos o que vc fez. No meu caso, com Delphi. (Que descanse em paz)

            Mas, no final, ainda acho que não é lá muita vantagem baixar em texto puro. Imagina que o cara baixa com uma conexão criptografada. Pensando por baixo, um ssl já resolve. Um interceptador qualquer não poderia quebrar(pelo menos não em tempo hábil) para verificação.

            Mas claro, to no chutometro. Ainda vou parar pra brincar com isso.

        • Gink Labrev

          Talvez o fato de haver reflexão já seja condição suficiente para o antivírus bloquear, semelhante ao acontece na Apple, como o colega falou.

          De qualquer forma, vejo complicação nessa ideia, pois Java é compilado, não sei se pode ser interpretado como JS por mera reflexão ou somente em tempo de compilação.

          Outra questão: quem usa antivírus para Android ? A maioria das pessoas que conheço não usa.

          • Java permite que se execute código não compilado. Eu já desenvolvi sistema que fazia exatamente isso. Você executa um block com código Java e o Android tem isso, porque o ORMLite (framework de abstração de banco de dados) utiliza reflexão para popular objetos (entidades do BD).

            Antes do Java 6, existia um framework chamado BeanShell que adicionava essa funcionalidade ao Java, onde você executa blocos inteiros de código sem precisa compilá-los. Evidente que a performance é um pouco pior, mas nem tanto (principalmente se for utilizando o suporte oficial do Java 6).

    • Isso ocorre aos montes. Uma boa parte dos crak3s já fazem isso. Quando se fala de ataque coordenado a um site, geralmente são esses programas “acordando” para sua funcionalidade oculta, que poderiam não estar ali originalmente. Curiosamente a maioria desses crak3s são originalmente obtidos em sites russos e atualmente a Rússia e a China São os principais citados quando o tema é ataque e espionagem via internet.

    • Daniel Tiecher

      É uma ideia interessante mas acredito que já esteja em uso pois eu lembro de ter lido um artigo ano passado analisando um ransomware para Android que fazia exatamente isso. Tentei encontrar aqui o artigo novamente usando o Google mas não consegui, mas se eu não me engano era do Ars Technica.

      No caso do iOS seria mais difícil pois os próprios guidelines da App Store proíbem o download e execução de código adicional, salvo em um caso específico: caso o app apresente o código completo e possibilite que o usuário edite esse código. O que obviamente é uma exceção que permite a criação de editores de código e IDEs mais inteligentes. Só que essa é uma exceção bem recente, criada esse ano ainda. Antes disso era permitido apenas o download de código adicional, mas não a sua execução.

    • Na verdade isso já ocorreu varias vezes, não lembro a fonte, mas já vi isso acontecendo.

    • Felipe Braz

      Ocorre bastante, e inclusive outras situações bem inusitadas. certa vez peguei uns processos com o nome “httpd”, mas como compilo o apache, o normal é que o processo seja “apache2”, fui ver e era um server de mirc escrito em perl, aonde atraves de um client os crackers se conectavam pra enviar comandos remotos. Até entrei no canal dos kras (tava no source o endereço) pra zoar com eles UHAuAH

      No final das contas acabei bloqueando execução de perl por parte dos clientes em todo o parque, pois uns 80% das porcarias que eu pegava eram escritas nisso.

  • Germano

    Pensar que dois celulares atras o botão de panico do aparelho que eu tinha entao teria sido remover a bateria, se tivesse precisado. Ainda me pergunto por que inventaram de fazer aparelhos com baterias não removiveis por padrão.

    • Felipe Braz

      Pra poder fazer celular com 2 nanometros de espessura ¬¬’

  • Guilherme Costa

    Quando habilita-se o “modo desenvolvedor”, existe uma opção que se o usuário segurar o botão voltar, o app ativo é totalmente finalizado. É um recurso antigo, mas me pareceu o mesmo da matéria.
    Seria o caso?

    • Cássio Amaral

      É parecido o funcionamento, mas no caso desse recurso, ele mata todos os processos ativos e volta para a home. Sobre esse recurso de segurar o botão voltar para encerrar o aplicativo ativo, eu uso o módulo do xposed GravityBox, que permite customizar a ação de teclas físicas.

  • Jonathas Lacerda

    “Oatmeal Cookie? Orange Cake? Não, não será Oreo”.
    Fail.

Aproveite nossos cupons de desconto:

Cupom de desconto Locaweb, Cupom de desconto HP, Cupom de desconto Descomplica, Cupom de desconto Nuuvem, Cupom de desconto CVC, Cupom de desconto Asus, Cupom de desconto World Tennis