O aplicativo instalador do Fortnite Mobile no Android pode ser explorado em seu primeiro lançamento. Pode ser um abuso instalar silenciosamente qualquer aplicativo em telefones Samsung Galaxy.
O lançamento do Fortnite Mobile no Android não foi muito bom, especialmente desde muitos dos dispositivos suportados realmente luta para jogar com taxas de quadros aceitáveis. O jogo foi lançado como um Samsung Galaxy exclusivo por apenas 3 dias. O instalador Fortnite foi disponibilizado pela primeira vez em Aplicativos Samsung Galaxy antes que a Epic Games permitisse que jogadores não-Samsung baixassem e instalassem o jogo completo do instalador Fortnite obtido no site da Epic. Pouco depois que o instalador Fortnite foi disponibilizado, a Epic Games lançou silenciosamente uma atualização para o instalador. Agora sabemos por quê: eles corrigiram um Homem no disco exploração que possibilitou que um aplicativo malicioso instalar silenciosamente qualquer aplicativo que eles quisessem em smartphones Samsung Galaxy
. Como tem havido alguma confusão sobre como essa falha funciona, tentaremos esclarecer as coisas. Primeiro, precisamos explicar os fundamentos da instalação de aplicativos no Android.Fluxo de instalação de aplicativos em smartphones Android
Instalações silenciosas de fontes próprias
Para instalar silenciosamente um APK no Android sem solicitar permissão do usuário, você precisa ter um aplicativo de nível de sistema com o INSTALL_PACKAGES permissão garantida. Exemplos de aplicativos com essa permissão incluem a Google Play Store na maioria dos dispositivos Android. Lojas de aplicativos originais em dispositivos Samsung, Huawei e outros fabricantes de dispositivos também podem ter a permissão INSTALL_PACKAGES concedida. Se você deseja instalar qualquer aplicativo da Google Play Store, ele fará o download e instalará automaticamente o aplicativo para você sem intervenção adicional depois de pressionar "Instalar". (A Google Play Store até automaticamente concede certas permissões de tempo de execução como aquele para sobreposições, enquanto os aplicativos instalados fora da Play Store precisam solicitar ao usuário que conceda essas permissões.)
Se você está curioso para saber se um aplicativo em seu dispositivo tem permissão INSTALL_PACKAGES, você pode descobrir por meio de um comando ADB.
adb shell
dumpsys packagepackage.name.here | grep "INSTALL_PACKAGES"
Por exemplo, o nome do pacote da Google Play Store é "com.android.vending
". Outro aplicativo com essa permissão é o Shell com o nome do pacote com.android.shell
. Para você que usa Substrato sem raiz através do plug-in Andromeda no Android Oreo, o script Andromeda executado em seu PC mantém o processo shell em execução para que o Substratum possa usá-lo para instalar pacotes (as sobreposições de tema) e, em seguida, usar o Comandos do OverlayManager para ativar as sobreposições.
Carregamento lateral de aplicativos de fontes de terceiros
Se você tentar baixar e instalar um aplicativo de fora de uma loja de aplicativos própria, primeiro será necessário habilitar fontes de instalação desconhecidas. Isso permite que o Serviço de gerenciador de pacotes dentro da estrutura do Android (que tem a permissão INSTALL_PACKAGES), saiba que você reconhece os riscos do carregamento lateral de aplicativos de fontes de terceiros. Em dispositivos pré-Android Oreo, há uma única alternância nas configurações de segurança para permitir a instalação de fontes desconhecidas. No Android Oreo e versões posteriores, um aplicativo que solicita a instalação de um APK deve declarar o REQUEST_INSTALL_PACKAGES permissão e o usuário deve colocar esse aplicativo na lista de permissões para que ele possa solicitar instalações de aplicativos por meio do serviço Package Manager. Como REQUEST_INSTALL_PACKAGES é uma permissão "appop", isso a torna uma das permissões que podem ser controladas no gerenciador de permissões de Configurações ou por meio do cmd appops
comando shell.
Depois que a instalação de fontes desconhecidas for habilitada globalmente ou especificamente para um aplicativo solicitante, o usuário poderá carregar um aplicativo lateralmente. No entanto, o Gerenciador de Pacotes não permite que o aplicativo seja instalado silenciosamente. Em vez disso, ele perguntará ao usuário se ele deseja instalar o aplicativo e listará todas as permissões confidenciais solicitadas na instalação. Se o usuário aceitar, o aplicativo será instalado com as permissões fora do tempo de execução solicitadas. Os OEMs também podem personalizar o Gerenciador de Pacotes: Por exemplo, o Gerenciador de Pacotes na versão chinesa do O EMUI 5 da Huawei tem um recurso para verificar o APK para decidir se é seguro e controlar quais são as permissões garantido antes instalação. Observei isso no Honor Note 8 executando o EMUI 5 importado da China, embora tenha certeza de que outros dispositivos chineses Huawei e Honor também possuem esse recurso em seus gerenciadores de pacotes.
De qualquer forma, isso resume a diferença entre instalar um aplicativo de uma fonte primária aprovada e de uma fonte de terceiros. Se você tentar instalar um aplicativo da Play Store ou loja de aplicativos equivalente com o INSTALL_PACKAGES permissão, ele cuidará silenciosamente da instalação por conta própria, sem intervenção adicional do usuário depois de iniciar a transferência. Mas se você baixar um APK do XDA Labs, APKMirror ou outras fontes de terceiros, o instalador de pacote padrão cuidará da instalação e solicitará que o usuário instale esse pacote. Então, onde entra o instalador Fortnite e por que tudo isso é relevante?
Uma falha no processo de instalação do Fortnite
Hoje cedo, o Google divulgou uma vulnerabilidade eles descobriram com a primeira versão do instalador Fortnite. A vulnerabilidade foi demonstrada no Exynos Samsung Galaxy S8+ (dream2lte), mas também afetou todos os outros dispositivos Samsung Experience, incluindo o Samsung Galaxy Note 9 e o Samsung Galaxy Tab S4. A vulnerabilidade permite aplicativo malicioso já instalado para aproveitar a maneira como o instalador do Fortnite tenta instalar o Fortnite pela primeira vez em dispositivos Samsung Galaxy. Ao usar uma API privada no Samsung Galaxy Apps, o instalador do Fortnite evita a necessidade de solicitar ao usuário por meio do instalador de pacote padrão para instalar o Fortnite. Isso ocorre porque o Galaxy Apps tem a permissão necessária para realizar a instalação silenciosamente. Não haveria nada de errado com esse processo de instalação silenciosa se o aplicativo que está sendo instalado silenciosamente fosse o verdadeiro Fortnite. Mas devido ao local onde o instalador Fortnite armazenou o arquivo APK baixado para o jogo Fortnite, ele era facilmente explorável.
De acordo com o relatório do Issue Tracker, o instalador do Fortnite baixaria o APK do Fortnite Mobile para /sdcard/Android/data/com.epicgames.portal/files/downloads/
. Isso é considerado "armazenamento externo" no Android, pois /sdcard é um link simbólico para /data/media/CURRENT_USER e /sdcard era o nome usado nos primeiros dias do Android, quando os dados do aplicativo eram armazenados em cartões SD físicos. Hoje em dia, os dados do aplicativo geralmente são armazenados em diretórios específicos do aplicativo em /data/data/, e cada aplicativo só tem acesso aos arquivos em seu próprio diretório /data/data. Assim, se o instalador do Fortnite armazenasse o APK do Fortnite baixado em seu próprio diretório /data/data/, seria impossível para qualquer aplicativo sem permissões de leitura (ou seja, sem acesso root) para saber o que está acontecendo neste diretório.
No entanto, desde o instalador Fortnite salvou o APK baixado em armazenamento externo, ele poderia ser monitorado e sobrescrito por qualquer aplicativo com permissões de leitura de armazenamento externo. Normalmente, os aplicativos gravam em /data/media, o “cartão SD virtual”, quando armazenam arquivos que precisam ser acessados pelo usuário via MTP ou por outros aplicativos. Para que um aplicativo leia ou grave em/data/media, ele precisa ter READ_EXTERNAL_STORAGE e Permissões WRITE_EXTERNAL_STORAGE respectivamente (ambas estão no mesmo grupo de permissões e, portanto, concedidos em conjunto). Antes do Android 4.4 KitKat, a maioria dos aplicativos solicitava essas permissões durante a instalação, caso contrário, elas não seriam capaz de ler ou gravar nos arquivos no diretório de armazenamento externo designado do pacote em /data/media/.../Android/. Com a introdução de FUSE para emular permissões de diretório estilo FAT-on-sdcard no Android 4.4 KitKat, os aplicativos não precisam mais de permissões para acessar arquivos no diretório designado no armazenamento externo. O acesso a arquivos em qualquer outro diretório ainda precisaria de permissões de armazenamento externo, que é o que um aplicativo malicioso pode fazer para sequestrar o processo de instalação do Fortnite.
Conforme mostrado no vídeo abaixo, um aplicativo malicioso com permissão READ_EXTERNAL_STORAGE monitora o diretório de download do instalador Fortnite no armazenamento externo. Ao detectar que o download foi concluído e a impressão digital verificada, ele substitui o baixou o pacote Fortnite com seu próprio pacote malicioso graças ao WRITE_EXTERNAL_STORAGE permissão. No entanto, devido à forma como o Samsung Galaxy Apps verifica o APK Fortnite antes da instalação (...apenas verifica se o nome do pacote é "com.epicgames.fortnite"), é possível ter o Galaxy Aplicativos instale silenciosamente o pacote malicioso em segundo plano, sem intervenção ou notificação do usuário– desde que o nome do pacote malicioso seja “com.epicgames.fortnite”. Pior ainda, se este pacote malicioso tivesse como alvo o SDK de nível 22 ou inferior (Android 5.1 Lollipop e anteriores), seria receberá automaticamente todas as permissões definidas em seu manifesto porque as permissões de tempo de execução são obrigatórias apenas para aplicativos direcionados ao SDK de nível 23 e superior (Android 6.0 Marshmallow e mais tarde).
Mas o que aconteceria em dispositivos que não fossem da Samsung? Bem, como o Samsung Galaxy Apps não está instalado em dispositivos que não sejam da Samsung, o APK malicioso não será instalado silenciosamente em segundo plano. O Fortnite Installer é um aplicativo de terceiros e, portanto, precisa primeiro solicitar ao usuário que habilite instalação de fontes desconhecidas e, em seguida, envie uma solicitação ao instalador do pacote para instalar o falso Fortnite APK. Dependeria então do usuário tocar em "Instalar" quando questionado se deseja instalar o aplicativo ou não. Isso é problemático, independentemente do fato de que telefones que não sejam da Samsung não correm o risco de um aplicativo malicioso ser instalado silenciosamente em segundo plano. O usuário médio não ficaria sabendo se um APK malicioso criado com “Fortnite” em seu nome e o ícone do aplicativo Fortnite fosse apresentado a ele para instalação.
Ainda assim, há uma distinção clara entre explorar esta falha em smartphones Samsung Galaxy e smartphones não Samsung. O primeiro é um ataque Man-in-the-Disk que também aproveita uma API de sistema oculta para instalar silenciosamente qualquer aplicativo em em segundo plano, com quaisquer permissões e sem a necessidade de induzir o usuário a pensar que está instalando um Fortnite falso APK. Este último é um Ataque Man-in-the-Disk padrão que também pode acontecer com outros aplicativos que salvam APKs ou outros dados importantes em diretórios de armazenamento externo, como mostra o recente Ponto de verificação publicar. Acontece que, graças à API oculta do Galaxy Apps, esse ataque Man-in-the-Disk é mais perigoso em dispositivos Samsung Galaxy.
Consertando a falha
Para crédito da Epic Games, eles responderam muito rapidamente ao relatório do Google Issue Tracker e lançaram uma atualização para a versão 2.1.0 o mais rápido que puderam. A correção foi simples: basta salvar o APK do Fortnite baixado no diretório de armazenamento interno do instalador do Fortnite em /data/data, em vez de no diretório de armazenamento externo em /data/media. O engenheiro da Epic Games solicitou que a falha fosse divulgada após 90 dias, embora o Google tenha recusado e tornado o problema público 7 dias após o lançamento da correção. O CEO da Epic Games, Tim Sweeney, foi não satisfeito com o rápido tempo de resposta desde o relatório de segurança inicial até sua divulgação. Ele ofereceu a seguinte declaração para Central Android.
A Epic apreciou genuinamente o esforço do Google para realizar uma auditoria de segurança aprofundada do Fortnite imediatamente após nossa lançar no Android e compartilhar os resultados com a Epic para que possamos emitir rapidamente uma atualização para corrigir a falha que eles descoberto.
No entanto, foi irresponsável da parte do Google divulgar publicamente os detalhes técnicos da falha tão rapidamente, enquanto muitas instalações ainda não haviam sido atualizadas e ainda estavam vulneráveis.
Um engenheiro de segurança da Epic, a meu pedido, solicitou ao Google adiar a divulgação pública pelos típicos 90 dias para permitir que a atualização fosse instalada de forma mais ampla. Google recusou. Você pode ler tudo em https://issuetracker.google.com/issues/112630336
Os esforços de análise de segurança do Google são apreciados e beneficiam a plataforma Android, no entanto, uma empresa tão poderosa como o Google deveria praticar mais momento de divulgação responsável do que este, e não colocar os usuários em perigo no curso de seus esforços de contra-RP contra a distribuição de Fortnite pela Epic fora de Google Play.
Não posso dizer quantos dispositivos Samsung Galaxy existentes ainda possuem o antigo instalador Fortnite. Talvez a Epic Games devesse dizer a esses usuários para atualizarem suas instalações enviando uma mensagem no Fortnite Mobile. O novo recurso de mensagens no aplicativo do Firebase poderia fazer o truque. Embora provavelmente não seja um grande problema porque, se um usuário com o instalador mais antigo já baixou o legítimo Fortnite, então qualquer ataque MITD não funcionará porque o APK malicioso não pode ser instalado em cima do Fortnite existente instalação. De qualquer forma, a descoberta dessa falha logo após o lançamento de Fortnite no Android – quando ainda há tanta controvérsia sobre o lançamento da Epic Games decisão de abandonar o Google Play— certamente ajuda o argumento de que a decisão da Epic Games foi descuidada. Se essa era a intenção do Google ao divulgar esse problema tão rapidamente, nunca saberemos.