Cómo Tapjacking regresó con Android Marshmallow, y nadie se dio cuenta

Mientras que muchos de nosotros salivamos sobre el Android Nougat recientemente lanzado para dispositivos Nexus, la gran mayoría de los usuarios todavía usan Android Marshmallow. Un exploit cuya existencia ha sido documentada desde al menos mediados de 2015 todavía afecta a muchos dispositivos Android modernos.

Las aplicaciones maliciosas pueden hacer tapjack de sus acciones para otorgarles un permiso que nunca otorgó explícitamente. Así es como funciona el exploit.


El regreso del tapjacking

Imagina que abres Instagram e intentas compartir una foto que tomaste recientemente mientras estabas de vacaciones. Cuando selecciona buscar una imagen en su galería, Instagram le pide que le otorgue permiso para acceder a su almacenamiento. Pero cuando toca "sí", se encuentra con un mensaje de error.

No puede otorgar el permiso de almacenamiento para Instagram porque tiene habilitada una superposición de pantalla activa; en este caso, una de las muchas aplicaciones que tiñe su pantalla para que pueda usar su teléfono por la noche sin cegarse. Este es un caso en el que el sistema de permisos de Android funciona según lo previsto : para otorgar a una aplicación un permiso confidencial, debe desactivar las superposiciones de pantalla que tenga en su dispositivo.

Marshmallow Permiso Tapjacking. Al tocar "Permitir" se mostrarán todos mis contactos.

Las aplicaciones que tienen la capacidad de dibujar sobre su pantalla podrían potencialmente engañarlo para que alimente datos confidenciales. Por ejemplo, una superposición de pantalla podría colocar una entrada de contraseña falsa encima de una pantalla de inicio de sesión real para recopilar sus contraseñas. Un exploit como este se llama 'tapjacking' y ha aparecido y ha sido parcheado en varias versiones de Android a lo largo de los años, con uno de los peores ejemplos que perduró hasta Android 4.0.3. Pero recientemente, el exploit regresó con el modelo de permiso de tiempo de ejecución de Android Marshmallow.

Un desarrollador llamado Iwo Banaś creó una aplicación que demuestra el exploit. La forma en que funciona es bastante simple: cuando una aplicación muestra un diálogo de permiso, la aplicación maliciosa que instaló mostrará una superposición del sistema para cubrir el bloque de texto del diálogo de permiso con el texto que desee. Un usuario involuntario que haga clic en "permitir" en el cuadro de diálogo de permiso será engañado para que otorgue un permiso que se le solicitó, pero cuya solicitud se ocultó de la vista del usuario. Tal hazaña derrota por completo el propósito del sistema de permisos de Android Marshmallow, ya que se suponía que la introducción del nuevo modelo aseguraría que los usuarios solo otorgarían permisos a los que dieron su consentimiento explícito .

Ahora, sé en qué estás pensando. Si Android detecta una superposición del sistema y me impide otorgar permisos de almacenamiento de Instagram, ¿no evitaría que ocurriera esta vulnerabilidad? La respuesta es no, en mis pruebas parece que en ciertos dispositivos que muestran una superposición de texto en la parte superior de un cuadro de diálogo de permisos no se activa el mecanismo de seguridad. El desarrollador de la aplicación de prueba de concepto de tapjacking afirma que el exploit es efectivo porque depende de que el usuario instale una aplicación maliciosa secundaria que apunte al nivel de API 22 o inferior (anterior a Marshmallow). Esto se debe al hecho de que antes de Android Marshmallow, todas las aplicaciones tienen permisos durante la instalación.

De acuerdo, entonces, si estás en Marshmallow, todo lo que deberías hacer es evitar instalar cualquier aplicación en la que no confíes que solicite el permiso para dibujar una superposición, ¿verdad? Si el modelo de permiso de Android funcionara como se presentó originalmente, estaría en lo cierto. Pero desde el descubrimiento de esta vulnerabilidad, incluso las aplicaciones que se dirigen al nivel 23 de API (Marshmallow) que solicitan el permiso de superposición son un riesgo potencial.


¿Una brecha en el modelo de permiso?

Aplicaciones típicas que utilizan superposiciones. Vía: medio

Si eres uno de los muchos millones de personas que usan Facebook Messenger para chatear con tus amigos, entonces te has encontrado con una de las mejores características de Android: la capacidad de las aplicaciones de dibujar en la parte superior de otras pantallas. ¿Qué tan genial es que puedas tener una burbuja con tu chat grupal de Facebook favorito y seguir al usuario sobre cualquier aplicación que abra? Aunque Messenger de Facebook introdujo la idea de las "aplicaciones flotantes" en la corriente principal, el concepto existe desde hace algún tiempo en Android. Las aplicaciones han podido crear superposiciones sobre sus aplicaciones durante algún tiempo, gracias a la existencia de TYPE_SYSTEM_OVERLAY en el WindowManager de Android.

Menú de permiso "Dibujar sobre otras aplicaciones"

Antes de Android Marshmallow, las aplicaciones tendrían que solicitar un permiso llamado SYSTEM_ALERT_WINDOW durante la instalación antes de que pudiera mostrar superposiciones en la parte superior de la pantalla. Pero esto cambió con la introducción del modelo de permiso de tiempo de ejecución granular de 6.0. Los usuarios ahora tendrían que otorgar permisos a las aplicaciones cuando realmente ejecuten la aplicación, lo que con suerte estimularía al usuario promedio a proteger sus propios datos privados de las aplicaciones que solicitan sospechosamente permisos aparentemente no relacionados funcionalmente.

Sin embargo, SYSTEM_ALERT_WINDOW no es como otros permisos. Los desarrolladores no pueden mostrar un cuadro de diálogo para solicitar mediante programación que el usuario final otorgue el permiso, como la mayoría de los otros permisos en cualquier aplicación dirigida a Marshmallow. En su lugar, debe navegar manualmente a la pantalla de configuración y habilitar el permiso usted mismo. Por supuesto, algunas aplicaciones como Facebook Messenger lo ayudarán a lo largo del proceso.

Google requiere esto de los desarrolladores porque han considerado que el permiso es "particularmente sensible".

Permisos especiales

Hay un par de permisos que no se comportan como permisos normales y peligrosos. SYSTEM_ALERT_WINDOW y WRITE_SETTINGS son particularmente sensibles, por lo que la mayoría de las aplicaciones no deberían usarlos. Si una aplicación necesita uno de estos permisos, debe declarar el permiso en el manifiesto y enviar un intento solicitando la autorización del usuario. El sistema responde a la intención mostrando una pantalla de administración detallada al usuario.

Teniendo en cuenta lo que sabemos sobre el tapjacking, esto tiene sentido. Pero aquí está la cosa. Google ni siquiera sigue sus propias reglas. ¿Las capturas de pantalla de Facebook Messenger lo guían a través del proceso de otorgarle el permiso SYSTEM_ALERT_WINDOW que le mostré anteriormente? Eso solo sucede si instala el APK desde fuera de Google Play Store. Si instala una aplicación desde Google Play Store, el permiso SYSTEM_ALERT_WINDOW se otorga automáticamente.

Archivo de manifiesto de Facebook Messenger. A la aplicación se le otorga automáticamente el permiso de superposición a pesar del objetivo del nivel 23 de API.


Google ha sacrificado la seguridad por conveniencia

Durante mucho tiempo antes de Android Marshmallow, SYSTEM_ALERT_WINDOW se consideraba un permiso "peligroso". Con Android Marshmallow 6.0, el permiso se cambió a firma | sistema | appop, que es lo que inicialmente requería que los desarrolladores llevaran al usuario a la pantalla de configuración para otorgar el permiso. Pero con la versión 6.0.1 de Android, SYSTEM_ALERT_WINDOW se modificó para que Google Play Store pudiera otorgar automáticamente el permiso sin notificar al usuario. Por qué Google realizó este cambio no está claro para nosotros. Los propios Google no han salido y han declarado por qué hicieron este cambio, lo cual es especialmente extraño teniendo en cuenta el lenguaje sobre SYSTEM_ALERT_WINDOW que todavía existe en sus páginas web.

Es posible que suficientes desarrolladores se enojaron por los cambios iniciales en SYSTEM_ALERT_WINDOW que requerían que los usuarios concedieran manualmente el permiso que Google cedió silenciosamente y simplemente lo otorgaron a cualquier aplicación que lo solicitó. Pero al hacerlo, Google ha sacrificado la seguridad por conveniencia . Hay una razón por la cual Google mismo consideró que el permiso es peligroso por mucho tiempo, porque lo es. Y la existencia de la explotación de tapjacking con permiso de Marshmallow es evidencia suficiente de los peligros inherentes al otorgar automáticamente este permiso a cualquier aplicación.

Esta hazaña de tapjacking nos ha llamado la atención recientemente, aunque existe desde hace muchos meses. En nuestras pruebas internas de dispositivos entre el equipo del Portal, hemos confirmado que el exploit funciona en muchos dispositivos modernos con Android Marshmallow . Aquí hay un resumen rápido de los dispositivos que probamos en las últimas versiones de software disponibles para cada dispositivo respectivo y si el exploit de tapjacking funciona o no. Los dispositivos marcados como "Vulnerables" son susceptibles a una explotación de tapjacking, mientras que los dispositivos marcados como "No Vulnerables" pueden detectar una aplicación que muestra la superposición y solicitar que la desactive antes de continuar.

  • Nextbit Robin - Android 6.0.1 con parches de seguridad de junio - Vulnerable
  • Moto X Pure - Android 6.0 con parches de seguridad de mayo - Vulnerable
  • Honor 8 - Android 6.0.1 con parches de seguridad de julio - Vulnerable
  • Motorola G4 - Android 6.0.1 con parches de seguridad de mayo - Vulnerable
  • OnePlus 2 - Android 6.0.1 con parches de seguridad de junio - No vulnerable
  • Samsung Galaxy Note 7 - Android 6.0.1 con parches de seguridad de julio - No vulnerable
  • Google Nexus 6 - Android 6.0.1 con parches de seguridad de agosto - No vulnerable
  • Google Nexus 6P - Android 7.0 con parches de seguridad de agosto - No vulnerable

Hasta ahora, esos son todos los dispositivos que pude hacer probar al equipo. No pude encontrar ninguna correlación entre la versión del parche de seguridad y el exploit. Como puede ver en nuestra última discusión sobre las actualizaciones de seguridad de Android, muchas personas no se están ejecutando en los últimos parches de seguridad de todos modos y, por lo tanto, son posiblemente vulnerables a esta vulnerabilidad y otras que se describen en el Boletín de seguridad de Android.


Avanzando

El servicio Tapjacking otorgó el permiso de superposición

Le instamos a que pruebe este exploit en su dispositivo para ver si es vulnerable . Hemos compilado los APK del código fuente vinculado anteriormente (también puede hacerlo usted mismo) y los hemos subido a AndroidFileHost. Para probar el exploit, debe instalar tanto la aplicación principal de tapjacking como su servicio auxiliar. Luego, simplemente ejecute la aplicación principal y haga clic en el botón "prueba". Si un cuadro de texto flota sobre el cuadro de diálogo de permisos y cuando hace clic en "permitir" aparece una lista de los contactos de su dispositivo, entonces su dispositivo es vulnerable al robo de tap. No se preocupe por el cuadro de texto flotante que no cubre por completo el cuadro de diálogo de permisos, esta aplicación de prueba de concepto no está diseñada para demostrar perfectamente cómo secuestrar un cuadro de diálogo de permisos, sino para demostrar que es realmente posible.

Esperamos que se introduzca una solución que repare esta vulnerabilidad en todos los dispositivos Marshmallow y que los fabricantes de equipos originales actualicen todos sus dispositivos a la última revisión de seguridad. Debido a que la realidad es que tomará muchos meses para que la mayoría de los dispositivos comprometidos obtengan Turrón, por lo que la única forma para que la mayoría de los usuarios se mantengan fuera de peligro es instalar los últimos parches de seguridad o tomar los permisos de las aplicaciones de monitoreo. Pero con la decisión de Google de otorgar automáticamente el permiso SYSTEM_ALERT_WINDOW potencialmente peligroso, muchos usuarios ejecutan, sin saberlo, aplicaciones que podrían secuestrar sus teléfonos para otorgar permisos cada vez más peligrosos.