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

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



Para acessar a Activity, usamos o comando abaixo:

run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.PostLogin



Essa foi a demonstração do uso das ferramentas ADB e Drozer para acesso a Activity. 


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

Postagens mais visitadas