Esta entrada fue inspirada por la excelente presentación de Jan Seredynski en THS 2023.
La ciberseguridad no es una cuestión binaria: no existen soluciones que garanticen un 100% de seguridad. En realidad, se trata más de evaluar los riesgos y elegir soluciones que sean menos susceptibles a los ataques. Un ejemplo de tal evaluación en el contexto de la banca es el hecho de que confirmar transacciones a través de aplicaciones móviles es más seguro que los populares códigos SMS, aunque también aquí existen métodos de ataque efectivos. Estos pueden ser, por ejemplo, aplicaciones falsas que se hacen pasar por las bancarias, así como aquellas que utilizan exploits (como Pegasus). Sin embargo, uno de los ataques más interesantes a la banca móvil se basa en la instalación en el teléfono de la víctima de una aplicación aparentemente inocente que abusa de los permisos de Android.
El esquema de infección a menudo comienza con la instalación de una aplicación de una fuente no confiable por parte de la víctima. Se le anima a hacerlo mediante información que indica que la versión que instalará tiene funciones premium desbloqueadas de forma gratuita.
Desafortunadamente, también sucede que las aplicaciones en la tienda oficial de Google Play resultan ser maliciosas. Inicialmente no contienen funciones dañinas, pero las adquieren en actualizaciones posteriores. Los ciberdelincuentes crean aplicaciones con fines aparentemente inofensivos. Por ejemplo, una simple aplicación de linterna o una herramienta para manejar la cámara. Estas aplicaciones solicitan permisos para varias funciones en el dispositivo. Durante varios meses, funcionan según lo declarado, sin causar problemas. Los usuarios a menudo les dan opiniones positivas, lo que fortalece la reputación de la aplicación y anima a otros usuarios a descargarla. Sin embargo, después de un tiempo, los ciberdelincuentes modifican la aplicación, añadiendo código malicioso o cambiando los permisos para poder robar datos. Esta adición retardada de código malicioso permite a los delincuentes pasar con éxito el proceso de verificación en la tienda Google Play.
¿Cómo funcionan los servicios de accesibilidad y las superposiciones en el contexto del malware?
Los servicios de accesibilidad (Accessibility Services) permiten, entre otras cosas, leer en voz alta la información que se muestra en la pantalla del teléfono y completar los campos de los formularios por el usuario.
Una aplicación maliciosa, aprovechando los mecanismos de accesibilidad destinados a personas con discapacidades, puede registrar todo lo que ocurre en la pantalla, obteniendo acceso a los códigos introducidos. Gracias a esto, puede conocer la contraseña de la aplicación móvil y ordenar y confirmar transferencias de manera autónoma. El otorgamiento de permisos sospechosos se realiza utilizando otro truco astuto: las superposiciones de pantalla (Overlay). A menudo, el usuario ni siquiera es consciente de que está aceptando permisos peligrosos.
Un ejemplo de «Overlay Services» es la burbuja que aparece con un mensaje de Messenger.
En la variante mostrada a continuación, la superposición de pantalla falsa cubre parte de la pantalla real (escondiéndola de la vista del usuario) y luego pide a la víctima que ingrese información (generalmente confidencial, como datos bancarios, códigos PIN o respuestas a preguntas de seguridad). La víctima cree que está proporcionando su información confidencial en una aplicación confiable, pero en realidad se la está enviando directamente al atacante.
El objetivo de esta variante de ataques con superposiciones de pantalla es a menudo la banca móvil, fintech, el comercio electrónico, los juegos o las aplicaciones minoristas. Una vez que el atacante conoce el PIN para confirmar transacciones, puede usar accesibilidad para, al abrir nuestra verdadera aplicación bancaria, iniciar sesión automáticamente, ordenar y confirmar una transferencia.
Ejemplos de ataques reales hasta la fecha
- BrasDex es un tipo de malware enfocado en atacar sistemas Android, con especial énfasis en las aplicaciones bancarias en Brasil. Cuando infecta un dispositivo, BrasDex identifica y ataca solo aplicaciones selectas. Utiliza funciones de accesibilidad de Android para monitorear la pantalla, controlar el toque, manejar el teclado y otras acciones maliciosas. El objetivo principal de BrasDex es robar datos de inicio de sesión al usar aplicaciones bancarias y realizar transacciones sin el conocimiento del usuario.
- ERMAC 2.0 es un troyano en la plataforma Android utilizado para robar datos de inicio de sesión de los usuarios y enviarlos a los ciberdelincuentes. Los ladrones utilizan estos datos para hacerse con cuentas bancarias y de criptomonedas de las víctimas, así como para realizar diferentes estafas. Un ejemplo típico de su funcionamiento fue la aplicación falsa que se podía encontrar en el sitio legítimo de un proveedor de alimentos. Esta aplicación falsa solicitaba hasta 43 permisos, incluidos el acceso a los servicios de accesibilidad y las superposiciones, lo que permite el robo de datos de inicio de sesión.
- Xenomorph es malware que sigue siendo utilizado en ataques, aunque debutó hace más de dos años. Inicialmente, se distribuyó a través de la tienda Google Play como una aplicación para mejorar el rendimiento. Los usuarios que instalaban estas aplicaciones infectaban inconscientemente sus dispositivos, pensando que la mejora del rendimiento requería permisos tan amplios. Xenomorph tiene la capacidad de interceptar mensajes de texto, lo que permite recopilar datos utilizados para confirmar transacciones. Además, utiliza permisos de accesibilidad para crear superposiciones discretas en la pantalla.
Consejos para desarrolladores sobre la defensa contra el malware que utiliza servicios de accesibilidad:
- Bloquear todos los servicios de accesibilidad: Esta opción es la menos amigable para los usuarios con diversas discapacidades, pero es una de las formas más simples de protegerse contra el abuso de permisos.
- Permitir solo servicios de una lista blanca: Un enfoque más amigable hacia la accesibilidad, que utiliza API para listar todos los Servicios de Accesibilidad, identificar sus identificadores de paquete y permitir que solo ciertos servicios de confianza se ejecuten a través de la aplicación. Sin embargo, las aplicaciones instaladas externamente pueden imitar cualquier identificador de paquete, por lo que esta defensa protege solo contra amenazas provenientes de la tienda Google Play.
- Permitir solo servicios con permisos razonables: Puedes utilizar un indicador (android:importantForAccessibility) que identifica los elementos críticos de la interfaz de usuario para la accesibilidad. Configúralo en «false» para todos los campos sensibles en tu aplicación y limita los servicios de accesibilidad que declaren interés en leer campos no importantes. Puedes hacer esto verificando la propiedad flag del servicio y asegurándote de que FLAG_INCLUDE_NOT_IMPORTANT_VIEWS no esté presente.
- Utilizar biometría y diálogos del sistema: Requerir y usar autenticación biométrica para transacciones importantes puede ayudar a prevenir que los ciberdelincuentes utilicen accesibilidad para realizar transacciones no autorizadas en la aplicación del usuario. Requerir también que las transacciones se realicen a través de diálogos del sistema puede bloquear eficazmente las superposiciones. Las nuevas versiones de Android no permiten que las superposiciones se ejecuten en ventanas del sistema.
- Utilizar Android API 34: Esta actualización asegura que solo los servicios de accesibilidad verificados pueden ver y acceder a información sensible en la aplicación.
Recomendaciones para la detección de superposiciones
Google ha introducido varias API útiles para ayudar a detectar y contrarrestar los ataques de malware que utilizan superposiciones:
- API 9: Cuando la opción de filtrado de toques está habilitada (setFilterTouchesWhenObscured(boolean)), el sistema ignora los toques del usuario cuando la ventana está cubierta por una superposición. En este caso, se refiere a cualquier otra ventana visible (o mensaje/toast/diálogo) que cubra el lugar del toque.
- API 29: Esta actualización permite una detección más precisa de toques parcialmente cubiertos mediante una bandera (FLAG_WINDOW_IS_PARTIALLY_OBSCURED), que indica cuándo una ventana recibe un evento de movimiento parcial o completamente cubierto por otra ventana visible. Es importante notar que el evento se marca con esta bandera si el movimiento no pasa directamente a través de la superposición.
- API 31: Esta actualización proporciona a los desarrolladores la opción setHideOverlayWindows(true), que oculta y automáticamente elimina las superposiciones que no pertenecen al sistema. Actualmente, es el enfoque más efectivo y eficiente.
Como usuario promedio, es importante saber que los servicios de accesibilidad (Accessibility Services) no tienen acceso a datos biométricos y no pueden falsificarlos. Por esta razón, se recomienda utilizar métodos biométricos en lugar de códigos PIN/contraseñas tradicionales. Iniciar sesión en aplicaciones mediante huellas dactilares o reconocimiento facial, así como confirmar transacciones con estos métodos, es mucho más seguro. La biometría agrega una capa adicional de seguridad, ya que es única para cada usuario y más difícil de copiar o robar que las contraseñas o códigos PIN tradicionales. Por lo tanto, especialmente en el contexto de operaciones financieras y acceso a aplicaciones importantes, el uso de tecnologías biométricas es una solución mucho mejor.
Actualización 1: Un lector no especializado señaló que ya han aparecido nuevas variantes de troyanos que tienen mecanismos incorporados para inducir a la víctima a usar otro método de autenticación en lugar de la biometría. El troyano automáticamente «hace clic» en el botón «cancelar» cuando detecta autenticación biométrica y de alguna manera obliga al usuario a usar métodos alternativos cuyos datos puede interceptar.