Modo Avión falso: Una técnica de manipulación de dispositivos móviles para mantener la conectividad

Jamf Threat Labs desarrolló una técnica de persistencia posterior a la vulneración de seguridad en el iOS 16 que muestra falsamente un Modo Avión funcional. En realidad, tras vulnerar los dispositivos con éxito, el atacante instala un Modo Avión artificial que edita la interfaz del usuario para mostrar iconos de Modo Avión y corta la conexión a Internet a todas las apps excepto a la aplicación atacante. Esto permite al atacante mantener el acceso al dispositivo incluso cuando el usuario cree que está desconectado. Esta técnica aún no se ha observado libre en Internet y solo es posible en un dispositivo ya explotado o con jailbreak.

Agosto 17 2023 por

Jamf Laboratorios de amenazas

Investigación dirigida por Hu Ke y Nir Avraham.

¿Han manipulado su Modo Avión?

Como su nombre indica, el Modo Avión está diseñado para permitir a los pasajeros utilizar de forma segura un dispositivo móvil durante el vuelo, desactivando las funciones celulares inalámbricas para evitar interferencias con los equipos críticos de vuelo.

Sin embargo, el uso del Modo Avión se ha extendido más allá de los viajes y algunos lo utilizan para conservar la batería, y otros como una forma de desconectarse de nuestro mundo siempre conectado. Incluso se ha sugerido como técnica de meditación.

Para las personas con ciberparanoia y tecnofobia, poner el teléfono en Modo Avión puede ser un truco psicológico útil para conseguir tranquilidad y una sensación de privacidad adicional.

Pero, ¿debería utilizar el Modo Avión para proteger su seguridad y privacidad?

Hoy vamos a sumergirnos en la tecnología subyacente al Modo Avión en iOS para demostrar un enfoque que permitiría a un actor malicioso mantener una conexión de red celular para una aplicación, incluso cuando el usuario crea que ha activado el Modo Avión.

La capa subyacente

Empezaremos analizando cómo funciona el Modo Avión. Dos daemons (programas residentes) se encargan de la tarea principal de conmutar el Modo Avión. SpringBoard se encarga de los cambios en la interfaz de usuario y CommCenter es responsable del funcionamiento de la interfaz de red subyacente. Tenga en cuenta que CommCenter también es responsable de administrar la función que permite a los usuarios "Bloquear el acceso a datos celulares para apps específicas".

Como puede ver, en condiciones normales, cuando el usuario activa el Modo Avión, la interfaz de red pdp_ip0 (datos celulares) ya no mostrará las direcciones IP IPv4/IPv6. La red celular está desconectada e inutilizable, al menos a nivel del espacio del usuario.

Creación de un Modo Avión artificial

En esta sección, le mostraremos cómo creamos un Modo Avión artificial, manteniendo los cambios en la interfaz de usuario y preservando la conectividad celular para una aplicación seleccionada (que en un escenario de ataque sería el malware del atacante que instaló como parte de una vulneración del dispositivo).

Comenzamos siguiendo los registros de la consola. Observe que al activar el Modo Avión, el primer registro relevante parece ser el que se encuentra a continuación, "#N Preferencia del modo avión del usuario cambiando de..."

Utilizamos esta cadena para localizar el código que hace referencia a ella en el desensamblador. Es una función C++ sin símbolos que se encuentra aquí:

Con la esperanza de que esta función estuviera lo suficientemente al principio de la cadena de llamadas que activan el Modo Avión, la enganchamos con éxito y la sustituimos por una función vacía/que no hace nada. El resultado fue un Modo Avión falso. Ahora, cuando el usuario active el Modo Avión, el dispositivo no se desconectará de la red celular y el acceso a Internet será ininterrumpido.

Conservación de la experiencia del usuario esperada

Se requieren ajustes adicionales en la interfaz de usuario para que el ataque se parezca a la experiencia típica del Modo Avión. Un pequeño ejemplo fue atenuar el icono del celular e impedir que el usuario interactuara con él.

Para lograrlo, enganchamos dos métodos Objective-C e inyectamos un fragmento de código que ajusta el icono del celular para conseguir el efecto deseado. -[SBStatusBarStateAggregator _noteAirplaneModeChanged] y -[CCUIModularControlCenterOverlayViewController _beginPresentationAnimated:interactive:]

Apariencia de desconexión de Internet

Después de activar el Modo Avión sin conexión Wi-Fi, los usuarios esperarían que al abrir Safari no hubiera conexión a Internet. La experiencia típica es una ventana de notificación que pide al usuario "Desactivar el Modo Avión". Para conseguir este efecto, utilizaremos la mencionada función de CommsCenter para "Bloquear el acceso a datos celulares para apps específicas", y lo disfrazaremos de Modo Avión mediante la función enganchada que aparece a continuación.

Las capturas de pantalla siguientes muestran la experiencia de usuario falsificada con el mensaje que se produce normalmente desde la función "Bloquear el acceso a datos celulares para apps específicas" a la izquierda, y el resultado de enganchar la ventana de notificaciones para que parezca el típico mensaje del Modo Avión a la derecha.

Sustituir la ventana de alerta es una cosa, pero ¿cómo desconectamos Internet para Safari sin activar realmente el Modo Avión y afectar a todo el dispositivo? Después de todo, esta es la señal más significativa de que el modo avión está activado.

¿Cómo funciona la ventana de alerta "Los datos móviles están desactivados"?

De forma similar a la manipulación de iconos anterior, descubrimos que el administrador de interfaz del usuario del sistema SpringBoard provocaba la ventana de alerta tras ser notificado por el CommCenter. Profundizando un poco más, llegamos a la conclusión de que CommCenter era notificado por el núcleo a través de una función observadora/de devolución registrada.

CommCenter`CellularUsagePolicyController::createNEConfigurationStore_sync

-> NetworkExtension.framework`-[NEPathEventObserver initWithQueue:eventHandler:]

-> libnetwork.dylib`network_config_cellular_blocked_observer_create

Estas funciones network_config_* llaman internamente a socket()/ioctl() para interactuar con el núcleo:

network_config_cellular_blocked_observer_create

-> network_config_policy_observer_create

-> __network_config_policy_observer_create_block_invoke

-> network_config_setup_policy_event_watcher

-> socket(32, 3, 1)

-> ioctl(...)

Aprovechamos `fsevents`, y observamos que el daemon CommCenter también administra un archivo de base de datos SQL /private/var/wireless/Library/Databases/CellularUsage.db. Esta base de datos registra el estado de acceso a los datos celulares de cada app.

El valor de "flags" se fijará en 8 si se bloquea el acceso de una aplicación a los datos celulares. Esto es útil, ya que podemos leer una lista de los ID de paquetes de aplicaciones de este archivo de base de datos SQL y obtener su valor preestablecido.

Utilizando esta base de datos de ID de paquetes de aplicaciones instaladas, ahora podemos bloquear o permitir selectivamente que una app acceda a datos Wi-Fi o celulares utilizando el siguiente código. Cuando se combina con las otras técnicas descritas anteriormente, el Modo Avión falso ahora parece actuar solo como el real, excepto que la prohibición de Internet no se aplica a los procesos que no son de aplicación, como un troyano Backdoor.

Jamf Executive Threat Protection puede identificar ataques sofisticados para mantener a salvo a sus usuarios.

Suscribirse al Blog de Jamf

Haz que las tendencias del mercado, las actualizaciones de Apple y las noticias de Jamf se envíen directamente a tu bandeja de entrada.

Para saber más sobre cómo recopilamos, usamos, compartimos, transferimos y almacenamos su información, consulte nuestra Política de privacidad.

Etiquetas: