Exploit Activity - Android App
O que é uma Activity?
Em aplicativos Android, a Activity representa uma tela que gerencia a navegação do usuário. Cada tela em um aplicativo Android é implementada como uma Activity separadamente. À medida que o usuário navega no aplicativo, como por exemplo, abrir ou fechar uma tela, essas ações são processadas em um "ciclo de vida" da Activity.
Para ilustrar, na imagem abaixo, podemos ver o "ciclo de vida" de uma Activity. Basicamente, durante a navegação do usuário em uma tela, a Activity muda de "estado" de acordo com as ações do usuário. Os métodos de callback processam as ações durante essas transições de "estado".
Por exemplo, quando o usuário abre um aplicativo, é iniciado uma Activity e os métodos onCreate(), onStart(), onResume() são processados. Em seguida, com a Activity em execução, a tela é colocada em background, sendo essa ação processada pelo método onPause(), depois o usuário volta para a tela do aplicativo, então é chamado o método onResume().
O que é uma Activity exportável?
Quando uma Activity é exportável, ela pode ser acessada por outros aplicativos. Por padrão, uma Activity não é acessível por outros aplicativos, isso ocorre quando o parâmetro "exported" no arquivo AndroidManifest.xml é configurado como "true".
Na maioria dos casos, a funcionalidade da Activity ser acessada por outro aplicativo tem um uso legítimo. No entanto, dependendo da Activity, o acesso a determinadas telas pode expor o aplicativo aos riscos de acesso não autorizado e "bypass" de autenticação.
Para demonstrar os riscos associados com uma Activity exportável, vou usar o aplicativo Insecure Bank, mostrando o cenário padrão de um pentest e o cenário usando um aplicativo malicioso para fazer o bypass de autenticação.
Como acessar uma Activity?
Durante o pentest, podemos acessar a Activity usando 2 ferramentas diferentes:
- ADB
- Drozer
No arquivo AndroidManifest.xml identificamos as Activities exportáveis. Na imagem abaixo, o aplicativo Insecure Bank possui as Activities DoLogin, PostLogin, DoTransfer e ViewStatement exportáveis.
ADB (Android Debug Bridge)
O ADB é uma ferramenta que permite a comunicação entre a máquina local e um dispositivo Android. Além de diversas funcionalidades, o ADB possui o módulo "Activity Manager" que é usado para acessar uma Activity.
abd shell am start -n [package-name]/[activity-name]
Drozer é um framework para pentest em aplicativos Android.
Importante mencionar que o Drozer possui um Agent que deve ser instalado no mesmo dispositivo em que ocorre o pentest, e sua conexão com a máquina local é feita usando o seguinte comando:
adb forward tcp:31415 tcp:31415
Primeiramente, podemos listar as Activities com o comando:
run app.activity.info -a com.android.insecurebankv2
run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.PostLogin
Cenário Real com Aplicativo Malicioso
Em um cenário real, um aplicativo malicioso pode acessar uma tela de outro aplicativo caso a Activity dessa tela esteja exportável.
Se uma tela na área logada estiver acessível, um aplicativo malicioso pode fazer o "bypass" de autenticação ao "chamar" diretamente uma tela da área logada.
Na imagem abaixo, podemos ver o aplicativo malicioso onde informamos o nome do pacote do aplicativo-alvo, e em seguida selecionamos a Activity "PostLogin". Ao clicar no botão "Start Activity", o aplicativo malicioso acessa a tela da área logada do aplicativo Insecure Bank onde é possível fazer transferências e alterar a senha de acesso.
Os impactos na exploração de telas configuradas como exportável é a quebra de confiança do usuário no uso do aplicativo legítimo. Dependendo da função que o aplicativo oferece, o "bypass" de autenticação e o acesso não autorizado a telas da área logada podem levar a fraudes ou vazamento de informações.
O aplicativo para fazer a prova de conceito desta vulnerabilidade está disponível no github HACKING BR
Comentários
Postar um comentário