Snapchat falso en Google Play Store

Zimperium descubrió y denunció una versión falsa de la popular aplicación Snapchat en la tienda oficial de Google Play; En el momento de nuestro descubrimiento, era el segundo resultado al buscar «Snapchat». La versión falsa de la aplicación Snapchat usa «Snap Inc». como Razón Social, con un ” .” adjunto al nombre original.

Snapchat falso en Google Play Store

Metadatos falsos de Snapchat

Nombre de la aplicación: Ѕnарϲhаt
Nombre de la empresa: Snap Inc.
Nombre del paquete: com.snacha.android
Enlace de la tienda de juegos: https://play.google.com/store/apps/details?id=com.snacha.android

Cronología:

  • Detección y análisis inicial: 5 de agosto de 2017
  • Reportado a Google: 5 de agosto de 2017 a las 11:34 p. m.
  • Google eliminó la aplicación de Play Store: 7 de agosto de 2017 a las 6:39 p. m.

Como la página de Google Play Store ahora se ha eliminado, toda la información se puede ver en los siguientes enlaces de Archivo.

Página de la tienda de juegos: http://archive.is/cE43s
Página del desarrollador: https://archive.is/li6dm

Evolución

Historia: http://archive.is/https://play.google.com/store/apps/details?id=com.snacha.android

En el historial de archivo anterior, podemos ver que el 6 de agosto de 2017, el Snapchat falso en Google Play Store obtuvo 2127 calificaciones con 1000 a 5000 instalaciones, el 7 de agosto de 2017 podemos ver 4244 calificaciones con 5000 a 10 000 instalaciones. El número de habilitaciones e instalación se duplicó en 24 horas. De hecho, la campaña se detuvo muy pronto, tras el crecimiento exponencial de las descargas y nuestro informe a Google.

Comportamiento

Después de iniciar la aplicación, el usuario será recibido por un anuncio, después de cerrarla y hacer clic en el botón «Siguiente» que se muestra en la pantalla, se cargarán anuncios adicionales. Entre un anuncio y otro, la aplicación también muestra al usuario diferentes mensajes como: «Atención, la aplicación requiere conexión a Internet antes de continuar, asegúrese de estar conectado». o “Error de conexión”. Está claro que el atacante debe asegurarse de que el usuario esté conectado para poder obtener y mostrar los anuncios. El usuario habilitará la conectividad, si aún no está disponible, y continuará a través de mensajes y anuncios. Como último paso, la aplicación solicita ser calificada en Google Play Store, después de hacer eso, no sucede nada y se mostrará el mensaje «Error de conexión» junto con un botón «Intentar de nuevo»; después de hacer clic en él, el ciclo de anuncios comenzará una vez más.

Durante la ejecución la aplicación establece conexiones a diferentes IPs, todas propiedad de Google Ads (172.217.6.170, 172.217.12.65, 172.217.2.227, 172.217.2.226, 216.58.218.98, 216.58.194.67, 216.58.218.194, 216.58.218.193).

El siguiente es un video que muestra el comportamiento de la aplicación:

Comparación

Las muestras se compararon tanto estructuralmente como según su comportamiento con el APK original de Snapchat procedente de la Play Store oficial.

Snapchat falso en Google Play Store

1659521124 859 Snapchat falso en Google Play Store

La aplicación falsa de Snapchat es completamente diferente a la original:

  • certificado diferente: la versión falsa utiliza un certificado que imita al de Google;
  • clase diferente: no se tomó prestada ni una sola clase de la aplicación original, por lo que ni siquiera podemos decir que el desarrollador parchó las clases para inyectar anuncios, simplemente escribió una diferente;
  • actividades diferentes: com.snacha.android.PTPlayer se utiliza para inicializar el entorno BuildBox, registrar una conexión con Google IAB y cargar la biblioteca nativa libplayer.so; com.google.android.gms.ads.AdActivity es la actividad de Google Ads utilizada para mostrar los anuncios.
  • diferentes servicios: la versión falsa no inicia ningún servicio;
  • diferentes receptores: la versión falsa no configura ningún receptor.

1659521124 514 Snapchat falso en Google Play Store

El comportamiento de la aplicación falsa no coincide en nada con el del Snapchat original, lo que confirma que el flujo de control es diferente.

Explicación detallada

La idea principal detrás de la aplicación parece ser la monetización de anuncios/tráfico, ya sea por visualización o haciendo clic en ellos. Los permisos solicitados confirman que la aplicación está obteniendo datos de la red e intentando recopilar información sobre la conexión.

Permisos solicitados:

  • android.permiso.INTERNET
  • android.permiso.ACCESS_NETWORK_STATE
  • android.permiso.ACCESS_WIFI_STATE
  • android.permiso.ACCESS_COARSE_LOCATION

Los dos paquetes principales en el APK son com.snacha.android y com.secrethq. El primero está inicializando la contraparte de Java del motor del juego (basado en Cocos2dx), conectándose a Google IAB y cargando libplayer.so. Durante la inicialización, se configura una interfaz para varias suscripciones de anuncios (por ejemplo, AdMob, AppLovin, Chartboost, Facebook, Heyzap, Leadbolt, RevMob) y el segundo paquete se encarga de manejar la comunicación JNI con la biblioteca nativa. De los anuncios enumerados, solo se implementa AdMob.

La biblioteca nativa libplayer.so se carga cuando el PTPlayer.java clase en la primera instancia, JNI_OnLoad está guardando una referencia al puntero de JavaVM que se usará más tarde para el puente JNI.

El código nativo carga los archivos de configuración /assets/data/*.xml durante la inicialización; en particular el PTModelGeneralSettings.0.atributos.xml El archivo contiene todas las configuraciones para los banners de AdMob y el enlace utilizado para calificar la aplicación en Play Store.

Tienda de juegos de Google

adMobBanner

ca-app-pub-3800200642767315/4570937463

adMobIntersticial

ca-app-pub-3800200642767315/8772716981

reseñaEnlace

https://play.google.com/store/apps/details?id=com.snacha.android

Todos los métodos relacionados con AdMob en el com.secrethq.ads.PTAdMobBridge class se llaman usando JNI desde la biblioteca libplayer.so (por ejemplo, _ZN9PTAdAdMob10showBannerEv, _ZN9PTAdAdMob16showInterstitialEv, PTAdAdMobJni_hideBannerJNI, PTAdAdMobJni_initBannerJNI).

El botón «Valorar ahora» está activando una llamada a PTServices::openReviewUrlque lee la URL de las configuraciones XML y usa JNI para conectarse a la URL.

  1. PTPScreenUi::init inicializará los botones en la interfaz de usuario y, en particular, registrará un oyente en el botón «Calificar ahora» llamando PTPScreen::assignActionToButtons (el oyente asociado es PTPScreenUi::reviewButtonAction).
  2. Cuando se hace clic en el botón, la función PTPScreenUi::reviewButtonAction se llama y el control se pasa al PTServices::openReviewUrl función.
  3. los PTServices::openReviewUrl función está extrayendo el valor asociado a la clave «reviewLink» de la PTModelGeneralSettings.0.atributos.xml archivo de configuración.
  4. los PTServices::openUrl se llama a la función y se pasa la ejecución a PTServicesJni_openUrlJNI.
  5. los PTServicesJni_openUrlJNI función llama a la openUrl (cadena de URL) metodo de la com/secrethq/utils/PTServicesBridge.java clase.

El botón «Siguiente» está cargando la imagen recortada para que se muestre en pantalla completa y cada vez está activando la PTPScreen::showAds función que carga y muestra el anuncio de AdMob a pantalla completa o intersticial.

Las imágenes y fuentes utilizadas para mostrar las diferentes pantallas de la aplicación provienen de los siguientes archivos: activos/datos/atlas/atlas_ID2057.png y activos/datos/fuentes/PTModelFont_ID2.png. Los archivos de configuración assets/data/atlases/atlas_ID2057.plist contienen coordenadas y especificaciones de tamaño para recortar los sprites y extraer las imágenes/fuentes que luego se muestran usando el motor Cocos2dx.

El uso de un motor de juego completo para implementar dicha aplicación puede parecer demasiado complicado, pero un atacante puede emplear esto como una técnica para endurecer y ralentizar el análisis porque las acciones en realidad se manejan internamente en el motor y pueden resultar difíciles de encontrar; como ejemplo, el mensaje «Califique esta aplicación para obtener Snapchat» y el botón «Calificar ahora» no provienen de una imagen png o una cadena, sino que se ensamblan utilizando el sprite de fuente y un archivo de configuración plist.

Hipótesis adicional

Lo que nos preocupó al principio fue la compleja estructura de la aplicación; de hecho, ese flujo de control simple se construye usando un motor de juego llamado Caja de compilación. El motor del juego también incluye un soporte incorporado para anuncios y monetización basado en Google IAB.

Teniendo en cuenta cómo se muestran los diferentes botones/anuncios en la pantalla, nuestra primera hipótesis fue que el código intentaba imitar un ataque como Cloak&Dagger, mostrando diferentes capas de aplicaciones superpuestas y engañando al usuario para que activara compras o acciones no deseadas.

Todavía estamos investigando las causas y circunstancias asociadas con la aplicación para desencadenar el comportamiento y las condiciones adicionales que pueden derivarse.

Notas adicionales

Durante nuestra investigación inicial recopilamos algunos ejemplos del uso del motor de juego BuildBox:

Un agradecimiento especial para la captura, , @shokoluv, @ryanza por el análisis y validación ya todo el Grupo zLabs por la ayuda y la redacción de esta historia.

Deja un comentario