Apps en Google Play que instalan un servidor HTTP como backdoor en tu Android

jueves, 5 de noviembre de 2015

Trend Micro ha descubierto un problema muy intereasnte con un SDK llamado Moplus que, literalmente, funciona como un backdoor para dispositivos Android. Los problemas son que este SDK pertenece a Baidu (el buscador Chino más importante); que se usa no solo en sus apps sino en las de terceros; y que algunas de las apps afectadas están en estos momentos en Google Play, con millones de descargas. Encontrar dispositivos vulnerables es tan sencillo como escanear una red y enviar comandos HTTP. Además de la investigación de Trend Micro, hemos descubierto otras apps en Google Play y algunas curiosidades.

El SDK se llama Moplus. Además de sus "funcionalidades oficiales", establece un servidor HTTP local (el conocido nanoHttpd), que escucha en diferentes puertos, depende de la app y la versión del SDK (probablemente el puerto 6259). Si nos conectamos a ese puerto, no se sirve ningún contenido  (documentRoot apunta a data/data/apkName\files\local_http_server)… pero permite a un atacante enviar peticiones POST con comandos.

Definiendo el puerto donde escuchará el servidor
Y eso es todo. Cualquier atacante podría enviar comandos al puerto a través de peticiones HTTP POST sin autenticación. Una de las versiones más débiles que hemos visto es utilizar la cabecera "remote-addr" en 127.0.0.1 como método único de validación. Otros parece que necesitan que el referer case con esta expresión regular:

^http[s]?:\\/\\/[^\\/]+(\\.baidu\\.com|\\.hao123\\.com|\\.hiapk\\.com|\\.91\\.com)(:\\d+)?(\\/.*|)$";

Si funciona, ejecutará las órdenes y devolverá un JSON con la respuesta (siempre y cuando los permisos en la app lo permitan, cosa que la mayoría de las que hemos visto hacen).

¿Qué comandos soporta?

Quedan muy claros observando esta pieza de código:

Código con los comandos aceptados
Permite la descarga de ficheros, y la subida de cualquier fichero también. Devuelve la lista de apps instalada, insertar un nuevo contacto... en dispositivos rooteados, incluso se permitiría la instalación de un apk diferente de forma silenciosa.

Código para añadir contactos de forma remota
Parte del código para subir ficheros
Trend Micro contactó con Baidu, y este creó una nueva versión que elimina los comandos potencialmente peligrosos de la lista. También están reemplazando de los markets las apps afectadas.
 
¿Qué hemos encontrado?

Trend Micro habla de miles de apps afectadas. Con Tacyt, encontramos varias usando el SDK y todavía disponibles en Google Play. Algunas con hasta 5 millones de descargas y no relacionadas con Baidu.

Una variante del código con los comandos que se admiten
Estos son algunos de los packageNames vistos en Google Play (aunque habrá más, seguro) y que complementan a los ya publicados por Trend Micro (hasta ahora):
  • com.qiyi.video.market
  • com.nd.android.launcher91
  • com.ivodani.comicsisland.activity
  • com.qyer.android.jinnang
  • com.pad.comicsisland.activity
  • com.cubic.choosecar
No hemos podido confirmar que los comandos remotos funcionen igual en todas ellas. Lo que es seguro es que contienen el código del backdoor, pero puede que necesiten algún cambio en la fórmula de comunicación para usar esta puerta trasera. Deberían ser revisadas individualmente para estar seguros (o incluso si es que funcionan).

Una de las más sencillas de comprobar, es la popular Baidu Maps. No esta, sino su versión previa 8.7.0.

En la imagen, usamos este plugin de Chrome para inyectar comandos POST. El resultado, (insertar un contacto de forma remota) se muestra también en la figura. Como se puede ver, el icono de Baidu Maps está en la barra de notificación del teléfono.

Añadiendo contactos con un comando POST
Merece la pena mencionar que, muchas de las apks avistadas con el código, confían en dos ficheros clases.dex diferentes. Esto significa que, una vez ejecutado, la app podría cargar classes2.dex (o cualquier nombre) desde su código "principal". Habitualmente es este segundo fichero .dex el que contiene el código del backdoor.


Una app que contiene un segundo fichero "dex
Esto no es nuevo. Mucho malware/adware in Google Play usa este truco para intentar eludir las detecciones. Puede que descarguen el .dex de otro sitio, o lo lleven dentro, pero resulta interesante comprobar que las capacidades de este SDK Moplus suelan encontrarse en este segundo fichero .dex.

Además, uno de los puntos más interesantes es que Mobo Launcher, relacionado con el conocido market Mobogenie, contiene el código del backdoor también, y este sí es popular incluso fuera de China. Está en Google Play desde finales de 2014. De hecho, es la app más antigua en el market principal con esta versión del backdoor, hasta donde sabemos.

Algunas de las apps detectadas en Tacyt
Aunque no hemos podido hacerlo funcionar y enviarle un comando que no devuelva un error (todavía no estamos seguros de qué falla) el servidor nanoHttp se levanta, y el código para recibir comandos se encuentra presente en la app... por lo que hay razones más que suficientes para no fiarse de esta app. Un análisis más en profundidad podría permitir saber cómo funciona y, a un atacante, aprovechar el fallo.

Por supuesto, existen otros APKs fuera de Google Play (aptoide, mobogenie...) con este backdoor también.

La parte buena es que la mayoría de estos programas ya son detectados por varios motores, no solo por esta razón, pero detectados, en todo caso.

Sergio de los Santos
ssantos@11paths.com
@ssantosv

Juan Manuel Tirado
juanmanuel.tirado@11paths.com

No hay comentarios:

Publicar un comentario en la entrada